i965/fs: Gen4: Zero out extra coordinates when using shadow compare
authorChris Forbes <chrisf@ijw.co.nz>
Tue, 27 Aug 2013 07:35:49 +0000 (19:35 +1200)
committerChris Forbes <chrisf@ijw.co.nz>
Sun, 1 Sep 2013 07:50:59 +0000 (19:50 +1200)
Fixes broken rendering if these MRFs contained anything other than zero.

NOTE: This is a candidate for stable branches.
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index b0494364a1ddd93cbf384f0ebc51fec52898680d..1e01d39d8b4da4e972cd117adc5312679f66a24c 100644 (file)
@@ -876,7 +876,13 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate,
         emit(MOV(fs_reg(MRF, base_mrf + mlen + i), coordinate));
         coordinate.reg_offset++;
       }
-      /* gen4's SIMD8 sampler always has the slots for u,v,r present. */
+
+      /* gen4's SIMD8 sampler always has the slots for u,v,r present.
+       * the unused slots must be zeroed.
+       */
+      for (int i = ir->coordinate->type->vector_elements; i < 3; i++) {
+         emit(MOV(fs_reg(MRF, base_mrf + mlen + i), fs_reg(0.0f)));
+      }
       mlen += 3;
 
       if (ir->op == ir_tex) {