mesa: fix shadow sampling unit issue.
authorXiang, Haihao <haihao.xiang@intel.com>
Thu, 20 Nov 2008 08:54:16 +0000 (16:54 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Thu, 20 Nov 2008 08:54:16 +0000 (16:54 +0800)
texture comparison logic is bypassed if the currently bound texture is not
a depth/depth_stencil texture.

src/mesa/main/texenvprogram.c

index dcd7f9056794928a343cf48a04eca0d5d9881193..ba7ce4a3cc65a268a5bd91e7fc26d21fdb97f485 100644 (file)
@@ -213,16 +213,21 @@ static void make_state_key( GLcontext *ctx,  struct state_key *key )
 
    for (i=0;i<MAX_TEXTURE_UNITS;i++) {
       const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
+      GLenum format;
 
       if (!texUnit->_ReallyEnabled || !texUnit->Enabled)
          continue;
 
+      format = texUnit->_Current->Image[0][texUnit->_Current->BaseLevel]->_BaseFormat;
+
       key->unit[i].enabled = 1;
       key->enabled_units |= (1<<i);
 
       key->unit[i].source_index = 
         translate_tex_src_bit(texUnit->_ReallyEnabled);                
-      key->unit[i].shadow = texUnit->_Current->CompareMode == GL_COMPARE_R_TO_TEXTURE;
+      key->unit[i].shadow = ((texUnit->_Current->CompareMode == GL_COMPARE_R_TO_TEXTURE) && 
+                             ((format == GL_DEPTH_COMPONENT) || 
+                              (format == GL_DEPTH_STENCIL_EXT)));
 
       key->unit[i].NumArgsRGB = texUnit->_CurrentCombine->_NumArgsRGB;
       key->unit[i].NumArgsA = texUnit->_CurrentCombine->_NumArgsA;