From 13ccbe2b84a76d8d5febd021f7dabe46cbf04912 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 1 May 2024 16:43:14 +0100 Subject: [PATCH] RD DXIL Disassembly: decode "dx.op.textureStore" Example Output call void @dx.op.textureStore.f32(i32 67, %dx.types.Handle %OutLuma_UAV_2d, i32 %1, i32 %2, i32 undef, float %18, float %18, float %18, float %18, i8 15) Becomes OutLuma[_1, _2] = {_18, _18, _18, _18}; --- .../driver/shaders/dxil/dxil_disassemble.cpp | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 16ca96562..f4d47b70b 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -2978,6 +2978,50 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) showDxFuncName = true; } } + else if(showDxFuncName && funcCallName.beginsWith("dx.op.textureStore")) + { + // srv,coord0,coord1,coord2,value0,value1,value2,value3,mask + showDxFuncName = false; + uint32_t dxopCode; + RDCASSERT(getival(inst.args[0], dxopCode)); + RDCASSERTEQUAL(dxopCode, 67); + rdcstr handleStr = ArgToString(inst.args[1], false); + if(resHandles.count(handleStr) > 0) + { + lineStr += resHandles[handleStr].name; + lineStr += "["; + bool needComma = false; + for(uint32_t a = 2; a < 5; ++a) + { + if(!isUndef(inst.args[a])) + { + if(needComma) + lineStr += ", "; + lineStr += ArgToString(inst.args[a], false); + needComma = true; + } + } + lineStr += "]"; + lineStr += " = "; + lineStr += "{"; + needComma = false; + for(uint32_t a = 5; a < 9; ++a) + { + if(!isUndef(inst.args[a])) + { + if(needComma) + lineStr += ", "; + lineStr += ArgToString(inst.args[a], false); + needComma = true; + } + } + lineStr += "}"; + } + else + { + showDxFuncName = true; + } + } else if(funcCallName.beginsWith("llvm.dbg.")) { }