From 240727db40552180446c1f14acc371f690db10e4 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 7 Mar 2024 13:19:44 -0800 Subject: Uniformity analysis. (#3704) * Uniformity analysis. * Add [NonUniformReturn] decorations to some hlsl intrinsic functions. --- .../dynamic-uniform/dynamic-uniform-1.slang | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 tests/language-feature/dynamic-uniform/dynamic-uniform-1.slang (limited to 'tests') 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 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 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)); + +} -- cgit v1.2.3