Felix Kühling wrote:
> Hi,
> 
> I was able to reduce CPU usage of applications which use glFinish by
> emitting and waiting for an IRQ in radeonFinish before
> radeonWaitForIdle. I'm not sure whether radeonWaitForIdle is still
> needed after waiting for the IRQ, but keeping it does at least not hurt.
> The patch is attached.
> 
> One more thing: Since radeonWaitForFrameCompletion uses IRQs there are
> no more lag problems. Because the IRQ emit is the last thing on the ring
> all frames are finished when the IRQ is received. So checking for
> MAX_OUTSTANDING in a loop is no longer necessary in that case, right?
> 
> Best regards,
>    Felix

Felix,  I'd prefer to leave that code as it is for now.  Specifically, I'd 
like to see a situation where the irq's are used to allow at most 1 frame 
outstanding, whereas they currently allow zero, which I believe is suboptimal.

The code is a simple test of irqs & should either stay as it is, or get fixed 
properly.

I like the patch below, however.  There's no need for the WaitForIdle any 
more, I think.

Keith


>                __\|/__    ___     ___     ___
> __Tschüß_______\_6 6_/___/__ \___/__ \___/___\___You can do anything,___
> _____Felix_______\Ä/\ \_____\ \_____\ \______U___just not everything____
>   [EMAIL PROTECTED]    >o<__/   \___/   \___/        at the same time!
> 
> 
> ------------------------------------------------------------------------
> 
> Index: radeon_ioctl.c
> ===================================================================
> RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c,v
> retrieving revision 1.24
> diff -u -r1.24 radeon_ioctl.c
> --- radeon_ioctl.c    25 Sep 2002 17:20:30 -0000      1.24
> +++ radeon_ioctl.c    28 Sep 2002 13:32:57 -0000
> @@ -1090,6 +1090,29 @@
>  {
>     radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
>     radeonFlush( ctx );
> +   if (rmesa->do_irqs) {
> +      int fd = rmesa->dri.fd;
> +      int ret;
> +
> +      drmRadeonIrqEmit ie;
> +      drmRadeonIrqWait iw;
> +
> +      ie.irq_seq = &iw.irq_seq;
> +
> +      LOCK_HARDWARE( rmesa );
> +      ret = drmCommandWriteRead( fd, DRM_RADEON_IRQ_EMIT, &ie, sizeof(ie) );
> +      if ( ret ) {
> +      fprintf( stderr, "%s: drmRadeonIrqEmit: %d\n", __FUNCTION__, ret );
> +      exit(1);
> +      }
> +      UNLOCK_HARDWARE( rmesa );
> +
> +      ret = drmCommandWrite( fd, DRM_RADEON_IRQ_WAIT, &iw, sizeof(iw) );
> +      if ( ret ) {
> +      fprintf( stderr, "%s: drmRadeonIrqWait: %d\n", __FUNCTION__, ret );
> +      exit(1);
> +      }
> +   }
>     radeonWaitForIdle( rmesa );
>  }
>  
> 





-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to