From 7f1e0040e5dc14c9d31b950516bbc57557cdb84c Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 11 May 2026 13:35:42 +0100 Subject: [PATCH] Disallow shader debugging when unbounded cbuffers are used on SPIR-V --- .../shaders/spirv/spirv_debug_setup.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index 5ca35439f..c74ab3a86 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -962,6 +962,33 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const debugStatus += StringFormat::Fmt("Unsupported extended instruction set: '%s'\n", setname.c_str()); } + // we don't currently support debugging unbounded arrays of cbuffers + for(const Variable &v : globals) + { + if(v.storage == StorageClass::Uniform) + { + const DataType &type = dataTypes[v.type]; + + // global variables should all be pointers into opaque storage + RDCASSERT(type.type == DataType::PointerType); + + const DataType *innertype = &dataTypes[type.InnerType()]; + + if(innertype->type == DataType::ArrayType) + { + if(innertype->length == Id()) + { + debuggable = false; + rdcstr name = strings[v.id]; + if(name.empty()) + name = GetRawName(v.id); + debugStatus += + StringFormat::Fmt("Unsupported unbounded uniform buffer array: '%s'\n", name.c_str()); + } + } + } + } + debugStatus.trim(); }