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 <[email protected]>
---

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

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to