From 0df08e20b48135920638d9b10952e9c47d7e0679 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 27 May 2024 16:20:12 +0100 Subject: [PATCH] Handle mesh payloads not coming from global variables --- .../driver/shaders/dxil/dxil_reflect.cpp | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 946487940..0b7ded759 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -626,14 +626,28 @@ void Program::FetchComputeProperties(DXBC::Reflection *reflection) RDCERR("Unexpected number of arguments to dispatchMesh"); continue; } - GlobalVar *payloadVariable = cast(inst.args[4]); - if(!payloadVariable) - { - RDCERR("Unexpected non-variable payload argument to dispatchMesh"); - continue; - } - Type *payloadType = (Type *)payloadVariable->type; + Type *payloadType = NULL; + + GlobalVar *payloadVariable = cast(inst.args[4]); + if(payloadVariable) + { + payloadType = (Type *)payloadVariable->type; + } + else + { + Instruction *payloadAlloc = cast(inst.args[4]); + + if(payloadAlloc->op == Operation::Alloca || payloadAlloc->op == Operation::GetElementPtr) + { + payloadType = (Type *)payloadAlloc->type; + } + else + { + RDCERR("Unexpected non-variable payload argument to dispatchMesh"); + continue; + } + } RDCASSERT(payloadType->type == Type::Pointer); payloadType = (Type *)payloadType->inner;