summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Arceri <tarceri@itsqueeze.com>2024-10-17 16:20:30 +1100
committerMarge Bot <emma+marge@anholt.net>2024-10-24 00:05:54 +0000
commita068c5e129b07bd31d9a98721c3c7ab0611b6868 (patch)
treeff9fed7443eff1dbd0c0b9f760dd63b322e21bc8
parentaa3b666a2fb58bf646f304ed4390139590126724 (diff)
glsl-1.20: loop unroll tests for uint induction var
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/piglit/-/merge_requests/963>
-rw-r--r--tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-1.shader_test66
-rw-r--r--tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-2.shader_test66
-rw-r--r--tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-3.shader_test64
-rw-r--r--tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-4.shader_test64
4 files changed, 260 insertions, 0 deletions
diff --git a/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-1.shader_test b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-1.shader_test
new file mode 100644
index 000000000..6c534cf8b
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-1.shader_test
@@ -0,0 +1,66 @@
+# This tests that we do not unroll a loop in error thinking we know the max
+# trip count due to the induction variable being uint. i.e The max trip count
+# here is 4294967295 with this test we are making sure the compiler doesn't
+# mistakenly think the trip count is 4.
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 130
+
+uniform uint induction_init;
+
+void main()
+{
+ gl_Position = gl_Vertex;
+
+ vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
+ vec4 colour2 = vec4(0.0, 0.0, 0.0, 1.0);
+
+ uint j = 0u;
+ uint i = induction_init;
+ while (true) {
+
+ if (j > 4u) {
+ colour = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+
+ if (i >= 4u) {
+
+ } else {
+ break;
+ }
+
+ colour = vec4(0.0, 1.0, 0.0, 1.0);
+
+ i++;
+ j++;
+ }
+
+ gl_FrontColor = colour + colour2;
+}
+
+[fragment shader]
+void main()
+{
+ gl_FragColor = gl_Color;
+}
+
+[test]
+clear color 0.5 0.5 0.5 0.5
+
+# unit_max 4294967295
+
+# induction_init equivalent to starting at int -5
+uniform uint induction_init 4294967291
+draw rect -1 -1 2 2
+probe all rgba 1.0 0.0 0.0 1.0
+
+# induction_init equivalent to starting at int -3
+uniform uint induction_init 4294967293
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+uniform uint induction_init 0
+draw rect -1 -1 2 2
+probe all rgba 1.0 1.0 1.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-2.shader_test b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-2.shader_test
new file mode 100644
index 000000000..b9268fd3d
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-2.shader_test
@@ -0,0 +1,66 @@
+# This tests that we do not unroll a loop in error thinking we know the max
+# trip count due to the induction variable being uint. i.e The max trip count
+# here is 4294967295 with this test we are making sure the compiler doesn't
+# mistakenly think the trip count is 4.
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 130
+
+uniform uint induction_init;
+
+void main()
+{
+ gl_Position = gl_Vertex;
+
+ vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
+ vec4 colour2 = vec4(0.0, 0.0, 0.0, 1.0);
+
+ uint j = 0u;
+ uint i = induction_init;
+ while (true) {
+
+ if (j > 4u) {
+ colour = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+
+ if (3u < i) {
+
+ } else {
+ break;
+ }
+
+ colour = vec4(0.0, 1.0, 0.0, 1.0);
+
+ i++;
+ j++;
+ }
+
+ gl_FrontColor = colour + colour2;
+}
+
+[fragment shader]
+void main()
+{
+ gl_FragColor = gl_Color;
+}
+
+[test]
+clear color 0.5 0.5 0.5 0.5
+
+# unit_max 4294967295
+
+# induction_init equivalent to starting at int -5
+uniform uint induction_init 4294967291
+draw rect -1 -1 2 2
+probe all rgba 1.0 0.0 0.0 1.0
+
+# induction_init equivalent to starting at int -3
+uniform uint induction_init 4294967293
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+uniform uint induction_init 0
+draw rect -1 -1 2 2
+probe all rgba 1.0 1.0 1.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-3.shader_test b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-3.shader_test
new file mode 100644
index 000000000..b4bc9be97
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-3.shader_test
@@ -0,0 +1,64 @@
+# This tests that we do not unroll a loop in error thinking we know the max
+# trip count due to the induction variable being uint. i.e The max trip count
+# here is 4294967295 with this test we are making sure the compiler doesn't
+# mistakenly think the trip count is 4.
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 130
+
+uniform uint induction_init;
+
+void main()
+{
+ gl_Position = gl_Vertex;
+
+ vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
+ vec4 colour2 = vec4(0.0, 0.0, 0.0, 1.0);
+
+ uint j = 0u;
+ uint i = induction_init;
+ while (true) {
+
+ if (j > 4u) {
+ colour = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+
+ if (!(i >= 4u)) {
+ break;
+ }
+
+ colour = vec4(0.0, 1.0, 0.0, 1.0);
+
+ i++;
+ j++;
+ }
+
+ gl_FrontColor = colour + colour2;
+}
+
+[fragment shader]
+void main()
+{
+ gl_FragColor = gl_Color;
+}
+
+[test]
+clear color 0.5 0.5 0.5 0.5
+
+# unit_max 4294967295
+
+# induction_init equivalent to starting at int -5
+uniform uint induction_init 4294967291
+draw rect -1 -1 2 2
+probe all rgba 1.0 0.0 0.0 1.0
+
+# induction_init equivalent to starting at int -3
+uniform uint induction_init 4294967293
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+uniform uint induction_init 0
+draw rect -1 -1 2 2
+probe all rgba 1.0 1.0 1.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-4.shader_test b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-4.shader_test
new file mode 100644
index 000000000..566f75a17
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-loop-uint-induction-var-4.shader_test
@@ -0,0 +1,64 @@
+# This tests that we do not unroll a loop in error thinking we know the max
+# trip count due to the induction variable being uint. i.e The max trip count
+# here is 4294967295 with this test we are making sure the compiler doesn't
+# mistakenly think the trip count is 4.
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 130
+
+uniform uint induction_init;
+
+void main()
+{
+ gl_Position = gl_Vertex;
+
+ vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
+ vec4 colour2 = vec4(0.0, 0.0, 0.0, 1.0);
+
+ uint j = 0u;
+ uint i = induction_init;
+ while (true) {
+
+ if (j > 4u) {
+ colour = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+
+ if (!(3u < i)) {
+ break;
+ }
+
+ colour = vec4(0.0, 1.0, 0.0, 1.0);
+
+ i++;
+ j++;
+ }
+
+ gl_FrontColor = colour + colour2;
+}
+
+[fragment shader]
+void main()
+{
+ gl_FragColor = gl_Color;
+}
+
+[test]
+clear color 0.5 0.5 0.5 0.5
+
+# unit_max 4294967295
+
+# induction_init equivalent to starting at int -5
+uniform uint induction_init 4294967291
+draw rect -1 -1 2 2
+probe all rgba 1.0 0.0 0.0 1.0
+
+# induction_init equivalent to starting at int -3
+uniform uint induction_init 4294967293
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+uniform uint induction_init 0
+draw rect -1 -1 2 2
+probe all rgba 1.0 1.0 1.0 1.0