From: Mike M. <che...@ya...> - 2002-05-20 06:20:53
|
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 |