diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2017-11-07 16:47:36 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-07 16:47:36 -0800 |
| commit | a5dfa5cd2bfa11fb3d9e84877f8dead1815e9077 (patch) | |
| tree | fbc440ab3e7dc6843b3ef653a70e134b58758885 /source/slang/ir.cpp | |
| parent | 6e591ada0eb652c320bba4bd8a46cd579946df01 (diff) | |
IR: add support for `discard` statement (#261)
- Add definition of `discard` instruction
- A `discard` is a terminator instruction, just like `returnVoid`
- Lower `DiscardStmt` in AST to a `discard` instruction in the IR
- Emit `discard` instruction as a `discard;` statement when emitting HLSL/GLSL
- Add a test case using the "graphics compute" mode that tests discard. The test writes to one entry in a UAV before doing a conditional (always true at runtime) discard, and then writes to another entry; we expect to see the results of the first write, but not the second.
Diffstat (limited to 'source/slang/ir.cpp')
| -rw-r--r-- | source/slang/ir.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/slang/ir.cpp b/source/slang/ir.cpp index b1af6521c..8fbe20aa6 100644 --- a/source/slang/ir.cpp +++ b/source/slang/ir.cpp @@ -166,6 +166,7 @@ namespace Slang case kIROp_if: case kIROp_ifElse: case kIROp_loopTest: + case kIROp_discard: return true; } } @@ -1150,6 +1151,17 @@ namespace Slang return inst; } + IRInst* IRBuilder::emitDiscard() + { + auto inst = createInst<IRDiscard>( + this, + kIROp_discard, + nullptr); + addInst(inst); + return inst; + } + + IRInst* IRBuilder::emitBranch( IRBlock* pBlock) { |
