Mesa (master): r200: Fix lod bias correction.

Pauli Nieminen suokko at kemper.freedesktop.org
Sun Feb 7 11:14:30 UTC 2010


Module: Mesa
Branch: master
Commit: 76a9831b2b20d59c49b5f25ba5275f17b4e2067b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=76a9831b2b20d59c49b5f25ba5275f17b4e2067b

Author: Pauli Nieminen <suokkos at gmail.com>
Date:   Sun Feb  7 02:50:48 2010 +0200

r200: Fix lod bias correction.

glean/pointSprite shows that rv280 is trying to read from better
quality mipmap level. We have to correct default lod bias to match
required texture selection.

---

 src/mesa/drivers/dri/r200/r200_reg.h        |    2 ++
 src/mesa/drivers/dri/r200/r200_state_init.c |    2 +-
 src/mesa/drivers/dri/r200/r200_tex.c        |    7 ++++---
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/r200_reg.h b/src/mesa/drivers/dri/r200/r200_reg.h
index 526a624..e676869 100644
--- a/src/mesa/drivers/dri/r200/r200_reg.h
+++ b/src/mesa/drivers/dri/r200/r200_reg.h
@@ -950,6 +950,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define     R200_TEXCOORD_ZERO                        (7  << 16)
 #define     R200_TEXCOORD_MASK                        (7  << 16)
 #define     R200_LOD_BIAS_MASK                        (0xfff80000)
+#define     R200_LOD_BIAS_FIXED_ONE                   (0x08000000)
+#define     R200_LOD_BIAS_CORRECTION                  (0x00600000)
 #define     R200_LOD_BIAS_SHIFT                       19
 #define R200_PP_TXSIZE_0                  0x2c0c /* NPOT only */
 #define R200_PP_TX_WIDTHMASK_SHIFT 0
diff --git a/src/mesa/drivers/dri/r200/r200_state_init.c b/src/mesa/drivers/dri/r200/r200_state_init.c
index 51e8ac5..e06437b 100644
--- a/src/mesa/drivers/dri/r200/r200_state_init.c
+++ b/src/mesa/drivers/dri/r200/r200_state_init.c
@@ -1386,7 +1386,7 @@ void r200InitState( r200ContextPtr rmesa )
       rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;
       rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =
          (/* R200_TEXCOORD_PROJ | */
-          0x100000);	/* Small default bias */
+          R200_LOD_BIAS_CORRECTION);	/* Small default bias */
       if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
 	 rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =
 	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
diff --git a/src/mesa/drivers/dri/r200/r200_tex.c b/src/mesa/drivers/dri/r200/r200_tex.c
index 85283a9..6723b12 100644
--- a/src/mesa/drivers/dri/r200/r200_tex.c
+++ b/src/mesa/drivers/dri/r200/r200_tex.c
@@ -324,18 +324,19 @@ static void r200TexEnv( GLcontext *ctx, GLenum target,
    case GL_TEXTURE_LOD_BIAS_EXT: {
       GLfloat bias, min;
       GLuint b;
-      const int fixed_one = 0x8000000;
+      const int fixed_one = R200_LOD_BIAS_FIXED_ONE;
 
       /* The R200's LOD bias is a signed 2's complement value with a
        * range of -16.0 <= bias < 16.0. 
        *
        * NOTE: Add a small bias to the bias for conform mipsel.c test.
        */
-      bias = *param + .01;
+      bias = *param;
       min = driQueryOptionb (&rmesa->radeon.optionCache, "no_neg_lod_bias") ?
 	  0.0 : -16.0;
       bias = CLAMP( bias, min, 16.0 );
-      b = (int)(bias * fixed_one) & R200_LOD_BIAS_MASK;
+      b = ((int)(bias * fixed_one)
+		+ R200_LOD_BIAS_CORRECTION) & R200_LOD_BIAS_MASK;
       
       if ( (rmesa->hw.tex[unit].cmd[TEX_PP_TXFORMAT_X] & R200_LOD_BIAS_MASK) != b ) {
 	 R200_STATECHANGE( rmesa, tex[unit] );




More information about the mesa-commit mailing list