summaryrefslogtreecommitdiffstats
path: root/tests/language-feature
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-07 13:19:44 -0800
committerGitHub <noreply@github.com>2024-03-07 13:19:44 -0800
commit240727db40552180446c1f14acc371f690db10e4 (patch)
tree45853db6e7405d37ab0ceafb8c1d5afb029de511 /tests/language-feature
parentaf108c72894fdfb18438bd1c0cfb452b625cb6a6 (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.slang73
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));
+
+}