diff options
| author | Yong He <yonghe@outlook.com> | 2024-10-20 09:28:13 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-20 09:28:13 -0700 |
| commit | 307315a7305e76529837fd1cdb677f534d5f539b (patch) | |
| tree | ba39e96ba2e9b3d62d1213aab2f1cc54febe451a /tests | |
| parent | 9936178dd3efb026bfa142512a2bf061d7a75ab5 (diff) | |
Properly check switch case. (#5341)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bugs/gh-5321.slang | 17 | ||||
| -rw-r--r-- | tests/diagnostics/constexpr-error.slang | 5 | ||||
| -rw-r--r-- | tests/diagnostics/constexpr-error.slang.expected | 20 | ||||
| -rw-r--r-- | tests/language-feature/enums/enum-cast.slang | 22 | ||||
| -rw-r--r-- | tests/language-feature/enums/enum-switch-2.slang | 30 | ||||
| -rw-r--r-- | tests/language-feature/enums/enum-switch.slang | 31 | ||||
| -rw-r--r-- | tests/language-feature/single-arg-ctor-call.slang | 19 |
7 files changed, 123 insertions, 21 deletions
diff --git a/tests/bugs/gh-5321.slang b/tests/bugs/gh-5321.slang new file mode 100644 index 000000000..6bb1de1a7 --- /dev/null +++ b/tests/bugs/gh-5321.slang @@ -0,0 +1,17 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK: error {{.*}} compile-time constant + +uniform uint FillType_Solid = 0u; + +[shader("compute")] +float cs(uniform uint x) + : SV_Target +{ + switch (x) + { + case FillType_Solid: + return 0.0; + } + return 0.0; +}
\ No newline at end of file diff --git a/tests/diagnostics/constexpr-error.slang b/tests/diagnostics/constexpr-error.slang index a5b98264b..0a4744b71 100644 --- a/tests/diagnostics/constexpr-error.slang +++ b/tests/diagnostics/constexpr-error.slang @@ -1,4 +1,4 @@ -//DIAGNOSTIC_TEST:SIMPLE: +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): // Failure to pass compile-time-constant data // where it is expected. @@ -24,6 +24,7 @@ float4 main() : SV_Target result += t.Sample(s, uv, int2(0,0)); // Error: data passed through cbuffer isn't compile-time constant + // CHECK: ([[# @LINE+1]]): error 40006: result += t.Sample(s, uv, offset); // Error: data computed via conditional isn't compile-time cosntant @@ -32,10 +33,12 @@ float4 main() : SV_Target { ii = 1; } + // CHECK: ([[# @LINE+1]]): error 40006: result += t.Sample(s, uv, int2(ii)); // Error: data computed in loop isn't compile-time constant // (and loop isn't unroll-able) + // CHECK: ([[# @LINE+1]]): error 40006: for(uint jj = 0; jj < uv.y; jj++) { result += t.Sample(s, uv, int2(jj)); diff --git a/tests/diagnostics/constexpr-error.slang.expected b/tests/diagnostics/constexpr-error.slang.expected deleted file mode 100644 index 6f124fe34..000000000 --- a/tests/diagnostics/constexpr-error.slang.expected +++ /dev/null @@ -1,20 +0,0 @@ -result code = -1 -standard error = { -tests/diagnostics/constexpr-error.slang(27): error 40006: expected a compile-time constant - result += t.Sample(s, uv, offset); - ^~~~~~ -tests/diagnostics/constexpr-error.slang(35): error 40006: expected a compile-time constant - result += t.Sample(s, uv, int2(ii)); - ^ -tests/diagnostics/constexpr-error.slang(39): error 40006: expected a compile-time constant - for(uint jj = 0; jj < uv.y; jj++) - ^~ -tests/diagnostics/constexpr-error.slang(41): error 40006: expected a compile-time constant - result += t.Sample(s, uv, int2(jj)); - ^ -tests/diagnostics/constexpr-error.slang(39): error 40006: expected a compile-time constant - for(uint jj = 0; jj < uv.y; jj++) - ^~ -} -standard output = { -} diff --git a/tests/language-feature/enums/enum-cast.slang b/tests/language-feature/enums/enum-cast.slang new file mode 100644 index 000000000..fe82c5a5c --- /dev/null +++ b/tests/language-feature/enums/enum-cast.slang @@ -0,0 +1,22 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj + +enum MyFlags +{ + A,B,C +} + +bool test(MyFlags f1) +{ + return f1 == MyFlags(uint(1)); +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + int outVal = test(MyFlags.B) ? 1 : 0; + // CHECK: 1 + outputBuffer[0] = outVal; +} diff --git a/tests/language-feature/enums/enum-switch-2.slang b/tests/language-feature/enums/enum-switch-2.slang new file mode 100644 index 000000000..f5266f35d --- /dev/null +++ b/tests/language-feature/enums/enum-switch-2.slang @@ -0,0 +1,30 @@ +//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-slang -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type + +enum class E : uint32_t +{ + A, + B, + C +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<uint> outputBuffer; + +[NumThreads(1,1,1)] +void computeMain(int i : SV_DispatchThreadID) +{ + switch (i) + { + case int(E::A): + outputBuffer[0] = 1; + break; + case int(E::B): + outputBuffer[0] = 2; + break; + case int(E::C): + outputBuffer[0] = 3; + break; + } + // CHECK: 1 +} diff --git a/tests/language-feature/enums/enum-switch.slang b/tests/language-feature/enums/enum-switch.slang new file mode 100644 index 000000000..600c2e31e --- /dev/null +++ b/tests/language-feature/enums/enum-switch.slang @@ -0,0 +1,31 @@ +//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-slang -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type + +enum class E : uint32_t +{ + A, + B, + C +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<uint> outputBuffer; + +[NumThreads(1,1,1)] +void computeMain(int i : SV_DispatchThreadID) +{ + E e = E(i); + switch (e) + { + case E::A: + outputBuffer[0] = 1; + break; + case E::B: + outputBuffer[0] = 2; + break; + case E::C: + outputBuffer[0] = 3; + break; + } + // CHECK: 1 +}
\ No newline at end of file diff --git a/tests/language-feature/single-arg-ctor-call.slang b/tests/language-feature/single-arg-ctor-call.slang new file mode 100644 index 000000000..a4c55c2ed --- /dev/null +++ b/tests/language-feature/single-arg-ctor-call.slang @@ -0,0 +1,19 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj + +struct SSS +{ + float3 v; + __init(float3 a) { v= a; } +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + SSS s = SSS(0); + // CHECK: 1 + outputBuffer[0] = int(s.v.x + 1); +} |
