intel: fix texture border issue. (bug #16697)
authorXiang, Haihao <haihao.xiang@intel.com>
Fri, 18 Jul 2008 09:40:11 +0000 (17:40 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 18 Jul 2008 09:40:11 +0000 (17:40 +0800)
src/mesa/drivers/dri/i965/brw_fallback.c
src/mesa/drivers/dri/intel/intel_mipmap_tree.c
src/mesa/drivers/dri/intel/intel_tex_image.c
src/mesa/drivers/dri/intel/intel_tex_validate.c

index b5cf821a9386365ad4a462199ac17905b9cede0f..8a8fb50cb997602c33e3b4154a130d133ed5c95b 100644 (file)
@@ -73,7 +73,10 @@ static GLboolean do_check_fallback(struct brw_context *brw)
       if (texUnit->_ReallyEnabled) {
         struct intel_texture_object *intelObj = intel_texture_object(texUnit->_Current);
         struct gl_texture_image *texImage = intelObj->base.Image[0][intelObj->firstLevel];
-        if (texImage->Border) {
+        if (texImage->Border ||
+         ((texImage->_BaseFormat == GL_DEPTH_COMPONENT) &&
+          ((texImage->TexObject->WrapS == GL_CLAMP_TO_BORDER) || 
+           (texImage->TexObject->WrapT == GL_CLAMP_TO_BORDER)))) {
            DBG("FALLBACK: texture border\n");
            return GL_TRUE;
         }
index 9205627813c956af5bd3228a1f8640ef92733ea3..1b645c7262101611d8a9a2f2595a7081713fde64 100644 (file)
@@ -265,7 +265,10 @@ intel_miptree_match_image(struct intel_mipmap_tree *mt,
 {
    /* Images with borders are never pulled into mipmap trees. 
     */
-   if (image->Border) 
+   if (image->Border ||
+       ((image->_BaseFormat == GL_DEPTH_COMPONENT) &&
+        ((image->TexObject->WrapS == GL_CLAMP_TO_BORDER) ||
+         (image->TexObject->WrapT == GL_CLAMP_TO_BORDER)))) 
       return GL_FALSE;
 
    if (image->InternalFormat != mt->internal_format ||
index 95ddbd59202dead1af2212226a65c59240a3f6bb..f261034c18f6d95ea5b1ad4dab58b01088b54b92 100644 (file)
@@ -75,7 +75,10 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
 
    DBG("%s\n", __FUNCTION__);
 
-   if (intelImage->base.Border)
+   if (intelImage->base.Border ||
+       ((intelImage->base._BaseFormat == GL_DEPTH_COMPONENT) && 
+        ((intelObj->base.WrapS == GL_CLAMP_TO_BORDER) ||
+         (intelObj->base.WrapT == GL_CLAMP_TO_BORDER))))
       return;
 
    if (intelImage->level > intelObj->base.BaseLevel &&
index 992c75c519dc3914b3990b62eef3eeedf7cbb3dd..f56c236e611a8ab6194104d1d04851aac7486bc2 100644 (file)
@@ -144,7 +144,10 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
 
    /* Fallback case:
     */
-   if (firstImage->base.Border) {
+   if (firstImage->base.Border ||
+       ((firstImage->base._BaseFormat == GL_DEPTH_COMPONENT) &&
+        ((tObj->WrapS == GL_CLAMP_TO_BORDER) ||
+         (tObj->WrapT == GL_CLAMP_TO_BORDER)))) {
       if (intelObj->mt) {
          intel_miptree_release(intel, &intelObj->mt);
       }