Handle mesh payloads not coming from global variables

This commit is contained in:
baldurk
2024-05-27 16:21:32 +01:00
parent 7362f51b58
commit 0df08e20b4
+21 -7
View File
@@ -626,14 +626,28 @@ void Program::FetchComputeProperties(DXBC::Reflection *reflection)
RDCERR("Unexpected number of arguments to dispatchMesh");
continue;
}
GlobalVar *payloadVariable = cast<GlobalVar>(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<GlobalVar>(inst.args[4]);
if(payloadVariable)
{
payloadType = (Type *)payloadVariable->type;
}
else
{
Instruction *payloadAlloc = cast<Instruction>(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;