[Piglit] [PATCH] glsl-1.10: check that mul source is used before dest is written

Ilia Mirkin imirkin at alum.mit.edu
Sun Nov 16 14:21:52 PST 2014


r600 (currently) has a bug on cayman because each component is
multiplied separately when constants are used, but the destination gets
modified before all of the source is read out. This test reproduces that
scenario where it will read the first .x correctly, but for the y
component, it will read the "new" x.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---

Somebody should double-check whether this actually happens on cayman
with this test. The TGSI generated appears to have the "required"
issue, but there could be other factors that affect whether it
happens.

 ...p-assign-mult-ivec2-ivec2-overwrite.shader_test | 27 ++++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 tests/spec/glsl-1.10/execution/vs-op-assign-mult-ivec2-ivec2-overwrite.shader_test

diff --git a/tests/spec/glsl-1.10/execution/vs-op-assign-mult-ivec2-ivec2-overwrite.shader_test b/tests/spec/glsl-1.10/execution/vs-op-assign-mult-ivec2-ivec2-overwrite.shader_test
new file mode 100644
index 0000000..661e261
--- /dev/null
+++ b/tests/spec/glsl-1.10/execution/vs-op-assign-mult-ivec2-ivec2-overwrite.shader_test
@@ -0,0 +1,27 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+void main()
+{
+        gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+uniform ivec2 arg0;
+uniform ivec2 arg1;
+uniform ivec2 expected;
+
+void main()
+{
+  ivec2 result = arg0 * arg1;
+  result = result.xx * ivec2(2, 3);
+  gl_FragColor = result == expected ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[test]
+uniform ivec2 arg0 38 35
+uniform ivec2 arg1 1 1
+uniform ivec2 expected 76 114
+draw rect -1 -1 2 2
+probe rgba 0 0 0.0 1.0 0.0 1.0
-- 
2.0.4



More information about the Piglit mailing list