diff options
Diffstat (limited to 'tests/compute/implicit-generic-app.slang')
| -rw-r--r-- | tests/compute/implicit-generic-app.slang | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/compute/implicit-generic-app.slang b/tests/compute/implicit-generic-app.slang new file mode 100644 index 000000000..d917a5f9a --- /dev/null +++ b/tests/compute/implicit-generic-app.slang @@ -0,0 +1,40 @@ +//TEST(compute):COMPARE_COMPUTE:-xslang -use-ir + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):dxbinding(0),glbinding(0),out + +// Testing that we can implicitly specialize a generic +// that has a constrained type parameter. + + +interface ISimple +{ + int getVal(); +} + +struct Simple : ISimple +{ + int val; + + int getVal() { return val; } +}; + +int doIt<T : ISimple>(T obj) +{ + return obj.getVal(); +} + +int test(int val) +{ + Simple simple; + simple.val = val; + return doIt(simple); +} + +RWStructuredBuffer<int> outputBuffer : register(u0); +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = (int) dispatchThreadID.x; + int outVal = test(tid); + outputBuffer[tid] = outVal; +}
\ No newline at end of file |
