diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-07 13:19:44 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-07 13:19:44 -0800 |
| commit | 240727db40552180446c1f14acc371f690db10e4 (patch) | |
| tree | 45853db6e7405d37ab0ceafb8c1d5afb029de511 /tests/language-feature | |
| parent | af108c72894fdfb18438bd1c0cfb452b625cb6a6 (diff) | |
Uniformity analysis. (#3704)
* Uniformity analysis.
* Add [NonUniformReturn] decorations to some hlsl intrinsic functions.
Diffstat (limited to 'tests/language-feature')
| -rw-r--r-- | tests/language-feature/dynamic-uniform/dynamic-uniform-1.slang | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/language-feature/dynamic-uniform/dynamic-uniform-1.slang b/tests/language-feature/dynamic-uniform/dynamic-uniform-1.slang new file mode 100644 index 000000000..61583a84d --- /dev/null +++ b/tests/language-feature/dynamic-uniform/dynamic-uniform-1.slang @@ -0,0 +1,73 @@ + + +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target hlsl -entry main -profile cs_6_0 -validate-uniformity + +RWStructuredBuffer<int> output; +void expectUniform(dynamic_uniform int v) +{ + output[0] = v; +} + +[NonUniformReturn] +int produceNonUniform() { return 0; } + +struct B +{ + int a; + int c; + dynamic_uniform int d; +} + +int getBa(B obj) +{ + return obj.a; +} + +int getBaFromInout(inout B obj) +{ + return obj.a; +} + +int getBdFromInout(inout B obj) +{ + return obj.d; +} + +ConstantBuffer<B> ub; +void main(int tid: SV_DispatchThreadID) +{ + int d = ub.a + ub.c; + int f = ub.a + tid; + int ff = ub.a + produceNonUniform(); + + // CHECK-DAG: ([[# @LINE+1]]): warning 41201 + expectUniform(f); + // CHECK-DAG: ([[# @LINE+1]]): warning 41201 + expectUniform(ff); + + B obj = ub; + // CHECK-DAG: ([[# @LINE+1]]): warning 41201 + expectUniform(getBaFromInout(obj)); + obj.a = ff; + // CHECK-DAG: ([[# @LINE+1]]): warning 41201 + expectUniform(getBa(obj)); + + // CHECK-DAG: ([[# @LINE+1]]): warning 41201 + obj.d = ff; + + // CHECK-NOT: ([[# @LINE+1]]): warning 41201 + expectUniform(getBdFromInout(obj)); + + // CHECK-NOT: ([[# @LINE+1]]): warning 41201 + obj.d = d; // OK + + // CHECK-NOT: ([[# @LINE+1]]): warning 41201 + expectUniform(d); + + // CHECK-NOT: ([[# @LINE+1]]): warning 41201 + expectUniform(getBa(ub)); + + // CHECK-NOT: ([[# @LINE+1]]): warning 41201 + expectUniform(asDynamicUniform(ff)); + +} |
