2.3 KiB
Debugging Dawn
Toggles
There are various debug-related Toggles that can help diagnose issues. Useful debug toggles:
dump_shaders
: Log input WGSL shaders and translated backend shaders (MSL/ HLSL/DXBC/DXIL / SPIR-V).disable_symbol_renaming
: As much as possible, disable renaming of symbols (variables, function names, etc.). This can make dumped shaders more readable.emit_hlsl_debug_symbols
: Sets the D3DCOMPILE_SKIP_OPTIMIZATION and D3DCOMPILE_DEBUG compilation flags when compiling HLSL code.use_user_defined_labels_in_backend
: Forward object labels to the backend so that they can be seen in native debugging tools like RenderDoc, PIX, or Mac Instruments.
Toggles may be enabled/disabled in different ways.
-
In code:
Use extension struct
DawnTogglesDescriptor
chained onDeviceDescriptor
.For example:
const char* const enabledToggles[] = {"dump_shaders", "disable_symbol_renaming"}; wgpu::DawnTogglesDescriptor deviceTogglesDesc; deviceTogglesDesc.enabledToggles = enabledToggles; deviceTogglesDesc.enabledTogglesCount = 2; wgpu::DeviceDescriptor deviceDescriptor; deviceDescriptor.nextInChain = &deviceTogglesDesc;
-
Command-line for Chrome
Run Chrome with command line flags
--enable-dawn-features
and/or--disable-dawn-features
to force enable/disable toggles. Toggles should be comma-delimited.For example:
--enable-dawn-features=dump_shaders,disable_symbol_renaming
-
Command-line for dawn_end2end_tests/dawn_unittests
Run Dawn test binaries with command line flags
--enable-toggles
and/or--disable-toggles
to force enable/disable toggles. Toggles should be comma-delimited.For example:
dawn_end2end_tests --enable-toggles=dump_shaders,disable_symbol_renaming
Environment Variables
-
DAWN_DEBUG_BREAK_ON_ERROR
Errors in WebGPU are reported asynchronously which may make debugging difficult because at the time an error is reported, you can't easily create a breakpoint to inspect the callstack in your application.
Setting
DAWN_DEBUG_BREAK_ON_ERROR
to a non-empty, non-zero value will execute a debug breakpoint instruction (dawn::Breakpoint()
) as soon as any type of error is generated.