i965/gen4: Fix fragment program rectangle texture shadow compares.
authorEric Anholt <eric@anholt.net>
Wed, 18 Sep 2013 19:32:31 +0000 (12:32 -0700)
committerEric Anholt <eric@anholt.net>
Sat, 21 Sep 2013 23:48:58 +0000 (16:48 -0700)
The rescale_texcoord(), if it does something, will return just the
GLSL-sized coordinate, leaving out the 3rd and 4th components where we
were storing our projected shadow compare and the texture projector.
Deref the shadow compare before using the shared rescale-the-coordinate
code to fix the problem.

Fixes piglit tex-shadow2drect.shader_test and txp-shadow2drect.shader_test

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=69525
NOTE: This is a candidate for stable branches.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_fp.cpp

index 68531e3b2fa27f0bce32e516a1820005b12f7829..0594948ee06c2617bd76f8c1eb459695482de6cb 100644 (file)
@@ -490,15 +490,15 @@ fs_visitor::emit_fragment_program_code()
          ir_constant_data junk_data;
          ir->coordinate = new(mem_ctx) ir_constant(coordinate_type, &junk_data);
 
-         coordinate = rescale_texcoord(ir, coordinate,
-                                       fpi->TexSrcTarget == TEXTURE_RECT_INDEX,
-                                       fpi->TexSrcUnit, fpi->TexSrcUnit);
-
          if (fpi->TexShadow) {
             shadow_c = regoffset(coordinate, 2);
             ir->shadow_comparitor = new(mem_ctx) ir_constant(0.0f);
          }
 
+         coordinate = rescale_texcoord(ir, coordinate,
+                                       fpi->TexSrcTarget == TEXTURE_RECT_INDEX,
+                                       fpi->TexSrcUnit, fpi->TexSrcUnit);
+
          fs_inst *inst;
          if (brw->gen >= 7) {
             inst = emit_texture_gen7(ir, dst, coordinate, shadow_c, lod, dpdy, sample_index);