diff options
| author | Yong He <yonghe@outlook.com> | 2024-12-03 22:35:55 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-03 22:35:55 -0800 |
| commit | 5450a4907c93f493fa7a5849d5e98e1b07db1ee4 (patch) | |
| tree | 7d9d1cef610da337ee0b25b15dc5b0ba0999cffc | |
| parent | 0c7801b627ae09e6998bf1ce3f9bb5af1f17567c (diff) | |
Add emit logic for `requirePrelude` inst. (#5735)
| -rw-r--r-- | source/slang/slang-emit-c-like.cpp | 7 | ||||
| -rw-r--r-- | tests/interop/require-prelude.slang | 11 |
2 files changed, 18 insertions, 0 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index f10147f0d..0b21c4850 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -2948,6 +2948,13 @@ void CLikeSourceEmitter::defaultEmitInstExpr(IRInst* inst, const EmitOpInfo& inO m_writer->emit(")"); break; } + case kIROp_RequirePrelude: + { + auto preludeTextInst = as<IRStringLit>(inst->getOperand(0)); + if (preludeTextInst) + m_requiredPreludes.add(preludeTextInst); + break; + } case kIROp_RequireGLSLExtension: { break; // should already have set requirement; case covered for empty intrinsic block diff --git a/tests/interop/require-prelude.slang b/tests/interop/require-prelude.slang new file mode 100644 index 000000000..30a359e8a --- /dev/null +++ b/tests/interop/require-prelude.slang @@ -0,0 +1,11 @@ +//TEST:SIMPLE(filecheck=CHECK): -target glsl -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=CHECK): -target wgsl -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=CHECK): -target metal + +// CHECK: #[compute] + +[numthreads(1,1,1)] +void computeMain() +{ + __requirePrelude(R"(#[compute])"); +}
\ No newline at end of file |
