diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_fallback.c | 5 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 21 | 
2 files changed, 20 insertions, 6 deletions
| diff --git a/src/mesa/drivers/dri/i965/brw_fallback.c b/src/mesa/drivers/dri/i965/brw_fallback.c index 2f6b7febbd..4ea660a51a 100644 --- a/src/mesa/drivers/dri/i965/brw_fallback.c +++ b/src/mesa/drivers/dri/i965/brw_fallback.c @@ -74,10 +74,7 @@ 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 || -         ((texImage->_BaseFormat == GL_DEPTH_COMPONENT) && -          ((texImage->TexObject->WrapS == GL_CLAMP_TO_BORDER) ||  -           (texImage->TexObject->WrapT == GL_CLAMP_TO_BORDER)))) { +	 if (texImage->Border) {  	    DBG("FALLBACK: texture border\n");  	    return GL_TRUE;  	 } diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c index 977b90ad43..f12ef47a7d 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c @@ -229,6 +229,9 @@ brw_wm_sampler_populate_key(struct brw_context *brw,  	 struct wm_sampler_entry *entry = &key->sampler[unit];  	 struct gl_texture_unit *texUnit = &brw->attribs.Texture->Unit[unit];  	 struct gl_texture_object *texObj = texUnit->_Current; +	 struct intel_texture_object *intelObj = intel_texture_object(texObj); +	 struct gl_texture_image *firstImage = +	    texObj->Image[0][intelObj->firstLevel];  	 entry->wrap_r = texObj->WrapR;  	 entry->wrap_s = texObj->WrapS; @@ -244,8 +247,22 @@ brw_wm_sampler_populate_key(struct brw_context *brw,      entry->comparefunc = texObj->CompareFunc;  	 dri_bo_unreference(brw->wm.sdc_bo[unit]); -	 brw->wm.sdc_bo[unit] = upload_default_color(brw, texObj->BorderColor); - +	 if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) { +	    float bordercolor[4] = { +	       texObj->BorderColor[0], +	       texObj->BorderColor[0], +	       texObj->BorderColor[0], +	       texObj->BorderColor[0] +	    }; +	    /* 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. +	     */ +	    brw->wm.sdc_bo[unit] = upload_default_color(brw, bordercolor); +	 } else { +	    brw->wm.sdc_bo[unit] = upload_default_color(brw, +							texObj->BorderColor); +	 }  	 key->sampler_count = unit + 1;        }     } | 
