Mesa (master): mesa: set Q=1 for OPCODE_TEX execution

Brian Paul brianp at
Fri Aug 19 12:36:02 PDT 2011

Module: Mesa
Branch: master
Commit: 0eb18ee55719377ebd90456bde605384ce4ec14a

Author: Brian Paul <brianp at>
Date:   Thu Aug 18 15:54:53 2011 -0600

mesa: set Q=1 for OPCODE_TEX execution

Q should not be significant for OPCODE_TEX, but it winds up getting
passed to the compute_lambda() function.  Make sure it's 1.0 to
prevent garbage values, which is effectively what we get when the
swizzle is coord.xyzz (which is what GLSL gives us).

Part of the fix for piglit's fbo-generatemipmap-array test.

Reviewed-by: Ian Romanick <ian.d.romanick at>


 src/mesa/program/prog_execute.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/prog_execute.c b/src/mesa/program/prog_execute.c
index c70a1e3..77f842a 100644
--- a/src/mesa/program/prog_execute.c
+++ b/src/mesa/program/prog_execute.c
@@ -1651,6 +1651,14 @@ _mesa_execute_program(struct gl_context * ctx,
             GLfloat texcoord[4], color[4];
             fetch_vector4(&inst->SrcReg[0], machine, texcoord);
+            /* For TEX, texcoord.Q should not be used and its value should not
+             * matter (at most, we pass to texture3D() in GLSL).
+             * Set Q=1 so that FetchTexelDeriv() doesn't get a garbage value
+             * which is effectively what happens when the texcoord swizzle
+             * is .xyzz
+             */
+            texcoord[3] = 1.0f;
             fetch_texel(ctx, machine, inst, texcoord, 0.0, color);
             if (DEBUG_PROG) {

More information about the mesa-commit mailing list