allow >10 mipmap levels (patch by Benno Schulenberg) (bug 3130)

This commit is contained in:
Brian Paul 2006-10-15 22:30:35 +00:00
parent cca1a27f77
commit 80fcbca7df
4 changed files with 25 additions and 19 deletions

View file

@ -88,6 +88,11 @@ DRI_CONF_SECTION_BEGIN \
DRI_CONF_DESC(nl,"Beeldkwaliteit") \ DRI_CONF_DESC(nl,"Beeldkwaliteit") \
DRI_CONF_DESC(fr,"Qualité d'image") DRI_CONF_DESC(fr,"Qualité d'image")
#define DRI_CONF_EXCESS_MIPMAP(def) \
DRI_CONF_OPT_BEGIN(excess_mipmap,bool,def) \
DRI_CONF_DESC(en,"Enable extra mipmap level") \
DRI_CONF_OPT_END
#define DRI_CONF_TEXTURE_DEPTH_FB 0 #define DRI_CONF_TEXTURE_DEPTH_FB 0
#define DRI_CONF_TEXTURE_DEPTH_32 1 #define DRI_CONF_TEXTURE_DEPTH_32 1
#define DRI_CONF_TEXTURE_DEPTH_16 2 #define DRI_CONF_TEXTURE_DEPTH_16 2

View file

@ -481,7 +481,7 @@ viaCreateContext(const __GLcontextModes *visual,
/* Parse configuration files. /* Parse configuration files.
*/ */
driParseConfigFiles (&vmesa->optionCache, &viaScreen->optionCache, driParseConfigFiles (&vmesa->optionCache, &viaScreen->optionCache,
sPriv->myNum, "via"); sPriv->myNum, "unichrome");
/* pick back buffer */ /* pick back buffer */
vmesa->hasBack = visual->doubleBufferMode; vmesa->hasBack = visual->doubleBufferMode;
@ -558,7 +558,11 @@ viaCreateContext(const __GLcontextModes *visual,
ctx = vmesa->glCtx; ctx = vmesa->glCtx;
ctx->Const.MaxTextureLevels = 11; if (driQueryOptionb(&vmesa->optionCache, "excess_mipmap"))
ctx->Const.MaxTextureLevels = 11;
else
ctx->Const.MaxTextureLevels = 10;
ctx->Const.MaxTextureUnits = 2; ctx->Const.MaxTextureUnits = 2;
ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits; ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits;
ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits; ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits;
@ -656,20 +660,14 @@ viaCreateContext(const __GLcontextModes *visual,
VIA_DEBUG = driParseDebugString( getenv( "VIA_DEBUG" ), VIA_DEBUG = driParseDebugString( getenv( "VIA_DEBUG" ),
debug_control ); debug_control );
if (getenv("VIA_NO_RAST")) if (getenv("VIA_NO_RAST") ||
driQueryOptionb(&vmesa->optionCache, "no_rast"))
FALLBACK(vmesa, VIA_FALLBACK_USER_DISABLE, 1); FALLBACK(vmesa, VIA_FALLBACK_USER_DISABLE, 1);
/* I don't understand why this isn't working:
*/
vmesa->vblank_flags = vmesa->vblank_flags =
vmesa->viaScreen->irqEnabled ? vmesa->viaScreen->irqEnabled ?
driGetDefaultVBlankFlags(&vmesa->optionCache) : VBLANK_FLAG_NO_IRQ; driGetDefaultVBlankFlags(&vmesa->optionCache) : VBLANK_FLAG_NO_IRQ;
/* Hack this up in its place:
*/
vmesa->vblank_flags = (getenv("VIA_VSYNC") ?
VBLANK_FLAG_SYNC : VBLANK_FLAG_NO_IRQ);
if (getenv("VIA_PAGEFLIP")) if (getenv("VIA_PAGEFLIP"))
vmesa->allowPageFlip = 1; vmesa->allowPageFlip = 1;
@ -727,7 +725,9 @@ viaDestroyContext(__DRIcontextPrivate *driContextPriv)
assert (is_empty_list(&vmesa->tex_image_list[VIA_MEM_SYSTEM])); assert (is_empty_list(&vmesa->tex_image_list[VIA_MEM_SYSTEM]));
assert (is_empty_list(&vmesa->freed_tex_buffers)); assert (is_empty_list(&vmesa->freed_tex_buffers));
FREE(vmesa); driDestroyOptionCache(&vmesa->optionCache);
FREE(vmesa);
} }
} }

View file

@ -46,16 +46,16 @@
#include "GL/internal/dri_interface.h" #include "GL/internal/dri_interface.h"
#include "drirenderbuffer.h" #include "drirenderbuffer.h"
/* Radeon configuration
*/
#include "xmlpool.h" #include "xmlpool.h"
const char __driConfigOptions[] = const char __driConfigOptions[] =
DRI_CONF_BEGIN DRI_CONF_BEGIN
DRI_CONF_SECTION_PERFORMANCE DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_FTHROTTLE_MODE(DRI_CONF_FTHROTTLE_IRQS)
DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0) DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0)
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
DRI_CONF_SECTION_QUALITY
DRI_CONF_EXCESS_MIPMAP(false)
DRI_CONF_SECTION_END
DRI_CONF_SECTION_DEBUG DRI_CONF_SECTION_DEBUG
DRI_CONF_NO_RAST(false) DRI_CONF_NO_RAST(false)
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
@ -131,7 +131,6 @@ viaInitDriver(__DRIscreenPrivate *sPriv)
viaScreen->fbOffset = 0; viaScreen->fbOffset = 0;
viaScreen->fbSize = gDRIPriv->fbSize; viaScreen->fbSize = gDRIPriv->fbSize;
viaScreen->irqEnabled = gDRIPriv->irqEnabled; viaScreen->irqEnabled = gDRIPriv->irqEnabled;
viaScreen->irqEnabled = 1;
if (VIA_DEBUG & DEBUG_DRI) { if (VIA_DEBUG & DEBUG_DRI) {
fprintf(stderr, "deviceID = %08x\n", viaScreen->deviceID); fprintf(stderr, "deviceID = %08x\n", viaScreen->deviceID);
@ -201,6 +200,8 @@ viaDestroyScreen(__DRIscreenPrivate *sPriv)
via_free_empty_buffers(viaScreen->bufs); via_free_empty_buffers(viaScreen->bufs);
driDestroyOptionInfo(&viaScreen->optionCache);
FREE(viaScreen); FREE(viaScreen);
sPriv->private = NULL; sPriv->private = NULL;
} }

View file

@ -513,11 +513,11 @@ static GLboolean viaSetTexImages(GLcontext *ctx,
numLevels = lastLevel - firstLevel + 1; numLevels = lastLevel - firstLevel + 1;
/* The hardware only supports 10 mipmap levels. Ignore higher levels. /* The hardware supports only 10 mipmap levels; ignore higher levels.
*/ */
if (numLevels > 10) { if ((numLevels > 10) && (ctx->Const.MaxTextureLevels > 10)) {
lastLevel -= numLevels - 10; lastLevel -= numLevels - 10;
numLevels = 10; numLevels = 10;
} }
/* save these values, check if they effect the residency of the /* save these values, check if they effect the residency of the