summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/savage/savage_xmesa.c31
-rw-r--r--src/mesa/drivers/dri/savage/savagedd.c2
-rw-r--r--src/mesa/drivers/dri/savage/savagetex.c2
3 files changed, 21 insertions, 14 deletions
diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c
index a4000b2a75a..b3cf3a9982e 100644
--- a/src/mesa/drivers/dri/savage/savage_xmesa.c
+++ b/src/mesa/drivers/dri/savage/savage_xmesa.c
@@ -176,15 +176,17 @@ savageInitDriver(__DRIscreenPrivate *sPriv)
savageScreen->agpTextures.handle = gDRIPriv->agpTextureHandle;
savageScreen->agpTextures.size = gDRIPriv->agpTextureSize;
- if (drmMap(sPriv->fd,
- savageScreen->agpTextures.handle,
- savageScreen->agpTextures.size,
- (drmAddress *)&(savageScreen->agpTextures.map)) != 0)
- {
- Xfree(savageScreen);
- sPriv->private = NULL;
- return GL_FALSE;
- }
+ if (gDRIPriv->agpTextureSize) {
+ if (drmMap(sPriv->fd,
+ savageScreen->agpTextures.handle,
+ savageScreen->agpTextures.size,
+ (drmAddress *)&(savageScreen->agpTextures.map)) != 0) {
+ Xfree(savageScreen);
+ sPriv->private = NULL;
+ return GL_FALSE;
+ }
+ } else
+ savageScreen->agpTextures.map = NULL;
savageScreen->texVirtual[SAVAGE_CARD_HEAP] =
(drmAddress)(((unsigned int)sPriv->pFB)+gDRIPriv->textureOffset);
@@ -361,7 +363,12 @@ savageCreateContext( const __GLcontextModes *mesaVis,
break;
}
ctx->Const.MaxTextureLevels = maxTextureLevels;
- assert (ctx->Const.MaxTextureLevels > 6); /*spec requires at least 64x64*/
+ if (ctx->Const.MaxTextureLevels <= 6) { /*spec requires at least 64x64*/
+ __driUtilMessage("Not enough texture memory. "
+ "Falling back to indirect rendering.");
+ Xfree(imesa);
+ return GL_FALSE;
+ }
#if 0
ctx->Const.MinLineWidth = 1.0;
@@ -401,7 +408,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
{
int i;
- for(i=0;i<SAVAGE_NR_TEX_HEAPS;i++)
+ for(i=0;i<imesa->lastTexHeap;i++)
{
imesa->texHeap[i] = mmInit( 0, savageScreen->textureSize[i] );
make_empty_list(&imesa->TexObjList[i]);
@@ -503,7 +510,7 @@ savageDestroyContext(__DRIcontextPrivate *driContextPriv)
/* update for multi-tex*/
{
int i;
- for(i=0;i<SAVAGE_NR_TEX_HEAPS;i++)
+ for(i=0;i<imesa->lastTexHeap;i++)
foreach_s (t, next_t, &(imesa->TexObjList[i]))
savageDestroyTexObj(imesa, t);
}
diff --git a/src/mesa/drivers/dri/savage/savagedd.c b/src/mesa/drivers/dri/savage/savagedd.c
index 312f6f62f48..1878bef524c 100644
--- a/src/mesa/drivers/dri/savage/savagedd.c
+++ b/src/mesa/drivers/dri/savage/savagedd.c
@@ -41,7 +41,7 @@
#include "utils.h"
-#define DRIVER_DATE "20050101"
+#define DRIVER_DATE "20050110"
/***************************************
* Mesa's Driver Functions
diff --git a/src/mesa/drivers/dri/savage/savagetex.c b/src/mesa/drivers/dri/savage/savagetex.c
index 2650f66e462..62031f76c3b 100644
--- a/src/mesa/drivers/dri/savage/savagetex.c
+++ b/src/mesa/drivers/dri/savage/savagetex.c
@@ -760,7 +760,7 @@ int savageUploadTexImages( savageContextPtr imesa, savageTextureObjectPtr t )
t->MemBlock = mmAllocMem( imesa->texHeap[heap], t->totalSize, 12, 0 );
if (t->MemBlock)
break;
- else
+ else if (imesa->lastTexHeap == 2)
{
heap = t->heap = SAVAGE_AGP_HEAP;
t->MemBlock = mmAllocMem( imesa->texHeap[heap], t->totalSize, 12, 0 );