i915: texture object's lod bias. fix bug #15192
authorXiang, Haihao <haihao.xiang@intel.com>
Mon, 31 Mar 2008 05:45:06 +0000 (13:45 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Mon, 31 Mar 2008 05:45:06 +0000 (13:45 +0800)
src/mesa/drivers/dri/i915/i830_tex.c
src/mesa/drivers/dri/i915/i830_texstate.c
src/mesa/drivers/dri/i915/i915_tex.c
src/mesa/drivers/dri/i915/i915_texstate.c

index fed464d..79b0fcf 100644 (file)
@@ -96,5 +96,7 @@ i830TexEnv(GLcontext * ctx, GLenum target,
 void
 i830InitTextureFuncs(struct dd_function_table *functions)
 {
+/*
    functions->TexEnv = i830TexEnv;
+*/
 }
index 7613b9d..4e9b022 100644 (file)
@@ -114,10 +114,12 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
 {
    GLcontext *ctx = &intel->ctx;
    struct i830_context *i830 = i830_context(ctx);
-   struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
+   struct gl_texture_unit *tUnit = &ctx->Texture.Unit[unit];
+   struct gl_texture_object *tObj = tUnit->_Current;
    struct intel_texture_object *intelObj = intel_texture_object(tObj);
    struct gl_texture_image *firstImage;
    GLuint *state = i830->state.Tex[unit], format, pitch;
+   GLint lodbias;
 
    memset(state, 0, sizeof(state));
 
@@ -243,8 +245,14 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          }
       }
 
-      state[I830_TEXREG_TM0S3] = i830->lodbias_tm0s3[unit];
-
+      lodbias = (int) ((tUnit->LodBias + tObj->LodBias) * 16.0);
+      if (lodbias < -64)
+          lodbias = -64;
+      if (lodbias > 63)
+          lodbias = 63;
+      
+      state[I830_TEXREG_TM0S3] = ((lodbias << TM0S3_LOD_BIAS_SHIFT) & 
+                                  TM0S3_LOD_BIAS_MASK);
 #if 0
       /* YUV conversion:
        */
index 59e148c..386617a 100644 (file)
@@ -74,5 +74,7 @@ i915TexEnv(GLcontext * ctx, GLenum target,
 void
 i915InitTextureFuncs(struct dd_function_table *functions)
 {
+/*
    functions->TexEnv = i915TexEnv;
+*/
 }
index e489d25..987c6c0 100644 (file)
@@ -119,10 +119,12 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
 {
    GLcontext *ctx = &intel->ctx;
    struct i915_context *i915 = i915_context(ctx);
-   struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
+   struct gl_texture_unit *tUnit = &ctx->Texture.Unit[unit];
+   struct gl_texture_object *tObj = tUnit->_Current;
    struct intel_texture_object *intelObj = intel_texture_object(tObj);
    struct gl_texture_image *firstImage;
    GLuint *state = i915->state.Tex[unit], format, pitch;
+   GLint lodbias;
 
    memset(state, 0, sizeof(state));
 
@@ -232,7 +234,13 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          }
       }
 
-      state[I915_TEXREG_SS2] = i915->lodbias_ss2[unit];
+      lodbias = (int) ((tUnit->LodBias + tObj->LodBias) * 16.0);
+      if (lodbias < -256)
+          lodbias = -256;
+      if (lodbias > 255)
+          lodbias = 255;
+      state[I915_TEXREG_SS2] = ((lodbias << SS2_LOD_BIAS_SHIFT) & 
+                                SS2_LOD_BIAS_MASK);
 
       /* YUV conversion:
        */