NVIDIA hardware has "short" immediates, and some instructions have both
long and short immediate variants. Nouveau was picking the wrong one
under certain conditions. This adds tests which are likely to cause
these kinds of issues to surface in a backend.

Since this tests for very precise bit patterns, restrict to GLSL 1.30,
which introduced bit operations for integers.

Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
Reviewed-by: Eric Anholt <e...@anholt.net>
---

v1 -> v2: move from GLSL 1.10 to GLSL 1.30

 .../immediates/fs-op-add-int-immed-1.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-add-int-immed-2.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-add-int-immed-3.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-add-int-immed-4.shader_test   | 24 ++++++++++++++++++++++
 .../fs-op-bitand-int-immed-1.shader_test           | 21 +++++++++++++++++++
 .../fs-op-bitand-int-immed-2.shader_test           | 21 +++++++++++++++++++
 .../fs-op-bitand-int-immed-3.shader_test           | 21 +++++++++++++++++++
 .../fs-op-bitand-int-immed-4.shader_test           | 21 +++++++++++++++++++
 .../immediates/fs-op-mul-int-immed-1.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-mul-int-immed-2.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-mul-int-immed-3.shader_test   | 24 ++++++++++++++++++++++
 .../immediates/fs-op-mul-int-immed-4.shader_test   | 24 ++++++++++++++++++++++
 12 files changed, 276 insertions(+)
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test
 create mode 100644 
tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test

diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test
new file mode 100644
index 000000000..d4421e613
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-1.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 + 0x80000);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 0
+uniform int expected 0x80000
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test
new file mode 100644
index 000000000..f20b3383f
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-2.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 + 0x7ffff);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 0
+uniform int expected 0x7ffff
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test
new file mode 100644
index 000000000..45570ba03
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-3.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 - 0x80000);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 0
+uniform int expected -0x80000
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test
new file mode 100644
index 000000000..f14187948
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-add-int-immed-4.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 - 0x80001);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 0
+uniform int expected -0x80001
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test
 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test
new file mode 100644
index 000000000..0f3ced422
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-1.shader_test
@@ -0,0 +1,21 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform uint arg0 = 0xffffffffu;
+uniform uint expected = 0x80000u;
+
+void main()
+{
+  uint result = (arg0 & 0x80000u);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test
 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test
new file mode 100644
index 000000000..1a2041237
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-2.shader_test
@@ -0,0 +1,21 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform uint arg0 = 0xffffffffu;
+uniform uint expected = 0x7ffffu;
+
+void main()
+{
+  uint result = (arg0 & 0x7ffffu);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test
 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test
new file mode 100644
index 000000000..883505347
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-3.shader_test
@@ -0,0 +1,21 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform uint arg0 = 0xffffffffu;
+uniform uint expected = -0x80000u;
+
+void main()
+{
+  uint result = (arg0 & -0x80000u);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test
 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test
new file mode 100644
index 000000000..2805991cb
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-bitand-int-immed-4.shader_test
@@ -0,0 +1,21 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform uint arg0 = 0xffffffffu;
+uniform uint expected = -0x80001u;
+
+void main()
+{
+  uint result = (arg0 & -0x80001u);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test
new file mode 100644
index 000000000..28ef7d1e9
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-1.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 * 0x80001);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 1
+uniform int expected 0x80001
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test
new file mode 100644
index 000000000..5cf5e01b3
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-2.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 * 0x7ffff);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 1
+uniform int expected 0x7ffff
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test
new file mode 100644
index 000000000..3bc00107e
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-3.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 * -0x80000);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 1
+uniform int expected -0x80000
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
diff --git 
a/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test
new file mode 100644
index 000000000..6a6b937d0
--- /dev/null
+++ 
b/tests/spec/glsl-1.30/execution/immediates/fs-op-mul-int-immed-4.shader_test
@@ -0,0 +1,24 @@
+[require]
+GLSL >= 1.30
+
+[vertex shader passthrough]
+
+[fragment shader]
+uniform int arg0;
+uniform int expected;
+
+void main()
+{
+  int result = (arg0 * -0x80001);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 
0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 1.0 0.0
+clear
+
+uniform int arg0 1
+uniform int expected -0x80001
+
+draw rect -1 -1 2 2
+probe all rgba 0 1 0 1
-- 
2.16.1

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to