Hi,
the attached patch adds a texture color depth option to the r128 and mga
drivers. I'm not 100% sure if these cards can handle 32bpt textures on
16bit mode. Could someone test this on the respective hardware please.
Best regards,
Felix
------------ __\|/__ ___ ___ -------------------------
Felix ___\_e -_/___/ __\___/ __\_____ You can do anything,
K�hling (_____\�/____/ /_____/ /________) just not everything
[EMAIL PROTECTED] \___/ \___/ U at the same time.
Index: mga/mga_xmesa.c
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/src/drv/mga/mga_xmesa.c,v
retrieving revision 1.61
diff -u -r1.61 mga_xmesa.c
--- mga/mga_xmesa.c 18 Oct 2003 20:40:36 -0000 1.61
+++ mga/mga_xmesa.c 19 Oct 2003 14:38:41 -0000
@@ -67,8 +67,11 @@
DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
DRI_CONF_SECTION_END
+ DRI_CONF_SECTION_QUALITY
+ DRI_CONF_PREFERRED_BPT(0,"0,16,32")
+ DRI_CONF_SECTION_END
DRI_CONF_END;
-const GLuint __driNConfigOptions = 1;
+const GLuint __driNConfigOptions = 2;
#ifndef MGA_DEBUG
int MGA_DEBUG = 0;
@@ -344,6 +347,7 @@
mgaScreenPrivate *mgaScreen = (mgaScreenPrivate *)sPriv->private;
MGASAREAPrivPtr saPriv=(MGASAREAPrivPtr)(((char*)sPriv->pSAREA)+
mgaScreen->sarea_priv_offset);
+ int preferred_bpt;
if (MGA_DEBUG&DEBUG_VERBOSE_DRI)
fprintf(stderr, "mgaCreateContext\n");
@@ -428,7 +432,10 @@
ctx->Const.MaxLineWidthAA = 10.0;
ctx->Const.LineWidthGranularity = 1.0;
- mmesa->default32BitTextures = (mesaVis->rgbBits >= 24);
+ preferred_bpt = driQueryOptioni (&mmesa->optionCache, "preferred_bpt");
+ mmesa->default32BitTextures =
+ ( ( preferred_bpt == 0 && mesaVis->rgbBits >= 24 ) ||
+ preferred_bpt == 32 );
mmesa->hw_stencil = mesaVis->stencilBits && mesaVis->depthBits == 24;
switch (mesaVis->depthBits) {
Index: r128/r128_context.c
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/src/drv/r128/r128_context.c,v
retrieving revision 1.28
diff -u -r1.28 r128_context.c
--- r128/r128_context.c 18 Oct 2003 20:40:36 -0000 1.28
+++ r128/r128_context.c 19 Oct 2003 14:38:42 -0000
@@ -66,19 +66,22 @@
const char __driConfigOptions[] =
DRI_CONF_BEGIN
+ DRI_CONF_SECTION_PERFORMANCE
+ DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
+ DRI_CONF_SECTION_END
+ DRI_CONF_SECTION_QUALITY
+ DRI_CONF_PREFERRED_BPT(0,"0,16,32")
+ DRI_CONF_SECTION_END
#if ENABLE_PERF_BOXES
DRI_CONF_SECTION_DEBUG
DRI_CONF_PERFORMANCE_BOXES(false)
DRI_CONF_SECTION_END
#endif
- DRI_CONF_SECTION_PERFORMANCE
- DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
- DRI_CONF_SECTION_END
DRI_CONF_END;
#if ENABLE_PERF_BOXES
-const GLuint __driNConfigOptions = 2;
+const GLuint __driNConfigOptions = 3;
#else
-const GLuint __driNConfigOptions = 1;
+const GLuint __driNConfigOptions = 2;
#endif
#ifndef R128_DEBUG
@@ -120,6 +123,7 @@
r128ContextPtr rmesa;
r128ScreenPtr r128scrn;
int i;
+ int preferred_bpt;
/* Allocate the r128 context */
rmesa = (r128ContextPtr) CALLOC( sizeof(*rmesa) );
@@ -176,6 +180,9 @@
driSetTextureSwapCounterLocation( rmesa->texture_heaps[i],
& rmesa->c_textureSwaps );
}
+ preferred_bpt = driQueryOptioni (&rmesa->optionCache, "preferred_bpt");
+ rmesa->default32BitTextures =
+ ( ( preferred_bpt == 0 && r128scrn->cpp == 4 ) || preferred_bpt == 32 );
rmesa->RenderIndex = -1; /* Impossible value */
Index: r128/r128_context.h
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/src/drv/r128/r128_context.h,v
retrieving revision 1.37
diff -u -r1.37 r128_context.h
--- r128/r128_context.h 9 Oct 2003 09:55:58 -0000 1.37
+++ r128/r128_context.h 19 Oct 2003 14:38:42 -0000
@@ -160,6 +160,8 @@
driTextureObject swapped;
r128TexObjPtr CurrentTexObj[2];
+
+ GLboolean default32BitTextures;
/* Fallback rasterization functions
*/
Index: r128/r128_tex.c
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/src/drv/r128/r128_tex.c,v
retrieving revision 1.32
diff -u -r1.32 r128_tex.c
--- r128/r128_tex.c 26 May 2003 20:04:53 -0000 1.32
+++ r128/r128_tex.c 19 Oct 2003 14:38:44 -0000
@@ -173,6 +173,7 @@
GLenum format, GLenum type )
{
r128ContextPtr rmesa = R128_CONTEXT(ctx);
+ const GLboolean do32bpt = rmesa->default32BitTextures;
(void) format;
(void) type;
@@ -201,7 +202,7 @@
case GL_RGB10_A2:
case GL_RGBA12:
case GL_RGBA16:
- if (rmesa->r128Screen->cpp == 4)
+ if (do32bpt)
return &_mesa_texformat_argb8888;
else
return &_mesa_texformat_argb4444;
@@ -218,7 +219,7 @@
case GL_RGB10:
case GL_RGB12:
case GL_RGB16:
- if (rmesa->r128Screen->cpp == 4)
+ if (do32bpt)
return &_mesa_texformat_argb8888;
else
return &_mesa_texformat_rgb565;
@@ -230,7 +231,7 @@
case GL_LUMINANCE12:
case GL_LUMINANCE16:
case GL_COMPRESSED_LUMINANCE:
- if (rmesa->r128Screen->cpp == 4)
+ if (do32bpt)
return &_mesa_texformat_argb8888; /* inefficient but accurate */
else
return &_mesa_texformat_rgb565;
@@ -242,7 +243,7 @@
case GL_INTENSITY12:
case GL_INTENSITY16:
case GL_COMPRESSED_INTENSITY:
- if (rmesa->r128Screen->cpp == 4)
+ if (do32bpt)
return &_mesa_texformat_argb8888; /* inefficient but accurate */
else
return &_mesa_texformat_argb4444;