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;