diff options
Diffstat (limited to 'tests/spirv/while-continue.slang')
| -rw-r--r-- | tests/spirv/while-continue.slang | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/spirv/while-continue.slang b/tests/spirv/while-continue.slang new file mode 100644 index 000000000..9c7b89295 --- /dev/null +++ b/tests/spirv/while-continue.slang @@ -0,0 +1,45 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -stage compute -entry main -emit-spirv-directly + +// Test that we can transform a continue in a while loop to valid spirv. + +uniform int loopCount; + +// CHECK: OpEntryPoint + +bool condition1() +{ + AllMemoryBarrier(); + return output[2] < 1; +} +bool condition2() +{ + AllMemoryBarrier(); + return output[3] < 1; +} + +RWStructuredBuffer<float> output; + +[numthreads(1,1,1)] +void main() +{ + float weight = 0.0; + do + { + if (condition2()) + { + continue; + } + AllMemoryBarrier(); + } while (condition1()); + + while(condition1()) + { + if (condition2()) + { + continue; + } + AllMemoryBarrier(); + } + + output[0] = weight; +} |
