summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-spirv.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-17 22:22:34 -0700
committerGitHub <noreply@github.com>2024-10-17 22:22:34 -0700
commit12e891ed9ac934adbcc4160da6a05938cc38b529 (patch)
treea519a57b0e7a53c17f47bf43989a51e88f911f66 /source/slang/slang-emit-spirv.cpp
parenta618b8c5e249b0f20e6c0c95f9da1b5cbfdbf08b (diff)
Cleanup definition of `printf`. (#5330)
* Cleanup definition of `printf`. * Fix. * Fix spirv generation. * Fix. * enhance test.
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
-rw-r--r--source/slang/slang-emit-spirv.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index 62819e6d5..321c547be 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -3426,6 +3426,27 @@ struct SPIRVEmitContext
emitInst(parent, inst, SpvOpControlBarrier, executionScope, memoryScope, memorySemantics);
}
break;
+ case kIROp_Printf:
+ {
+ List<IRInst*> operands;
+ operands.add(inst->getOperand(0));
+ if (inst->getOperandCount() == 2)
+ {
+ auto operand = inst->getOperand(1);
+ if (auto makeStruct = as<IRMakeStruct>(operand))
+ {
+ // Flatten the tuple resulting from the variadic pack.
+ for (UInt bb = 0; bb < makeStruct->getOperandCount(); ++bb)
+ {
+ operands.add(makeStruct->getOperand(bb));
+ }
+ }
+ }
+ ensureExtensionDeclaration(toSlice("SPV_KHR_non_semantic_info"));
+ result = emitInst(parent, inst, SpvOpExtInst, inst->getFullType(), kResultID,
+ getNonSemanticDebugPrintfExtInst(), SpvLiteralInteger::from32(1), operands.getArrayView());
+ }
+ break;
}
if (result)
emitDecorations(inst, getID(result));