intel: fix texture border issue. (bug #16697)

This commit is contained in:
Xiang, Haihao 2008-07-18 17:40:11 +08:00
parent 3bfedb7ed4
commit b4b7326717
4 changed files with 16 additions and 4 deletions

View 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;
}

View 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 ||

View 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 &&

View 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);
}