Using the following code in lib/GL/mesa/src/drv/radeon_ioctl.c
static int radeonWaitForFrameCompletion( radeonContextPtr rmesa )
{
unsigned char *RADEONMMIO = rmesa->radeonScreen->mmio.map;
RADEONSAREAPrivPtr sarea = rmesa->sarea;
CARD32 max_outstanding;
int wait = 0;
max_outstanding = sarea->last_frame - RADEON_MAX_OUTSTANDING;
if ( INREG( RADEON_LAST_FRAME_REG ) >= max_outstanding ) return 0;
fprintf(stderr, "Was Not Idle!\n");
while ( INREG( RADEON_LAST_FRAME_REG ) >= max_outstanding ) {
wait++;
fprintf(stderr, "Incroment %d!\n", wait);
if ( wait == 0xffff ) break;
}
fprintf(stderr, "Return %d\n", wait);
return 1;
}
During a game of quake3 I get...
Incroment 260!
Incroment 261!
Incroment 262!
Incroment 2Was Not Idle!
Return 0
Was Not Idle!
Return 0
I did remove a pause that prevented hammering the bus. I'm going to do more
testing on this with this pause back in.
This is a list of things I changed:
TCL-0-0-branch
-O3 -march=i686 -malign-functions=4 /* Taken from kernel makefile for Athlon
CPUs */
In the above code...
In the original equation:
Multiply both sides by -1 (changing the < as in algebra class)
Adding sarea->last_frame to both sides.
Moving the Right side (A constant now) ought of the loop.
Added if ( wait == 0xffff ) break;
I'll put the pause back in and see what happens :/
I have a Athlon 1700, AMD 761, 256MB DDR
ATI Radeon 7500 QW rev 0
Mode "1024x768": 94.5 MHz, 68.7 kHz, 85.0 Hz
Quake3 UrbanTerror 32bpp 32bpt Triliner... (I.E. Everything I can turn is set
to best quality)
The problem is less noticeable in vanilla quake3.
__________________________________________________
Do You Yahoo!?
LAUNCH - Your Yahoo! Music Experience
http://launch.yahoo.com
_______________________________________________________________
Hundreds of nodes, one monster rendering program.
Now that's a super model! Visit http://clustering.foundries.sf.net/
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel