From 554e746cc851b3ee702a4dad0df81e71aa6c5b31 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Fri, 21 Feb 2025 15:45:20 +0000 Subject: [PATCH] Emit error message instead of crashing for missing SSA variables Make GetLiveVariable() behave similarly to GetPhiVariable() --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 32 +++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index 1ba521583..31655080e 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -5666,19 +5666,37 @@ bool ThreadState::GetShaderVariableHelper(const DXIL::Value *dxilValue, DXIL::Op bool ThreadState::IsVariableAssigned(const Id id) const { - RDCASSERT(id < m_Assigned.size()); - return m_Assigned[id]; + if(id < m_Assigned.size()) + { + return m_Assigned[id]; + } + else + { + RDCERR("Variable Id %d is not in assigned list", id); + return false; + } } bool ThreadState::GetLiveVariable(const Id &id, Operation op, DXOp dxOpCode, ShaderVariable &var) const { - RDCASSERT(id < m_Live.size()); - RDCASSERT(m_Live[id]); + if(id < m_Live.size()) + { + RDCASSERT(m_Live[id]); + } + else + { + RDCERR("Unknown Live Variable Id %d", id); + } RDCASSERT(IsVariableAssigned(id)); + auto it = m_Variables.find(id); - RDCASSERT(it != m_Variables.end()); - var = it->second; - return GetVariableHelper(op, dxOpCode, var); + if(it != m_Variables.end()) + { + var = it->second; + return GetVariableHelper(op, dxOpCode, var); + } + RDCERR("Unknown Variable %d", id); + return false; } bool ThreadState::GetPhiVariable(const Id &id, Operation op, DXOp dxOpCode, ShaderVariable &var) const