Added def_max_anisotropy and no_neg_lod_bias options to radeon and r200.
authorFelix Kuehling <fxkuehl@gmx.de>
Mon, 5 Jan 2004 02:40:28 +0000 (02:40 +0000)
committerFelix Kuehling <fxkuehl@gmx.de>
Mon, 5 Jan 2004 02:40:28 +0000 (02:40 +0000)
The def_max_anisotropy option breaks driconf. :( I'm going to upload a
fixed version soon.

src/mesa/drivers/dri/r200/r200_screen.c
src/mesa/drivers/dri/r200/r200_tex.c
src/mesa/drivers/dri/radeon/radeon_screen.c
src/mesa/drivers/dri/radeon/radeon_tex.c

index a79ac71..0d3c46d 100644 (file)
@@ -64,6 +64,8 @@ DRI_CONF_BEGIN
     DRI_CONF_SECTION_END
     DRI_CONF_SECTION_QUALITY
         DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
+        DRI_CONF_DEF_MAX_ANISOTROPY(1.0,"1.0,2.0,4.0,8.0,16.0")
+        DRI_CONF_NO_NEG_LOD_BIAS(false)
         DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
         DRI_CONF_ROUND_MODE(DRI_CONF_ROUND_TRUNC)
         DRI_CONF_DITHER_MODE(DRI_CONF_DITHER_XERRORDIFF)
@@ -72,7 +74,7 @@ DRI_CONF_BEGIN
         DRI_CONF_NO_RAST(false)
     DRI_CONF_SECTION_END
 DRI_CONF_END;
-static const GLuint __driNConfigOptions = 8;
+static const GLuint __driNConfigOptions = 10;
 
 #if 1
 /* Including xf86PciInfo.h introduces a bunch of errors...
index 6059bf5..f64bc2f 100644 (file)
@@ -44,6 +44,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "texutil.h"
 #include "texmem.h"
 #include "teximage.h"
+#include "texobj.h"
 
 #include "r200_context.h"
 #include "r200_state.h"
@@ -831,7 +832,7 @@ static void r200TexEnv( GLcontext *ctx, GLenum target,
    }
 
    case GL_TEXTURE_LOD_BIAS_EXT: {
-      GLfloat bias;
+      GLfloat bias, min;
       GLuint b;
       const int fixed_one = 0x8000000;
 
@@ -841,7 +842,9 @@ static void r200TexEnv( GLcontext *ctx, GLenum target,
        * NOTE: Add a small bias to the bias for conform mipsel.c test.
        */
       bias = *param + .01;
-      bias = CLAMP( bias, -16.0, 16.0 );
+      min = driQueryOptionb (&rmesa->optionCache, "no_neg_lod_bias") ?
+         0.0 : -16.0;
+      bias = CLAMP( bias, min, 16.0 );
       b = (int)(bias * fixed_one) & R200_LOD_BIAS_MASK;
       
       if ( (rmesa->hw.tex[unit].cmd[TEX_PP_TXFORMAT_X] & R200_LOD_BIAS_MASK) != b ) {
@@ -974,6 +977,18 @@ static void r200TexGen( GLcontext *ctx,
    rmesa->recheck_texgen[unit] = GL_TRUE;
 }
 
+/* Fixup MaxAnisotropy according to user preference.
+ */
+static struct gl_texture_object *r200NewTextureObject ( GLcontext *ctx,
+                                                       GLuint name,
+                                                       GLenum target ) {
+    struct gl_texture_object *obj;
+    obj = _mesa_new_texture_object (ctx, name, target);
+    obj->MaxAnisotropy = driQueryOptionf (&R200_CONTEXT(ctx)->optionCache,
+                                         "def_max_anisotropy");
+    return obj;
+}
+
 
 void r200InitTextureFuncs( GLcontext *ctx )
 {
@@ -1002,6 +1017,7 @@ void r200InitTextureFuncs( GLcontext *ctx )
    ctx->Driver.CopyTexSubImage3D       = _swrast_copy_texsubimage3d;
    ctx->Driver.TestProxyTexImage       = _mesa_test_proxy_teximage;
 
+   ctx->Driver.NewTextureObject         = r200NewTextureObject;
    ctx->Driver.BindTexture             = r200BindTexture;
    ctx->Driver.CreateTexture           = NULL; /* FIXME: Is this used??? */
    ctx->Driver.DeleteTexture           = r200DeleteTexture;
@@ -1017,4 +1033,10 @@ void r200InitTextureFuncs( GLcontext *ctx )
    driInitTextureObjects( ctx, & rmesa->swapped,
                          DRI_TEXMGR_DO_TEXTURE_1D
                          | DRI_TEXMGR_DO_TEXTURE_2D );
+
+   /* Hack: r200NewTextureObject is not yet installed when the
+    * default textures are created. Therefore set MaxAnisotropy of the
+    * default 2D texture now. */
+   ctx->Shared->Default2D->MaxAnisotropy = driQueryOptionf (&rmesa->optionCache,
+                                                           "def_max_anisotropy");
 }
index edd7c0f..ec773de 100644 (file)
@@ -63,6 +63,8 @@ DRI_CONF_BEGIN
     DRI_CONF_SECTION_END
     DRI_CONF_SECTION_QUALITY
         DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
+        DRI_CONF_DEF_MAX_ANISOTROPY(1.0,"1.0,2.0,4.0,8.0,16.0")
+        DRI_CONF_NO_NEG_LOD_BIAS(false)
         DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER)
         DRI_CONF_ROUND_MODE(DRI_CONF_ROUND_TRUNC)
         DRI_CONF_DITHER_MODE(DRI_CONF_DITHER_XERRORDIFF)
@@ -71,7 +73,7 @@ DRI_CONF_BEGIN
         DRI_CONF_NO_RAST(false)
     DRI_CONF_SECTION_END
 DRI_CONF_END;
-static const GLuint __driNConfigOptions = 8;
+static const GLuint __driNConfigOptions = 10;
 
 #if 1
 /* Including xf86PciInfo.h introduces a bunch of errors...
index 269c0a4..73825a8 100644 (file)
@@ -42,6 +42,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "texformat.h"
 #include "texstore.h"
 #include "teximage.h"
+#include "texobj.h"
 
 
 #include "radeon_context.h"
@@ -567,7 +568,7 @@ static void radeonTexEnv( GLcontext *ctx, GLenum target,
    }
 
    case GL_TEXTURE_LOD_BIAS_EXT: {
-      GLfloat bias;
+      GLfloat bias, min;
       GLuint b;
 
       /* The Radeon's LOD bias is a signed 2's complement value with a
@@ -575,7 +576,9 @@ static void radeonTexEnv( GLcontext *ctx, GLenum target,
        * functions, one mapping [-1.0,0.0] to [-128,0] and one mapping
        * [0.0,4.0] to [0,127].
        */
-      bias = CLAMP( *param, -1.0, 4.0 );
+      min = driQueryOptionb (&rmesa->optionCache, "no_neg_lod_bias") ?
+         0.0 : -1.0;
+      bias = CLAMP( *param, min, 4.0 );
       if ( bias == 0 ) {
         b = 0;
       } else if ( bias > 0 ) {
@@ -712,6 +715,18 @@ static void radeonTexGen( GLcontext *ctx,
    rmesa->recheck_texgen[unit] = GL_TRUE;
 }
 
+/* Fixup MaxAnisotropy according to user preference.
+ */
+static struct gl_texture_object *radeonNewTextureObject ( GLcontext *ctx,
+                                                         GLuint name,
+                                                         GLenum target ) {
+    struct gl_texture_object *obj;
+    obj = _mesa_new_texture_object (ctx, name, target);
+    obj->MaxAnisotropy = driQueryOptionf (&RADEON_CONTEXT(ctx)->optionCache,
+                                         "def_max_anisotropy");
+    return obj;
+}
+
 
 void radeonInitTextureFuncs( GLcontext *ctx )
 {
@@ -732,6 +747,7 @@ void radeonInitTextureFuncs( GLcontext *ctx )
    ctx->Driver.CopyTexSubImage3D       = _swrast_copy_texsubimage3d;
    ctx->Driver.TestProxyTexImage       = _mesa_test_proxy_teximage;
 
+   ctx->Driver.NewTextureObject         = radeonNewTextureObject;
    ctx->Driver.BindTexture             = radeonBindTexture;
    ctx->Driver.CreateTexture           = NULL; /* FIXME: Is this used??? */
    ctx->Driver.DeleteTexture           = radeonDeleteTexture;
@@ -747,4 +763,10 @@ void radeonInitTextureFuncs( GLcontext *ctx )
    driInitTextureObjects( ctx, & rmesa->swapped,
                          DRI_TEXMGR_DO_TEXTURE_1D
                          | DRI_TEXMGR_DO_TEXTURE_2D );
+
+   /* Hack: radeonNewTextureObject is not yet installed when the
+    * default textures are created. Therefore set MaxAnisotropy of the
+    * default 2D texture now. */
+   ctx->Shared->Default2D->MaxAnisotropy = driQueryOptionf (&rmesa->optionCache,
+                                                           "def_max_anisotropy");
 }