st/mesa: fix bug in emit_adjusted_wpos()
authorBrian Paul <brianp@vmware.com>
Fri, 23 Jul 2010 19:39:36 +0000 (13:39 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 23 Jul 2010 19:42:06 +0000 (13:42 -0600)
If we bias x,y we still need to pass through z,w in case the shader
reads gl_FragCoord.z or .w.

Fixes fd.o bug 29183 (piglit glsl-bug-22603).

NOTE: This is a candidate for the 7.8 branch.

src/mesa/state_tracker/st_mesa_to_tgsi.c

index bacd091853b0cafb51f1ca92b3afba7f723269a2..686ccb973442a3840f0abcd19a833206a68d8216 100644 (file)
@@ -738,9 +738,12 @@ emit_adjusted_wpos( struct st_translate *t,
    struct ureg_dst wpos_temp = ureg_DECL_temporary(ureg);
    struct ureg_src wpos_input = t->inputs[t->inputMapping[FRAG_ATTRIB_WPOS]];
 
+   /* Note that we bias X and Y and pass Z and W through unchanged.
+    * The shader might also use gl_FragCoord.w and .z.
+    */
    ureg_ADD(ureg,
-            ureg_writemask(wpos_temp, TGSI_WRITEMASK_X | TGSI_WRITEMASK_Y),
-            wpos_input, ureg_imm1f(ureg, value));
+            ureg_writemask(wpos_temp, TGSI_WRITEMASK_XYZW),
+            wpos_input, ureg_imm4f(ureg, value, value, 0.0f, 0.0f));
 
    t->inputs[t->inputMapping[FRAG_ATTRIB_WPOS]] = ureg_src(wpos_temp);
 }