Skip to content

Commit cfbc002

Browse files
committed
add debug callback
1 parent 6181009 commit cfbc002

File tree

2 files changed

+58
-60
lines changed

2 files changed

+58
-60
lines changed

tools/gfx-unit-test/gfx-test-util.cpp

Lines changed: 27 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,29 @@ using Slang::ComPtr;
1515

1616
namespace gfx_test
1717
{
18+
class DebugPrinter : public rhi::IDebugCallback
19+
{
20+
public:
21+
virtual SLANG_NO_THROW void SLANG_MCALL handleMessage(
22+
rhi::DebugMessageType type,
23+
rhi::DebugMessageSource source,
24+
const char* message) override
25+
{
26+
static const char* kTypeStrings[] = {"INFO", "WARN", "ERROR"};
27+
static const char* kSourceStrings[] = {"Layer", "Driver", "Slang"};
28+
if (type == rhi::DebugMessageType::Error)
29+
{
30+
printf("[%s] (%s) %s\n", kTypeStrings[int(type)], kSourceStrings[int(source)], message);
31+
fflush(stdout);
32+
}
33+
}
34+
static DebugPrinter* getInstance()
35+
{
36+
static DebugPrinter instance;
37+
return &instance;
38+
}
39+
};
40+
1841
void diagnoseIfNeeded(slang::IBlob* diagnosticsBlob)
1942
{
2043
if (diagnosticsBlob != nullptr)
@@ -110,62 +133,6 @@ Result loadComputeProgram(
110133
return outShaderProgram ? SLANG_OK : SLANG_FAIL;
111134
}
112135

113-
// Slang::Result loadComputeProgram(
114-
// rhi::IDevice* device,
115-
// slang::ISession* slangSession,
116-
// Slang::ComPtr<rhi::IShaderProgram>& outShaderProgram,
117-
// const char* shaderModuleName,
118-
// const char* entryPointName,
119-
// slang::ProgramLayout*& slangReflection,
120-
// PrecompilationMode precompilationMode)
121-
//{
122-
// Slang::ComPtr<slang::IBlob> diagnosticsBlob;
123-
// slang::IModule* module = slangSession->loadModule(shaderModuleName,
124-
// diagnosticsBlob.writeRef()); diagnoseIfNeeded(diagnosticsBlob); if (!module)
125-
// return SLANG_FAIL;
126-
//
127-
// ComPtr<slang::IEntryPoint> computeEntryPoint;
128-
// SLANG_RETURN_ON_FAIL(
129-
// module->findEntryPointByName(entryPointName, computeEntryPoint.writeRef()));
130-
//
131-
// Slang::List<slang::IComponentType*> componentTypes;
132-
// componentTypes.add(module);
133-
// componentTypes.add(computeEntryPoint);
134-
//
135-
// Slang::ComPtr<slang::IComponentType> composedProgram;
136-
// SlangResult result = slangSession->createCompositeComponentType(
137-
// componentTypes.getBuffer(),
138-
// componentTypes.getCount(),
139-
// composedProgram.writeRef(),
140-
// diagnosticsBlob.writeRef());
141-
// diagnoseIfNeeded(diagnosticsBlob);
142-
// SLANG_RETURN_ON_FAIL(result);
143-
//
144-
// ComPtr<slang::IComponentType> linkedProgram;
145-
// result = composedProgram->link(linkedProgram.writeRef(), diagnosticsBlob.writeRef());
146-
// diagnoseIfNeeded(diagnosticsBlob);
147-
// SLANG_RETURN_ON_FAIL(result);
148-
//
149-
// composedProgram = linkedProgram;
150-
// slangReflection = composedProgram->getLayout();
151-
//
152-
// rhi::ShaderProgramDesc programDesc = {};
153-
// programDesc.slangGlobalScope = composedProgram.get();
154-
// if (precompilationMode == PrecompilationMode::ExternalLink)
155-
// {
156-
// programDesc.downstreamLinkMode = rhi::IShaderProgram::DownstreamLinkMode::Deferred;
157-
// }
158-
// else
159-
// {
160-
// programDesc.downstreamLinkMode = gfx::IShaderProgram::DownstreamLinkMode::None;
161-
// }
162-
//
163-
// auto shaderProgram = device->createProgram(programDesc);
164-
//
165-
// outShaderProgram = shaderProgram;
166-
// return SLANG_OK;
167-
// }
168-
169136
Result loadComputeProgramFromSource(
170137
IDevice* device,
171138
ComPtr<IShaderProgram>& outShaderProgram,
@@ -303,6 +270,10 @@ Slang::ComPtr<IDevice> createTestingDevice(
303270
deviceDesc.slang.compilerOptionEntries = compilerOptions.data();
304271
deviceDesc.slang.compilerOptionEntryCount = compilerOptions.size();
305272

273+
if (context->enableDebugLayers) {
274+
deviceDesc.enableValidation = context->enableDebugLayers;
275+
deviceDesc.debugCallback = DebugPrinter::getInstance();
276+
}
306277

307278
D3D12DeviceExtendedDesc extDesc = {};
308279
if (deviceType == DeviceType::D3D12)

tools/gfx-unit-test/gfx-test-util.h

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "core/slang-basic.h"
44
#include "core/slang-blob.h"
5+
#include "core/slang-test-tool-util.h"
56
#include "core/slang-render-api-util.h"
67
#include "slang-rhi.h"
78
#include "span.h"
@@ -166,17 +167,43 @@ auto makeArray(Args... args)
166167
return std::array<T, sizeof...(Args)>{static_cast<T>(args)...};
167168
}
168169

170+
inline bool deviceTypeInEnabledApis(rhi::DeviceType deviceType, Slang::RenderApiFlags enabledApis)
171+
{
172+
switch (deviceType)
173+
{
174+
case rhi::DeviceType::Default:
175+
return true;
176+
case rhi::DeviceType::CPU:
177+
return enabledApis & Slang::RenderApiFlag::CPU;
178+
case rhi::DeviceType::CUDA:
179+
return enabledApis & Slang::RenderApiFlag::CUDA;
180+
case rhi::DeviceType::Metal:
181+
return enabledApis & Slang::RenderApiFlag::Metal;
182+
case rhi::DeviceType::WGPU:
183+
return enabledApis & Slang::RenderApiFlag::WebGPU;
184+
case rhi::DeviceType::Vulkan:
185+
return enabledApis & Slang::RenderApiFlag::Vulkan;
186+
case rhi::DeviceType::D3D11:
187+
return enabledApis & Slang::RenderApiFlag::D3D11;
188+
case rhi::DeviceType::D3D12:
189+
return enabledApis & Slang::RenderApiFlag::D3D12;
190+
}
191+
return true;
192+
}
193+
194+
169195
template<typename ImplFunc>
170196
void runTestImpl(
171197
const ImplFunc& f,
172198
UnitTestContext* context,
173199
rhi::DeviceType deviceType,
174200
Slang::List<const char*> searchPaths = {})
175201
{
176-
// if ((api & context->enabledApis) == 0)
177-
//{
178-
// SLANG_IGNORE_TEST
179-
// }
202+
if (!deviceTypeInEnabledApis(deviceType, context->enabledApis))
203+
{
204+
SLANG_IGNORE_TEST
205+
}
206+
180207
auto device = createTestingDevice(context, deviceType, searchPaths);
181208
if (!device)
182209
{

0 commit comments

Comments
 (0)