summaryrefslogtreecommitdiff
path: root/xc/extras/Mesa/src/FX/fxtexman.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/extras/Mesa/src/FX/fxtexman.c')
-rw-r--r--xc/extras/Mesa/src/FX/fxtexman.c51
1 files changed, 34 insertions, 17 deletions
diff --git a/xc/extras/Mesa/src/FX/fxtexman.c b/xc/extras/Mesa/src/FX/fxtexman.c
index 770f095ab..285045de3 100644
--- a/xc/extras/Mesa/src/FX/fxtexman.c
+++ b/xc/extras/Mesa/src/FX/fxtexman.c
@@ -60,24 +60,38 @@ static struct gl_texture_object *fxTMFindOldestObject(fxMesaContext fxMesa,
int tmu);
-#if 0
+#ifdef TEXSANITY
static void fubar()
{
}
/* Sanity Check */
-static void sanity(fxMesaContext fxMesa, int tmu)
+static void sanity(fxMesaContext fxMesa)
{
- MemRange *tmp, *prev;
- int i;
+ MemRange *tmp, *prev, *pos;
prev=0;
- tmp = fxMesa->tmFree[tmu];
- i=0;
+ tmp = fxMesa->tmFree[0];
+ while (tmp) {
+ if (!tmp->startAddr && !tmp->endAddr) {
+ fprintf(stderr, "Textures fubar\n");
+ fubar();
+ }
+ if (tmp->startAddr>=tmp->endAddr) {
+ fprintf(stderr, "Node fubar\n");
+ fubar();
+ }
+ if (prev && (prev->startAddr>=tmp->startAddr ||
+ prev->endAddr>tmp->startAddr)) {
+ fprintf(stderr, "Sorting fubar\n");
+ fubar();
+ }
+ prev=tmp;
+ tmp=tmp->next;
+ }
+ prev=0;
+ tmp = fxMesa->tmFree[1];
while (tmp) {
- fprintf(stderr, "TMU %d Sanity %d %d-%d\n", tmu, i,
- tmp->startAddr, tmp->endAddr);
- i++;
if (!tmp->startAddr && !tmp->endAddr) {
fprintf(stderr, "Textures fubar\n");
fubar();
@@ -87,7 +101,7 @@ static void sanity(fxMesaContext fxMesa, int tmu)
fubar();
}
if (prev && (prev->startAddr>=tmp->startAddr ||
- prev->endAddr>=tmp->startAddr)) {
+ prev->endAddr>tmp->startAddr)) {
fprintf(stderr, "Sorting fubar\n");
fubar();
}
@@ -128,13 +142,12 @@ static void fxTMUInit(fxMesaContext fxMesa, int tmu)
start=FX_grTexMinAddress(tmu);
end=FX_grTexMaxAddress(tmu);
- fxMesa->texStart[tmu]=start;
if(fxMesa->verbose) {
fprintf(stderr,"%s configuration:",(tmu==FX_TMU0) ? "TMU0" : "TMU1");
fprintf(stderr," Lower texture memory address (%u)\n",(unsigned int)start);
fprintf(stderr," Higher texture memory address (%u)\n",(unsigned int)end);
- fprintf(stderr," Splitting Texture memory in 2Mb blocks:\n");
+ fprintf(stderr," Splitting Texture memory in 2b blocks:\n");
}
fxMesa->freeTexMem[tmu]=end-start;
@@ -182,6 +195,7 @@ static int fxTMFindStartAddr(fxMesaContext fxMesa, GLint tmu, int size)
}
fxTMDeleteRangeNode(fxMesa, tmp);
}
+ fxMesa->freeTexMem[tmu]-=size;
return result;
}
prev=tmp;
@@ -199,12 +213,13 @@ static int fxTMFindStartAddr(fxMesaContext fxMesa, GLint tmu, int size)
static void fxTMRemoveRange(fxMesaContext fxMesa, GLint tmu, MemRange *range)
{
- MemRange *tmp, *prev, *next;
+ MemRange *tmp, *prev;
if (range->startAddr==range->endAddr) {
fxTMDeleteRangeNode(fxMesa, range);
return;
}
+ fxMesa->freeTexMem[tmu]+=range->endAddr-range->startAddr;
prev=0;
tmp=fxMesa->tmFree[tmu];
while (tmp) {
@@ -554,6 +569,7 @@ void fxTMFreeTexture(fxMesaContext fxMesa, struct gl_texture_object *tObj)
}
switch (ti->whichTMU) {
case FX_TMU0:
+ case FX_TMU1:
fxTMDeleteRangeNode(fxMesa, ti->tm[ti->whichTMU]);
break;
case FX_TMU_SPLIT:
@@ -566,12 +582,13 @@ void fxTMFreeTexture(fxMesaContext fxMesa, struct gl_texture_object *tObj)
void fxTMInit(fxMesaContext fxMesa)
{
+ fxMesa->texBindNumber=0;
+ fxMesa->tmPool=0;
+
fxTMUInit(fxMesa,FX_TMU0);
if(fxMesa->haveTwoTMUs)
fxTMUInit(fxMesa,FX_TMU1);
-
- fxMesa->texBindNumber=0;
}
void fxTMClose(fxMesaContext fxMesa)
@@ -641,7 +658,7 @@ void fxTMRestore_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
for (i=FX_largeLodValue_NoLock(ti->info),l=ti->minLevel;
i<=FX_smallLodValue_NoLock(ti->info);
i++,l++) {
- if (ti->mipmapLevel[l].data)
+ if (ti->mipmapLevel[l].data) {
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU0,
ti->tm[FX_TMU0]->startAddr,
FX_valueToLod(i),
@@ -650,7 +667,6 @@ void fxTMRestore_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
ti->info.format,
GR_MIPMAPLEVELMASK_ODD,
ti->mipmapLevel[l].data);
- if (ti->mipmapLevel[l].data)
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU1,
ti->tm[FX_TMU1]->startAddr,
FX_valueToLod(i),
@@ -659,6 +675,7 @@ void fxTMRestore_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
ti->info.format,
GR_MIPMAPLEVELMASK_EVEN,
ti->mipmapLevel[l].data);
+ }
}
break;
default: