diff options
Diffstat (limited to 'tests/compute')
| -rw-r--r-- | tests/compute/global-type-param.slang | 30 | ||||
| -rw-r--r-- | tests/compute/global-type-param.slang.expected.txt | 1 | ||||
| -rw-r--r-- | tests/compute/global-type-param1.slang | 46 | ||||
| -rw-r--r-- | tests/compute/global-type-param1.slang.expected.txt | 1 | ||||
| -rw-r--r-- | tests/compute/global-type-param2.slang | 61 | ||||
| -rw-r--r-- | tests/compute/global-type-param2.slang.expected.txt | 1 |
6 files changed, 140 insertions, 0 deletions
diff --git a/tests/compute/global-type-param.slang b/tests/compute/global-type-param.slang new file mode 100644 index 000000000..301ef1021 --- /dev/null +++ b/tests/compute/global-type-param.slang @@ -0,0 +1,30 @@ +//TEST(smoke,compute):COMPARE_COMPUTE:-xslang -use-ir +//TEST_INPUT:ubuffer(data=[0], stride=4):dxbinding(0),glbinding(0),out +//TEST_INPUT:type Impl + +RWStructuredBuffer<float> outputBuffer; + +interface IBase +{ + float compute(); +} + +struct Impl : IBase +{ + float compute() + { + return 1.0; + } +}; + +__generic_param TImpl : IBase; + +TImpl impl; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint tid = dispatchThreadID.x; + float outVal = impl.compute(); + outputBuffer[tid] = outVal; +}
\ No newline at end of file diff --git a/tests/compute/global-type-param.slang.expected.txt b/tests/compute/global-type-param.slang.expected.txt new file mode 100644 index 000000000..47b9ba0c8 --- /dev/null +++ b/tests/compute/global-type-param.slang.expected.txt @@ -0,0 +1 @@ +3F800000
\ No newline at end of file diff --git a/tests/compute/global-type-param1.slang b/tests/compute/global-type-param1.slang new file mode 100644 index 000000000..c9b754aa3 --- /dev/null +++ b/tests/compute/global-type-param1.slang @@ -0,0 +1,46 @@ +//TEST(smoke,compute):COMPARE_COMPUTE:-xslang -use-ir +//TEST_INPUT: cbuffer(data=[0.5 0 0 0 1.0], stride=4):dxbinding(0),glbinding(0) +//TEST_INPUT: cbuffer(data=[1.0], stride=4):dxbinding(1),glbinding(1) +//TEST_INPUT: Texture2D(size=4, content = zero) : dxbinding(0),glbinding(0) +//TEST_INPUT: Texture2D(size=4, content = one) : dxbinding(1),glbinding(1) +//TEST_INPUT: Sampler : dxbinding(0),glbinding(0,1,2,3,4,5,6) +//TEST_INPUT: Sampler : dxbinding(1),glbinding(0,1,2,3,4,5,6) +//TEST_INPUT: ubuffer(data=[0], stride=4):dxbinding(0),glbinding(0),out +//TEST_INPUT: type Impl + +RWStructuredBuffer<float> outputBuffer; + +interface IBase +{ + float compute(); +} + +struct Impl : IBase +{ + float base; // = 1.0 + Texture2D tex; + SamplerState sampler; + float compute() + { + return tex.SampleLevel(sampler, float2(0.0), 0.0).x + base; + } +}; + +__generic_param TImpl : IBase; + +TImpl impl; + +float base0; // = 0.5 + +Texture2D tex1; // = 0.0 +SamplerState sampler; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint tid = dispatchThreadID.x; + float b0 = tex1.SampleLevel(sampler, float2(0.0), 0.0).x + base0; // = 0.5 + float outVal = impl.compute(); // = 2.0 + outVal = b0 / outVal; // = 0.25 + outputBuffer[tid] = outVal; +}
\ No newline at end of file diff --git a/tests/compute/global-type-param1.slang.expected.txt b/tests/compute/global-type-param1.slang.expected.txt new file mode 100644 index 000000000..4846e7be2 --- /dev/null +++ b/tests/compute/global-type-param1.slang.expected.txt @@ -0,0 +1 @@ +3E800000 diff --git a/tests/compute/global-type-param2.slang b/tests/compute/global-type-param2.slang new file mode 100644 index 000000000..b54f4c430 --- /dev/null +++ b/tests/compute/global-type-param2.slang @@ -0,0 +1,61 @@ +//TEST(smoke,compute):COMPARE_COMPUTE:-xslang -use-ir +//TEST_INPUT: cbuffer(data=[0.5 0 0 0], stride=4):dxbinding(0),glbinding(0) +//TEST_INPUT: cbuffer(data=[1.0], stride=4):dxbinding(1),glbinding(1) +//TEST_INPUT: Texture2D(size=4, content = zero) : dxbinding(0),glbinding(0) +//TEST_INPUT: Texture2D(size=4, content = one) : dxbinding(1),glbinding(1) +//TEST_INPUT: Sampler : dxbinding(0),glbinding(0,1,2,3,4,5,6) +//TEST_INPUT: Sampler : dxbinding(1),glbinding(0,1,2,3,4,5,6) +//TEST_INPUT: ubuffer(data=[0], stride=4):dxbinding(0),glbinding(0),out +//TEST_INPUT: type Impl + + +/* Testing this scenario: +The ProgramLayout before specializeIRForEntryPoint() has no global cbuffer +allocated because the program before specialization does not define any +global uniform variables. + +However, after specialization, we find ourselves needing a global constant +buffer. The compiler should allocate the next available constant buffer slot +(here c1 because c0 is already used by the explicit cbuffer decl `existingBuffer`) +for the newly generated global constant buffer. +*/ + +RWStructuredBuffer<float> outputBuffer; + +interface IBase +{ + float compute(); +} + +struct Impl : IBase +{ + float base; // = 1.0 + Texture2D tex; + SamplerState sampler; + float compute() + { + return tex.SampleLevel(sampler, float2(0.0), 0.0).x + base; + } +}; + +__generic_param TImpl : IBase; + +TImpl impl; + +// at binding c0: +cbuffer existingBuffer +{ + float base0; // = 0.5 +} +Texture2D tex1; // = 0.0 +SamplerState sampler; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint tid = dispatchThreadID.x; + float b0 = tex1.SampleLevel(sampler, float2(0.0), 0.0).x + base0; // = 0.5 + float outVal = impl.compute(); // = 2.0 + outVal = b0 / outVal; // = 0.25 + outputBuffer[tid] = outVal; +}
\ No newline at end of file diff --git a/tests/compute/global-type-param2.slang.expected.txt b/tests/compute/global-type-param2.slang.expected.txt new file mode 100644 index 000000000..4846e7be2 --- /dev/null +++ b/tests/compute/global-type-param2.slang.expected.txt @@ -0,0 +1 @@ +3E800000 |
