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.
                                 */

Reply via email to