i915: Accelerate depth textures with border color.
authorEric Anholt <eric@anholt.net>
Thu, 9 Oct 2008 06:34:38 +0000 (23:34 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 9 Oct 2008 06:55:58 +0000 (23:55 -0700)
The fallback was introduced to fix bug #16697, but made the test it was
fixing run excessively long.

src/mesa/drivers/dri/i915/i915_texstate.c
src/mesa/drivers/dri/intel/intel_tex_validate.c

index ae42b102db83e88b640161924400710a9a82ed2e..d1b0dcdf319cad7693d0bf348593189c9311b83d 100644 (file)
@@ -307,10 +307,21 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    }
 
 
-   state[I915_TEXREG_SS4] = INTEL_PACKCOLOR8888(tObj->_BorderChan[0],
-                                                tObj->_BorderChan[1],
-                                                tObj->_BorderChan[2],
-                                                tObj->_BorderChan[3]);
+   if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
+      /* GL specs that border color for depth textures is taken from the
+       * R channel, while the hardware uses A.  Spam R into all the channels
+       * for safety.
+       */
+      state[I915_TEXREG_SS4] = INTEL_PACKCOLOR8888(tObj->_BorderChan[0],
+                                                  tObj->_BorderChan[0],
+                                                  tObj->_BorderChan[0],
+                                                  tObj->_BorderChan[0]);
+   } else {
+      state[I915_TEXREG_SS4] = INTEL_PACKCOLOR8888(tObj->_BorderChan[0],
+                                                  tObj->_BorderChan[1],
+                                                  tObj->_BorderChan[2],
+                                                  tObj->_BorderChan[3]);
+   }
 
 
    I915_ACTIVESTATE(i915, I915_UPLOAD_TEX(unit), GL_TRUE);
index 3dae738ac2e92fb8f2eb699c92d89014b2a3a1ad..820683d42eb6d5e86922694e403b7953e5eaf25b 100644 (file)
@@ -141,10 +141,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
 
    /* Fallback case:
     */
-   if (firstImage->base.Border ||
-       ((firstImage->base._BaseFormat == GL_DEPTH_COMPONENT) &&
-        ((tObj->WrapS == GL_CLAMP_TO_BORDER) ||
-         (tObj->WrapT == GL_CLAMP_TO_BORDER)))) {
+   if (firstImage->base.Border) {
       if (intelObj->mt) {
          intel_miptree_release(intel, &intelObj->mt);
       }