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
