From: Michel <mi...@da...> - 2002-07-07 23:50:02
|
On Tue, 2002-07-02 at 00:32, Tim Smith wrote: > Here it is. It'll need cleaning up if it works, but it'll do as a test. Took me quite some fiddling to get it working here, but that's mostly due to the non-standard and not-quite-finished agpgart implementation for Macs. Nothing to worry about, works great now (just played a couple minutes of bzflag with it :). Comments: > + fprintf( stderr, "%s( %d )\n", __FUNCTION__, clear ); s/clear/frame/ - typo, I presume. > @@ -1189,7 +1188,11 @@ drm_buf_t *radeon_freelist_get( drm_devi > start =3D dev_priv->last_buf; > =20 > for ( t =3D 0 ; t < dev_priv->usec_timeout ; t++ ) { > + /* Testing scratch register writeback > u32 done_age =3D RADEON_READ( RADEON_LAST_DISPATCH_REG ); > + */ > + u32 done_age =3D dev_priv->scratch[1]; > + DRM_DEBUG("done_age =3D %d\n",done_age); > for ( i =3D start ; i < dma->buf_count ; i++ ) { > buf =3D dma->buflist[i]; > buf_priv =3D buf->dev_private; [...] > Index: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_= state.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux= /drm/kernel/radeon_state.c,v > retrieving revision 1.17 > diff -u -3 -p -r1.17 radeon_state.c > --- xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_sta= te.c 27 Jun 2002 17:56:39 -0000 1.17 > +++ xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_sta= te.c 1 Jul 2002 21:36:58 -0000 > @@ -1878,6 +1878,15 @@ int radeon_cp_getparam( struct inode *in > case RADEON_PARAM_AGP_BUFFER_OFFSET: > value =3D dev_priv->agp_buffers_offset; > break; > + case RADEON_PARAM_LAST_FRAME: > + value =3D dev_priv->scratch[0]; > + break; > + case RADEON_PARAM_LAST_DISPATCH: > + value =3D dev_priv->scratch[1]; > + break; > + case RADEON_PARAM_LAST_CLEAR: > + value =3D dev_priv->scratch[2]; > + break; > default: > return -EINVAL; > } The scratch register values need to be read with DRM_READ32(), which accounts both for endianness and memory barriers. So it would be u32 done_age =3D DRM_READ32(&dev_priv->scratch[1]); etc. Nice work! --=20 Earthling Michel D=E4nzer (MrCooper)/ Debian GNU/Linux (powerpc) developer XFree86 and DRI project member / CS student, Free Software enthusiast |