mesa: only use fallback texture when using shaders, not fixed-function (take two)
authorBrian Paul <brianp@vmware.com>
Tue, 5 May 2009 22:21:20 +0000 (16:21 -0600)
committerEric Anholt <eric@anholt.net>
Tue, 7 Jul 2009 23:02:45 +0000 (16:02 -0700)
The semantics are a little different for shaders vs. fixed-function when
trying to use an incomplete texture.  The fallback texture returning
(0,0,0,1) should only be used with shaders.  For fixed function, the texture
unit is truly disabled/ignored.

Fixes glean fbo test regression.
(cherry picked from commit 01e16befd4809e3e93ee7855a4a5d7df9fe010d9)
(cherry picked from commit 51325f44d1e7e62b47795a79f8038d10dc5bc30b)
[anholt: squashed these two together from master, skipping the mess in between]

src/mesa/main/texstate.c

index 89da4335a2e888c92ea1727f6e4bca891441b8ae..6e0c0c688a19ac3171b7e1b86936ffbbab5f038c 100644 (file)
@@ -561,13 +561,19 @@ update_texture_state( GLcontext *ctx )
       }
 
       if (!texUnit->_ReallyEnabled) {
-         /* If we get here it means the shader (or fixed-function state)
-          * is expecting a texture object, but there isn't one (or it's
-          * incomplete).  Use the fallback texture.
-          */
-         struct gl_texture_object *texObj = _mesa_get_fallback_texture(ctx);
-         texUnit->_ReallyEnabled = 1 << TEXTURE_2D_INDEX;
-         _mesa_reference_texobj(&texUnit->_Current, texObj);
+         if (fprog) {
+            /* If we get here it means the shader is expecting a texture
+             * object, but there isn't one (or it's incomplete).  Use the
+             * fallback texture.
+             */
+            struct gl_texture_object *texObj = _mesa_get_fallback_texture(ctx);
+            texUnit->_ReallyEnabled = 1 << TEXTURE_2D_INDEX;
+            _mesa_reference_texobj(&texUnit->_Current, texObj);
+         }
+         else {
+            /* fixed-function: texture unit is really disabled */
+            continue;
+         }
       }
 
       /* if we get here, we know this texture unit is enabled */