diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index 740318f1b..db18a727e 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -1076,6 +1076,9 @@ ShaderDebugTrace *Debugger::BeginDebug(DebugAPIWrapper *api, const ShaderStage s else if(v.storage == StorageClass::Uniform || v.storage == StorageClass::StorageBuffer || v.storage == StorageClass::PushConstant) { + if(!patchData.usedIds.contains(v.id)) + continue; + ShaderVariable var; var.name = GetRawName(v.id); @@ -1261,6 +1264,9 @@ ShaderDebugTrace *Debugger::BeginDebug(DebugAPIWrapper *api, const ShaderStage s } else if(v.storage == StorageClass::UniformConstant) { + if(!patchData.usedIds.contains(v.id)) + continue; + // only images/samplers are allowed to be in UniformConstant ShaderVariable var; var.rows = 1; diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index cdb64648e..c84fdd733 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -1146,6 +1146,15 @@ void Reflector::MakeReflection(const GraphicsAPI sourceAPI, const ShaderStage st usedIds.clear(); usedIds.insert(entry->usedIds.begin(), entry->usedIds.end()); } + else + { + // before that, still consider all entry interface used just not exclusively + usedIds.insert(entry->usedIds.begin(), entry->usedIds.end()); + } + + patchData.usedIds.reserve(usedIds.size()); + for(Id id : usedIds) + patchData.usedIds.push_back(id); // arrays of elements, which can be appended to in any order and then sorted rdcarray inputs; diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.h b/renderdoc/driver/shaders/spirv/spirv_reflect.h index 7ca587580..b57b8e4aa 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.h +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.h @@ -68,6 +68,9 @@ struct SPIRVPatchData rdcarray rwInterface; rdcarray samplerInterface; + // set of used IDs + rdcarray usedIds; + // the spec IDs in order - these are the order of constants encountered while parsing, and are // used for byte offsets into the resulting data blob (each constant takes 64-bits). // The shader constants reported already have the write offset, but this allows looking up the