diff options
| author | Eric Anholt <eric@anholt.net> | 2010-06-04 13:27:05 -0700 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2010-06-04 13:28:48 -0700 | 
| commit | b80a728f8a86cbd1efce9611d822ab73b5baeab9 (patch) | |
| tree | c5dd964a9587a0549399ec9fe8200db8326e9a5b /src | |
| parent | 18a6e5ee73c5cef283c6bef906e5f8e4f60d4000 (diff) | |
i915: Clamp minimum lod to maximum texture level too.
Otherwise, we'd run into minlod > maxlod, and the sampler would give
us the undefined we asked for.
Bug #24846.  Fixes OGLC texlod.c.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/i915/i915_texstate.c | 4 | 
1 files changed, 3 insertions, 1 deletions
| diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c index ff9ab88c5a..9c56b55fee 100644 --- a/src/mesa/drivers/dri/i915/i915_texstate.c +++ b/src/mesa/drivers/dri/i915/i915_texstate.c @@ -281,6 +281,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)        GLenum ws = tObj->WrapS;        GLenum wt = tObj->WrapT;        GLenum wr = tObj->WrapR; +      float minlod;        /* We program 1D textures as 2D textures, so the 2D texcoord could         * result in sampling border values if we don't set the T wrap to @@ -321,8 +322,9 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)            (translate_wrap_mode(wt) << SS3_TCY_ADDR_MODE_SHIFT) |            (translate_wrap_mode(wr) << SS3_TCZ_ADDR_MODE_SHIFT)); +      minlod = MIN2(tObj->MinLod, tObj->_MaxLevel - tObj->BaseLevel);        state[I915_TEXREG_SS3] |= (unit << SS3_TEXTUREMAP_INDEX_SHIFT); -      state[I915_TEXREG_SS3] |= (U_FIXED(CLAMP(tObj->MinLod, 0.0, 11.0), 4) << +      state[I915_TEXREG_SS3] |= (U_FIXED(CLAMP(minlod, 0.0, 11.0), 4) <<  				 SS3_MIN_LOD_SHIFT);     } | 
