diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bugs/mutating/mutating-generic-method.slang | 50 | ||||
| -rw-r--r-- | tests/bugs/mutating/mutating-generic-method.slang.expected.txt | 4 |
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/bugs/mutating/mutating-generic-method.slang b/tests/bugs/mutating/mutating-generic-method.slang new file mode 100644 index 000000000..18f4d315b --- /dev/null +++ b/tests/bugs/mutating/mutating-generic-method.slang @@ -0,0 +1,50 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute +//TEST(compute,vulkan):COMPARE_COMPUTE_EX:-vk -slang -compute + +// Confirm that a generic method marked `[mutating]` +// produces an `inout` parameter for `this`. + +interface IGenerator +{ + [mutating] int generate(); +} + +struct SimpleGenerator : IGenerator +{ + int state = 0; + + [mutating] int generate() { return state++; } +} + + +struct Reducer +{ + int state = 0; + [mutating] void update<S : IGenerator>(inout S g) + { + state = (state << 8) | state; + state = state + g.generate(); + } +} + +int test(int val) +{ + SimpleGenerator g = { 0 }; + Reducer r = { val+1 }; + + r.update(g); + r.update(g); + + return r.state; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out +RWStructuredBuffer<int> outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + int val = test(tid); + outputBuffer[tid] = val; +}
\ No newline at end of file diff --git a/tests/bugs/mutating/mutating-generic-method.slang.expected.txt b/tests/bugs/mutating/mutating-generic-method.slang.expected.txt new file mode 100644 index 000000000..5ac358274 --- /dev/null +++ b/tests/bugs/mutating/mutating-generic-method.slang.expected.txt @@ -0,0 +1,4 @@ +10102 +20203 +30304 +40405 |
