From 3aaa586c90a688e035e2941a2e0327bd96a681cb Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 3 Feb 2022 09:28:54 -0500 Subject: 'Explicit specialization' experiments with extensions (#2099) * #include an absolute path didn't work - because paths were taken to always be relative. * Explicit specialization with multiple parameters. * Fix tabs. * Small improvements in test comments. --- .../generic/explicit-specialization-2.slang | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/experiments/generic/explicit-specialization-2.slang (limited to 'tests/experiments/generic/explicit-specialization-2.slang') diff --git a/tests/experiments/generic/explicit-specialization-2.slang b/tests/experiments/generic/explicit-specialization-2.slang new file mode 100644 index 000000000..ea5c74813 --- /dev/null +++ b/tests/experiments/generic/explicit-specialization-2.slang @@ -0,0 +1,35 @@ +//DISABLE_TEST:SIMPLE:-target hlsl -entry computeMain -profile cs_6_2 + +/* +The following works, but *requires* the rotateLeft free function to work around the swizzle issue (seen in explicit-specialization.slang). +*/ + +RWStructuredBuffer outputBuffer; + +interface IRotatable +{ + This rotateLeft(); +}; + +extension int : IRotatable +{ + This rotateLeft() { const uint u = this; return This((u << 1) | (u >> 31)); } +}; + +extension uint : IRotatable +{ + This rotateLeft() { let u = this; return This((u << 1) | (u >> 31)); } +}; + +T rotateLeft(T a) { return a.rotateLeft(); } + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint tid = dispatchThreadID.x; + + let v = rotateLeft(tid) + rotateLeft((int)tid); + + outputBuffer[tid] = v; +} + -- cgit v1.2.3