diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/metal/out-param.slang | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/metal/out-param.slang b/tests/metal/out-param.slang new file mode 100644 index 000000000..f9e89165a --- /dev/null +++ b/tests/metal/out-param.slang @@ -0,0 +1,44 @@ +//TEST:SIMPLE(filecheck=CHECK): -target metal +//TEST:SIMPLE(filecheck=METALLIB): -target metallib + +// Test that we can specailize mutable parameters based on the argument +// address space when generating code for Metal. + +//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer +RWStructuredBuffer<int> outputBuffer; + +// CHECK: void Test_out_param{{.*}}(int thread* value{{.*}}) +// CHECK: void Test_out_param{{.*}}(int device* value{{.*}}) +// CHECK: void Test_out_param{{.*}}(int threadgroup* value{{.*}}) + +// CHECK: void Test_out_param_wrapper{{.*}}(int thread* value{{.*}}) +// CHECK: void Test_out_param_wrapper{{.*}}(int device* value{{.*}}) +// CHECK: void Test_out_param_wrapper{{.*}}(int threadgroup* value{{.*}}) + +void Test_out_param(out int value) +{ + value = 1; +} + +void Test_out_param_wrapper(out int value) +{ + Test_out_param(value); +} + +[numthreads(1,1,1)] +void computeMain() +{ + // METALLIB: define void @computeMain + + int value = 0; + Test_out_param_wrapper(value); + outputBuffer[0] = value; + + Test_out_param_wrapper(outputBuffer[1]); + + static groupshared int sharedValue[2]; + Test_out_param_wrapper(sharedValue[0]); + outputBuffer[2] = sharedValue[0]; + + outputBuffer[0]++; +}
\ No newline at end of file |
