On Wed, Jan 23, 2002 at 07:47:12PM +0000, Keith Whitwell wrote:
> Michael wrote:
> > I got that to work. Typing from my head here, but there's an offset
> > defined RADEON_AGP_TEX_OFFSET (radeon_reg.h), that's 2mb (0x02000000?) for R128,
>that needed to be 4mb on the
> > radeon and it didn't need the 'fix AGP texture offsets' adjustment (the last #if
>0) either.
Yikes, I meant 32mb and 64mb here. Is there some way of determining
this?
> Yep - a good way of choosing which heap to use would be a worthy hack.
Ok, I'll happily do that (Do you have any other TODO things for the
radeon?)
> Have you got a patch for this?
I've attached quick hack for the agp textures. It also gets rid of a loop in
freelist_get which afaict will effectively scan through every buffer
and never find anything after they've all been used once.
It removes the call to UpdateTexLRU there as well (afaict _NEW_TEXTURE
will be set by Texture2D so it'd get called twice)
--
Michael.
Index: lib/GL/mesa/src/drv/radeon/radeon_texmem.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_texmem.c,v
retrieving revision 1.8.4.4
diff -u -3 -p -r1.8.4.4 radeon_texmem.c
--- lib/GL/mesa/src/drv/radeon/radeon_texmem.c 2001/11/07 00:47:02 1.8.4.4
+++ lib/GL/mesa/src/drv/radeon/radeon_texmem.c 2002/01/23 20:42:17
@@ -452,7 +452,7 @@ int radeonUploadTexImages( radeonContext
t->memBlock = mmAllocMem( rmesa->texture.heap[heap],
t->totalSize, 12, 0 );
-#if 0
+#if 1
/* Try AGP before kicking anything out of local mem */
if ( !t->memBlock && heap == RADEON_CARD_HEAP ) {
t->memBlock = mmAllocMem( rmesa->texture.heap[RADEON_AGP_HEAP],
@@ -479,7 +479,7 @@ int radeonUploadTexImages( radeonContext
t->totalSize );
UNLOCK_HARDWARE( rmesa );
return -1;
-#if 0
+#if 1
} else if ( heap == RADEON_CARD_HEAP ) {
heap = t->heap = RADEON_AGP_HEAP;
continue;
@@ -520,7 +520,7 @@ int radeonUploadTexImages( radeonContext
}
/* Let the world know we've used this memory recently */
- radeonUpdateTexLRU( rmesa, t );
+/* radeonUpdateTexLRU( rmesa, t ); this is done later when it's used */
/* Upload any images that are new */
if (t->dirty_images) {
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h,v
retrieving revision 1.11.2.1
diff -u -3 -p -r1.11.2.1 radeon_reg.h
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h 2001/10/30 15:13:20
1.11.2.1
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h 2002/01/23 20:42:19
@@ -1695,7 +1695,7 @@
# define RADEON_PCIGART_TRANSLATE_EN (1 << 0)
/* Constants */
-#define RADEON_AGP_TEX_OFFSET 0x02000000
+#define RADEON_AGP_TEX_OFFSET 0x04000000
#define RADEON_LAST_FRAME_REG RADEON_GUI_SCRATCH_REG0
#define RADEON_LAST_CLEAR_REG RADEON_GUI_SCRATCH_REG2
Index: programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_cp.c
===================================================================
RCS file:
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_cp.c,v
retrieving revision 1.19.2.1
diff -u -3 -p -r1.19.2.1 radeon_cp.c
--- programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_cp.c 2001/12/05
11:30:04 1.19.2.1
+++ programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_cp.c 2002/01/23
+20:42:21
@@ -1269,7 +1269,7 @@ drm_buf_t *radeon_freelist_get( drm_devi
#endif
/* FIXME: Optimize -- use freelist code */
-
+#if 0
for ( i = 0 ; i < dma->buf_count ; i++ ) {
buf = dma->buflist[i];
buf_priv = buf->dev_private;
@@ -1281,7 +1281,7 @@ drm_buf_t *radeon_freelist_get( drm_devi
DRM_DEBUG( " skipping buf=%d pid=%d\n",
buf->idx, buf->pid );
}
-
+#endif
#if ROTATE_BUFS
if ( ++dev_priv->last_buf >= dma->buf_count )
dev_priv->last_buf = 0;
@@ -1301,7 +1301,7 @@ drm_buf_t *radeon_freelist_get( drm_devi
#endif
buf = dma->buflist[i];
buf_priv = buf->dev_private;
- if ( buf->pending && buf_priv->age <= done_age ) {
+ if ( buf->pid == 0 || (buf->pending && buf_priv->age <=
+done_age )) {
/* The buffer has been processed, so it
* can now be used.
*/