From 59fbd3d820be4440b1d75dcc15dc9ddc042a8630 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 17 Mar 2025 15:36:33 +0000 Subject: [PATCH] Reflect explicit wave size out of compute shaders if present in DXIL --- renderdoc/driver/shaders/dxbc/dxbc_common.h | 1 + renderdoc/driver/shaders/dxil/dxil_common.h | 1 + renderdoc/driver/shaders/dxil/dxil_reflect.cpp | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_common.h b/renderdoc/driver/shaders/dxbc/dxbc_common.h index 93a34c252..7ee4d615a 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_common.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_common.h @@ -495,6 +495,7 @@ struct Reflection rdcarray PatchConstantSig; uint32_t DispatchThreadsDimension[3]; + uint32_t WaveSize = 0; }; class DXBCContainer; diff --git a/renderdoc/driver/shaders/dxil/dxil_common.h b/renderdoc/driver/shaders/dxil/dxil_common.h index 630faf93b..7622edcee 100644 --- a/renderdoc/driver/shaders/dxil/dxil_common.h +++ b/renderdoc/driver/shaders/dxil/dxil_common.h @@ -158,6 +158,7 @@ enum class ShaderEntryTag Compute = 4, Mesh = 9, Amplification = 10, + WaveSize = 11, }; enum class ResField diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 02a25cbcd..d42d93420 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -735,6 +735,12 @@ void Program::FetchComputeProperties(DXBC::Reflection *reflection) reflection->DispatchThreadsDimension[2] = getival(threadDim.children[2]); return; } + else if(shaderTypeTag == ShaderEntryTag::WaveSize) + { + Metadata &sizeData = *tags.children[t + 1]; + RDCASSERTEQUAL(sizeData.children.size(), 1); + reflection->WaveSize = getival(sizeData.children[0]); + } } break;