summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-emit-c-like.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp
index c122c13f2..34467d25d 100644
--- a/source/slang/slang-emit-c-like.cpp
+++ b/source/slang/slang-emit-c-like.cpp
@@ -3771,6 +3771,18 @@ void CLikeSourceEmitter::computeEmitActions(IRModule* module, List<EmitAction>&
for(auto inst : module->getGlobalInsts())
{
+ // Emit all resource-typed objects first. This is to avoid an odd scenario in HLSL
+ // where not using a resource type in a resource definition before the same type
+ // is used for a function parameter causes HLSL to complain about an 'incomplete type'
+ //
+ if ( isResourceType(inst->getDataType()) )
+ {
+ ensureGlobalInst(&ctx, inst, EmitAction::Level::Definition);
+ }
+ }
+
+ for(auto inst : module->getGlobalInsts())
+ {
if( as<IRType>(inst) )
{
// Don't emit a type unless it is actually used or is marked public.
@@ -3778,6 +3790,10 @@ void CLikeSourceEmitter::computeEmitActions(IRModule* module, List<EmitAction>&
continue;
}
+ // Skip resource types in this pass.
+ if ( isResourceType(inst->getDataType()) )
+ continue;
+
ensureGlobalInst(&ctx, inst, EmitAction::Level::Definition);
}
}