Created attachment 40758 [details] new test case for piglit shader_runner This fails on Piketon (i965) with mesa master: mat2 a; a[0][0] = 0; a[int(a[0][0])][1] = 1; Changing a[int(a[0][0])] into a[int(0)] passes. The subscript is not necessarily for matrix. It also fails for array subscript if it's array of matrix.
Test case attachment id=40758 committed to piglit. commit 3e61a4df2e1ffc636b65ff491b6493b2427a3c2d Author: Gordon Jin <gordon.jin@intel.com> Date: Fri Dec 3 23:13:25 2010 -0800 glsl-complex-subscript: Add test case from FDO bug 32069.
The output of MESA_GLSL=dump tells the whole story. a[i].y is never assigned. I'm having a bit of trouble grokking the generated IR at all. ( (declare (out ) vec4 gl_FragColor@0x94f4c40) (function main (signature void (parameters ) ( (declare () mat2 a@0x943ce48) (assign (constant bool (1)) (x) (array_ref (var_ref a@0x943ce48) (constant int (0)) ) (constant float (0.000000)) ) (declare (temporary ) vec2 dereference_array_value@0x9793278) (assign (constant bool (1)) (x) (var_ref dereference_array_value@0x9793278) (constant float (1.000000)) ) (declare (temporary ) bvec2 dereference_array_condition@0x97a9420) (assign (constant bool (1)) (xy) (var_ref dereference_array_condition@0x97a9420) (expression bvec2 == (swiz xx (expression int f2i (swiz x (array_ref (var_ref a@0x943ce48) (constant int (0)) ) )) )(constant ivec2 (0 1)) ) ) (assign (swiz x (var_ref dereference_array_condition@0x97a9420) ) (xy) (array_ref (var_ref a@0x943ce48) (constant uint (0)) ) (var_ref dereference_array_value@0x9793278) ) (assign (swiz y (var_ref dereference_array_condition@0x97a9420) ) (xy) (array_ref (var_ref a@0x943ce48) (constant uint (1)) ) (var_ref dereference_array_value@0x9793278) ) (declare (temporary ) bool and_tmp@0x943d5b0) (if (expression bool all_equal (swiz x (array_ref (var_ref a@0x943ce48) (constant int (0)) ) )(constant float (0.000000)) ) ( (assign (constant bool (1)) (x) (var_ref and_tmp@0x943d5b0) (expression bool all_equal (swiz y (array_ref (var_ref a@0x943ce48) (constant int (0)) ) )(constant float (1.000000)) ) ) ) ( (assign (constant bool (1)) (x) (var_ref and_tmp@0x943d5b0) (constant bool (0)) ) )) (if (var_ref and_tmp@0x943d5b0) ( (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x94f4c40) (constant vec4 (0.000000 1.000000 0.000000 1.000000)) ) ) ( (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x94f4c40) (constant vec4 (1.000000 0.000000 0.000000 1.000000)) ) )) )) ) )
Fixed in master by: commit c00bc13564e432c496aa685d7b3ca7c60165be02 Author: Eric Anholt <eric@anholt.net> Date: Tue Jan 11 14:50:19 2011 -0800 glsl: Fix the lowering of variable array indexing to not lose write_masks. Fixes glsl-complex-subscript on 965. Fixed in 7.10 by: commit a7028581394975520f249b2f31f7a6bab8199187 Author: Eric Anholt <eric@anholt.net> Date: Tue Jan 11 14:50:19 2011 -0800 glsl: Fix the lowering of variable array indexing to not lose write_masks. Fixes glsl-complex-subscript on 965. (cherry picked from commit c00bc13564e432c496aa685d7b3ca7c60165be02) The bug did not occur in 7.9 because write masks were handled differently.
verified.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.