From 60d0c6b21c0cfbf957b2c77178364711c77c5aef Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 25 Feb 2025 18:40:53 +0000 Subject: [PATCH] Handle NULL resource for AtomicOp's Was already handled for UAV Load/Stores Increase assert value for components (maximum is 16 instead of 4) --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index 64e7a3592..952f0ddb5 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -3394,7 +3394,15 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, RDCERR("Unhandled dxOpCode %s", ToStr(dxOpCode).c_str()); } - TypedUAVStore(fmt, (byte *)data, res.value); + // NULL resource or out of bounds + if((!texData && elemIdx >= numElems) || (texData && dataOffset >= dataSize)) + { + RDCERR("Ignoring store to unbound resource %s", GetArgumentName(1).c_str()); + } + else + { + TypedUAVStore(fmt, (byte *)data, res.value); + } // result is the original value result.value = a.value; @@ -5733,7 +5741,7 @@ void ThreadState::SetResult(const Id &id, ShaderVariable &result, Operation op, ShaderEvents flags) { RDCASSERT((result.rows > 0 && result.columns > 0) || !result.members.empty()); - RDCASSERT(result.columns <= 4); + RDCASSERT(result.columns <= 16); RDCASSERTNOTEQUAL(result.type, VarType::Unknown); // Can only flush denorms for float types