Mike,
Can you test whether this patch fixes your problems w/V3 in high res
modes?
If this fixes it, then I like it better than the previous one you
sent--as it addresses the root of the problem.
-- /\
Jens Owen / \/\ _
[EMAIL PROTECTED] / \ \ \ Steamboat Springs, Colorado
--- Begin Message ---
Two patches here, one is against xf-4_2-branch, one against DRI cvs
Tested with 0.38mb free texture space running q3 on highest texture
settings, which is probably the minimum you can have (as a comparison,
1280x960 leaves something like 8mb or so)
Regardless, if it hits the same problem it should exit the application
cleanly rather than hang.
Please send feedback to me or dri-devel
Thanks,
--
Michael.
Index: lib/GL/mesa/src/drv/tdfx/tdfx_texman.c
===================================================================
RCS file: /cvs/xc/lib/GL/mesa/src/drv/tdfx/tdfx_texman.c,v
retrieving revision 1.4
diff -u -3 -p -r1.4 tdfx_texman.c
--- lib/GL/mesa/src/drv/tdfx/tdfx_texman.c 2001/08/18 02:51:07 1.4
+++ lib/GL/mesa/src/drv/tdfx/tdfx_texman.c 2002/05/15 12:29:23
@@ -77,7 +77,7 @@ static void tdfxTMVerifyFreeList( tdfxCo
if ( t ) {
if ( t->isInTM ) {
numRes++;
- assert( t->range[0] );
+/* assert( t->range[0] ); */
if ( t->range[unit] )
totalUsed += (t->range[unit]->endAddr - t->range[unit]->startAddr);
} else {
@@ -112,7 +112,7 @@ static void tdfxTMDumpTexMem( tdfxContex
printf( " isInTM=%d whichTMU=%ld lastTimeUsed=%d\n",
t->isInTM, t->whichTMU, t->lastTimeUsed );
printf( " tm[0] = %p", t->range[0] );
- assert( t->range[0] );
+/* assert( t->range[0] ); */
if ( t->range[0] ) {
printf( " tm startAddr = %ld endAddr = %ld",
t->range[0]->startAddr,
@@ -389,7 +389,10 @@ tdfxTMFindOldestObject( tdfxContextPtr f
( t->whichTMU == TDFX_TMU_SPLIT ) ) ) {
GLuint age, lastTime;
- assert( t->range[0] );
+/* assert( t->range[0] );*/
+ if (! t->range[unit] ) {
+ return NULL;
+ }
lastTime = t->lastTimeUsed;
if ( lastTime > bindNumber ) {
@@ -568,6 +571,8 @@ tdfxTMAllocTexMem( tdfxContextPtr fxMesa
fprintf( stderr,
"tdfxTMAllocTexMem returned NULL! unit=%ld size=%ld\n",
unit, size );
+ UNLOCK_HARDWARE( fxMesa );
+ exit( 1 );
}
return range;
}
Index: programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c
===================================================================
RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c,v
retrieving revision 1.87
diff -u -3 -p -r1.87 tdfx_driver.c
--- programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c 2002/01/04 21:22:35
1.87
+++ programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c 2002/05/15 12:29:28
@@ -1954,8 +1954,11 @@ static void allocateMemory(ScrnInfoPtr p
/* for giggles. */
pTDFX->fbOffset = pTDFX->fifoOffset + pTDFX->fifoSize;
pTDFX->texOffset = pTDFX->fbOffset + fbSize;
+ pTDFX->texSize = pTDFX->backOffset - pTDFX->texOffset;
+
if (pTDFX->depthOffset <= pTDFX->texOffset ||
- pTDFX->backOffset <= pTDFX->texOffset) {
+ pTDFX->backOffset <= pTDFX->texOffset ||
+ pTDFX->texSize < 256*256*6) {
/*
* pTDFX->texSize < 0 means that the DRI is disabled. pTDFX->backOffset
* is used to calculate the maximum amount of memory available for
@@ -1970,7 +1973,6 @@ static void allocateMemory(ScrnInfoPtr p
"\tand/or back buffer. Disabling DRI. To use DRI try lower\n"
"\tresolution modes and/or a smaller virtual screen size\n");
} else {
- pTDFX->texSize = pTDFX->backOffset - pTDFX->texOffset;
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Textures Memory %0.02f MB\n",
(float)pTDFX->texSize/1024.0/1024.0);
}
Index: lib/GL/mesa/src/drv/tdfx/tdfx_texman.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/tdfx/tdfx_texman.c,v
retrieving revision 1.11
diff -u -3 -p -r1.11 tdfx_texman.c
--- lib/GL/mesa/src/drv/tdfx/tdfx_texman.c 14 Feb 2002 01:59:59 -0000 1.11
+++ lib/GL/mesa/src/drv/tdfx/tdfx_texman.c 14 May 2002 20:45:12 -0000
@@ -396,7 +396,9 @@ FindOldestObject(tdfxContextPtr fxMesa,
(info->whichTMU == TDFX_TMU_SPLIT))) {
GLuint age, lasttime;
- assert(info->tm[0]);
+/* assert(info->tm[0]);*/
+ if (!info->tm[tmu])
+ return NULL;
lasttime = info->lastTimeUsed;
if (lasttime > bindnumber)
@@ -625,7 +627,8 @@ AllocTexMem(tdfxContextPtr fxMesa, FxU32
sprintf(err, "AllocTexMem returned NULL! tmu=%d texmemsize=%d\n",
(int) tmu, (int) texmemsize);
_mesa_problem(fxMesa->glCtx, err);
- return NULL;
+ UNLOCK_HARDWARE( fxMesa );
+ exit(1);
}
else {
tdfxMemRange *range;
Index: programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c,v
retrieving revision 1.61
diff -u -3 -p -r1.61 tdfx_driver.c
--- programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c 27 Jan 2002 20:05:36
-0000 1.61
+++ programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c 14 May 2002 20:45:19
+-0000
@@ -1954,8 +1954,11 @@ static void allocateMemory(ScrnInfoPtr p
/* for giggles. */
pTDFX->fbOffset = pTDFX->fifoOffset + pTDFX->fifoSize;
pTDFX->texOffset = pTDFX->fbOffset + fbSize;
+ pTDFX->texSize = pTDFX->backOffset - pTDFX->texOffset;
+
if (pTDFX->depthOffset <= pTDFX->texOffset ||
- pTDFX->backOffset <= pTDFX->texOffset) {
+ pTDFX->backOffset <= pTDFX->texOffset ||
+ pTDFX->texSize < 256*256*6 ) {
/*
* pTDFX->texSize < 0 means that the DRI is disabled. pTDFX->backOffset
* is used to calculate the maximum amount of memory available for
@@ -1970,7 +1973,6 @@ static void allocateMemory(ScrnInfoPtr p
"\tand/or back buffer. Disabling DRI. To use DRI try lower\n"
"\tresolution modes and/or a smaller virtual screen size\n");
} else {
- pTDFX->texSize = pTDFX->backOffset - pTDFX->texOffset;
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Textures Memory %0.02f MB\n",
(float)pTDFX->texSize/1024.0/1024.0);
}
--- End Message ---