rpms/xorg-x11-drv-ati/devel radeon-modeset.patch, 1.18, 1.19 xorg-x11-drv-ati.spec, 1.125, 1.126

Dave Airlie airlied at fedoraproject.org
Mon Oct 13 07:09:08 UTC 2008


Author: airlied

Update of /cvs/pkgs/rpms/xorg-x11-drv-ati/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv22176

Modified Files:
	radeon-modeset.patch xorg-x11-drv-ati.spec 
Log Message:
- radeon-modeset.patch - fix nexuiz mode switch - remove unused reuse code


radeon-modeset.patch:

Index: radeon-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/devel/radeon-modeset.patch,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- radeon-modeset.patch	10 Oct 2008 05:21:11 -0000	1.18
+++ radeon-modeset.patch	13 Oct 2008 07:08:38 -0000	1.19
@@ -1,3 +1,15 @@
+commit d8cbb2f90b4d399c1ce3ac4cfdf79894bae8d06a
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Oct 13 16:59:02 2008 +1000
+
+    radeon: fix switch mode path so nexuiz starts
+
+commit 65488679e8443cbebbd4ff9585ac34b1ae42da55
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Oct 10 15:29:24 2008 +1000
+
+    remove gem buf caching useless on radeon
+
 commit db1d00f76acdc9868546694d4f3ab3a869ad2396
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Fri Oct 10 15:18:41 2008 +1000
@@ -1907,10 +1919,10 @@
  Bool
 diff --git a/src/radeon_bufmgr.h b/src/radeon_bufmgr.h
 new file mode 100644
-index 0000000..1e93bc2
+index 0000000..e4e91f8
 --- /dev/null
 +++ b/src/radeon_bufmgr.h
-@@ -0,0 +1,29 @@
+@@ -0,0 +1,28 @@
 +/**
 + * @file intel_bufmgr.h
 + *
@@ -1938,7 +1950,6 @@
 +extern void radeon_bufmgr_exa_wait_rendering(dri_bo *bo);
 +extern dri_bo *radeon_bufmgr_exa_create_bo(dri_bufmgr *bufmgr, struct radeon_memory *mem);
 +void radeon_bufmgr_post_submit(dri_bufmgr *bufmgr);
-+void radeon_bufmgr_gem_enable_reuse(dri_bufmgr *bufmgr);
 +#endif
 diff --git a/src/radeon_bufmgr_exa.c b/src/radeon_bufmgr_exa.c
 new file mode 100644
@@ -2296,10 +2307,10 @@
 +#endif
 diff --git a/src/radeon_bufmgr_gem.c b/src/radeon_bufmgr_gem.c
 new file mode 100644
-index 0000000..10cd2a0
+index 0000000..dde1caf
 --- /dev/null
 +++ b/src/radeon_bufmgr_gem.c
-@@ -0,0 +1,573 @@
+@@ -0,0 +1,421 @@
 +/**************************************************************************
 + *
 + * Copyright © 2007-2008 Red Hat Inc.
@@ -2377,68 +2388,13 @@
 +	int in_vram; /* have we migrated this bo to VRAM ever */
 +} dri_bo_gem;
 +
-+struct dri_gem_bo_bucket {
-+   dri_bo_gem *head, **tail;
-+   /**
-+    * Limit on the number of entries in this bucket.
-+    *
-+    * 0 means that this caching at this bucket size is disabled.
-+    * -1 means that there is no limit to caching at this size.
-+    */
-+   int max_entries;
-+   int num_entries;
-+};
-+
-+/* Arbitrarily chosen, 16 means that the maximum size we'll cache for reuse
-+ * is 1 << 16 pages, or 256MB.
-+ */
-+#define RADEON_GEM_BO_BUCKETS	16
-+
 +typedef struct _dri_bufmgr_gem {
 +	dri_bufmgr bufmgr;
 +	struct radeon_bufmgr radeon_bufmgr;
 +	int fd;
 +	struct _dri_bo_gem *reloc_head;
-+	
-+	/** Array of lists of cached gem objects of power-of-two sizes */
-+	struct dri_gem_bo_bucket cache_bucket[RADEON_GEM_BO_BUCKETS];
 +} dri_bufmgr_gem;
 +
-+static int
-+logbase2(int n)
-+{
-+   int i = 1;
-+   int log2 = 0;
-+
-+   while (n > i) {
-+      i *= 2;
-+      log2++;
-+   }
-+
-+   return log2;
-+}
-+
-+static struct dri_gem_bo_bucket *
-+dri_gem_bo_bucket_for_size(dri_bufmgr_gem *bufmgr_gem, unsigned long size)
-+{
-+    int i;
-+
-+    /* We only do buckets in power of two increments */
-+    if ((size & (size - 1)) != 0)
-+	return NULL;
-+
-+    /* We should only see sizes rounded to pages. */
-+    assert((size % 4096) == 0);
-+
-+    /* We always allocate in units of pages */
-+    i = ffs(size / 4096) - 1;
-+    if (i >= RADEON_GEM_BO_BUCKETS)
-+	return NULL;
-+
-+    return &bufmgr_gem->cache_bucket[i];
-+}
-+
-+
 +static dri_bo *
 +dri_gem_bo_alloc(dri_bufmgr *bufmgr, const char *name,
 +		 unsigned long size, unsigned int alignment, uint64_t location_mask)
@@ -2449,64 +2405,24 @@
 +	int ret;
 +	unsigned int page_size = getpagesize();
 +	dri_bo_gem *gem_bo;
-+	struct dri_gem_bo_bucket *bucket;
-+	int alloc_from_cache = 0;
-+	unsigned long bo_size;
-+
-+	/* Round the allocated size up to a power of two number of pages. */
-+	bo_size = 1 << logbase2(size);
-+	if (bo_size < page_size)
-+		bo_size = page_size;
-+	bucket = dri_gem_bo_bucket_for_size(bufmgr_gem, bo_size);
-+    
-+	/* If we don't have caching at this size, don't actually round the
-+	 * allocation up.
-+	 */
-+	if (bucket == NULL || bucket->max_entries == 0) {
-+		bo_size = size;
-+		if (bo_size < page_size)
-+			bo_size = page_size;
-+	}
-+
-+	/* Get a buffer out of the cache if available */
-+	if (bucket != NULL && bucket->num_entries > 0) {
-+		struct drm_radeon_gem_set_domain args;
-+
-+		gem_bo = bucket->head;
-+		args.handle = gem_bo->gem_handle;
-+		args.read_domains = RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM;
-+		args.write_domain = 0;
-+		ret = ioctl(bufmgr_gem->fd, DRM_IOCTL_RADEON_GEM_SET_DOMAIN, &args);
-+		alloc_from_cache = (ret == 0);
-+
-+		if (alloc_from_cache) {
-+			bucket->head = gem_bo->next;
-+			if (gem_bo->next == NULL)
-+				bucket->tail = &bucket->head;
-+			bucket->num_entries--;
-+		}
-+	}
 +
-+	if (!alloc_from_cache) {
++	gem_bo = calloc(1, sizeof(*gem_bo));
++	if (!gem_bo)
++		return NULL;
 +
-+		gem_bo = calloc(1, sizeof(*gem_bo));
-+		if (!gem_bo)
-+			return NULL;
-+
-+		gem_bo->bo.size = bo_size;
-+		args.size = bo_size;
-+		args.alignment = alignment;
-+		args.initial_domain = RADEON_GEM_DOMAIN_CPU;
-+		args.no_backing_store = 0;
++	gem_bo->bo.size = size;
++	args.size = size;
++	args.alignment = alignment;
++	args.initial_domain = RADEON_GEM_DOMAIN_CPU;
++	args.no_backing_store = 0;
 +
-+		ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_CREATE, &args, sizeof(args));
-+		gem_bo->gem_handle = args.handle;
-+		if (ret != 0) {
-+			free(gem_bo);
-+			return NULL;
-+		}
-+		gem_bo->bo.bufmgr = bufmgr;
++	ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_CREATE, &args, sizeof(args));
++	gem_bo->gem_handle = args.handle;
++	if (ret != 0) {
++		free(gem_bo);
++		return NULL;
 +	}
++	gem_bo->bo.bufmgr = bufmgr;
 +
 +	gem_bo->refcount = 1;
 +	gem_bo->reloc_count = 0;
@@ -2514,8 +2430,8 @@
 +	gem_bo->in_vram = 0;
 +	gem_bo->name = name;
 +
-+	DBG("bo_create: buf %d (%s) %ldb: %d\n",
-+	    gem_bo->gem_handle, gem_bo->name, size, alloc_from_cache);
++	DBG("bo_create: buf %d (%s) %ldb\n",
++	    gem_bo->gem_handle, gem_bo->name, size);
 +
 +	return &gem_bo->bo;
 +}
@@ -2552,31 +2468,9 @@
 +		return;
 +	
 +	if (--gem_bo->refcount == 0) {
-+		struct dri_gem_bo_bucket *bucket;
-+		
-+
-+		bucket = dri_gem_bo_bucket_for_size(bufmgr_gem, bo->size);
-+		/* Put the buffer into our internal cache for reuse if we can. */
-+		if ((gem_bo->in_vram == 0) && (bucket != NULL &&
-+		    (bucket->max_entries == -1 ||
-+		     (bucket->max_entries > 0 &&
-+		      bucket->num_entries < bucket->max_entries))))
-+		{
-+			DBG("bo_unreference final: %d (%s) 1\n",
-+			    gem_bo->gem_handle, gem_bo->name);
-+		
-+			gem_bo->name = 0;
-+			
-+			gem_bo->next = NULL;
-+			*bucket->tail = gem_bo;
-+			bucket->tail = &gem_bo->next;
-+			bucket->num_entries++;
-+		} else {
-+			DBG("bo_unreference final: %d (%s) 0 - free %d\n",
-+			    gem_bo->gem_handle, gem_bo->name, gem_bo->in_vram);
-+			dri_gem_bo_free(bo);
-+		}
-+		
++		DBG("bo_unreference final: %d (%s) 0 - free %d\n",
++		    gem_bo->gem_handle, gem_bo->name, gem_bo->in_vram);
++		dri_gem_bo_free(bo);
 +		return;
 +	}
 +}
@@ -2623,20 +2517,6 @@
 +	dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bufmgr;
 +	int i;
 +
-+	/* Free any cached buffer objects we were going to reuse */
-+	for (i = 0; i < RADEON_GEM_BO_BUCKETS; i++) {
-+		struct dri_gem_bo_bucket *bucket = &bufmgr_gem->cache_bucket[i];
-+		dri_bo_gem *bo_gem;
-+
-+		while ((bo_gem = bucket->head) != NULL) {
-+			bucket->head = bo_gem->next;
-+			if (bo_gem->next == NULL)
-+				bucket->tail = &bucket->head;
-+			bucket->num_entries--;
-+			
-+			dri_gem_bo_free(&bo_gem->bo);
-+		}
-+	}
 +	free(bufmgr);
 +}
 +
@@ -2744,24 +2624,6 @@
 +	*count_p = __count;
 +}
 +
-+/**
-+ * Enables unlimited caching of buffer objects for reuse.
-+ *
-+ * This is potentially very memory expensive, as the cache at each bucket
-+ * size is only bounded by how many buffers of that size we've managed to have
-+ * in flight at once.
-+ */
-+void
-+radeon_bufmgr_gem_enable_reuse(dri_bufmgr *bufmgr)
-+{
-+    dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bufmgr;
-+    int i;
-+
-+    for (i = 0; i < RADEON_GEM_BO_BUCKETS; i++) {
-+	bufmgr_gem->cache_bucket[i].max_entries = -1;
-+    }
-+}
-+
 +static int radeon_gem_bufmgr_pin(dri_bo *bo, int domain)
 +{
 +	dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)bo->bufmgr;
@@ -2828,9 +2690,6 @@
 +	//bufmgr_gem->bufmgr.bo_wait_rendering = radeon_bufmgr_gem_wait_rendering;
 +	bufmgr_gem->radeon_bufmgr.emit_reloc = radeon_bufmgr_gem_emit_reloc;
 +	bufmgr_gem->bufmgr.get_handle = radeon_gem_bufmgr_get_handle;
-+	/* Initialize the linked lists for BO reuse cache. */
-+	for (i = 0; i < RADEON_GEM_BO_BUCKETS; i++)
-+		bufmgr_gem->cache_bucket[i].tail = &bufmgr_gem->cache_bucket[i].head;
 +	bufmgr_gem->bufmgr.debug = 0;
 +	return &bufmgr_gem->bufmgr;
 +}
@@ -4173,7 +4032,7 @@
 +
 +#endif
 diff --git a/src/radeon_driver.c b/src/radeon_driver.c
-index c759bd6..239eb63 100644
+index c759bd6..46fa59a 100644
 --- a/src/radeon_driver.c
 +++ b/src/radeon_driver.c
 @@ -224,7 +224,10 @@ radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
@@ -4760,14 +4619,19 @@
 +	}
 +	
 +	ErrorF("after xf86InitialConfiguration\n");
-+
+ 
+-    ErrorF("before xf86InitialConfiguration\n");
 +    } else {
 +#ifdef XF86DRM_MODE
 +	char *bus_id;
 +   	 if (!radeon_alloc_dri(pScrn))
 +		return FALSE;
  
--    ErrorF("before xf86InitialConfiguration\n");
+-    if (!xf86InitialConfiguration (pScrn, FALSE))
+-   {
+-      xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
+-      goto fail;
+-   }
 +	bus_id = DRICreatePCIBusID(info->PciInfo);
 +	if (drmmode_pre_init(pScrn, &info->drmmode, bus_id, "radeon", pScrn->bitsPerPixel / 8) == FALSE) {
 +	    xfree(bus_id);
@@ -4775,11 +4639,7 @@
 +	    goto fail;
 +	}
  
--    if (!xf86InitialConfiguration (pScrn, FALSE))
--   {
--      xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
--      goto fail;
--   }
+-    ErrorF("after xf86InitialConfiguration\n");
 +	info->drmmode.create_new_fb = radeon_create_new_fb;
 +	info->dri->drmFD = info->drmmode.fd;
 +	xfree(bus_id);
@@ -4799,8 +4659,7 @@
 +	    {
 +	        struct drm_radeon_getparam gp;
 +		int value;
- 
--    ErrorF("after xf86InitialConfiguration\n");
++
 +		memset(&gp, 0, sizeof(gp));
 +		gp.param = RADEON_PARAM_FB_LOCATION;
 +		gp.value = &value;
@@ -5123,7 +4982,55 @@
  
      /* set the modes with desired rotation, etc. */
      if (!xf86SetDesiredModes (pScrn))
-@@ -5375,6 +5542,11 @@ void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)
+@@ -5133,7 +5300,7 @@ Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+ #ifdef XF86DRI
+     Bool           CPStarted   = info->cp->CPStarted;
+ 
+-    if (CPStarted) {
++    if (CPStarted && !info->drm_mode_setting) {
+ 	DRILock(pScrn->pScreen, 0);
+ 	RADEONCP_STOP(pScrn, info);
+     }
+@@ -5156,8 +5323,10 @@ Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+ #endif
+     }
+ 
+-    if (info->accelOn)
+-        RADEON_SYNC(info, pScrn);
++    if (!info->drm_mode_setting) {
++    	if (info->accelOn)
++       	    RADEON_SYNC(info, pScrn);
++    }
+ 
+     ret = xf86SetSingleMode (pScrn, mode, RR_Rotate_0);
+ 
+@@ -5169,15 +5338,18 @@ Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+ 	/* xf86SetRootClip would do, but can't access that here */
+     }
+ 
+-    if (info->accelOn) {
+-        RADEON_SYNC(info, pScrn);
+-	RADEONEngineRestore(pScrn);
+-    }
++    if (!info->drm_mode_setting)
++        if (info->accelOn) {
++           RADEON_SYNC(info, pScrn);
++	   RADEONEngineRestore(pScrn);
++        }
+ 
+ #ifdef XF86DRI
+-    if (CPStarted) {
+-	RADEONCP_START(pScrn, info);
+-	DRIUnlock(pScrn->pScreen);
++    if (!info->drm_mode_setting) {
++    	if (CPStarted) {
++		RADEONCP_START(pScrn, info);
++		DRIUnlock(pScrn->pScreen);
++    	}
+     }
+ #endif
+ 
+@@ -5375,6 +5547,11 @@ void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)
      xf86OutputPtr  output = config->output[config->compat_output];
      xf86CrtcPtr	crtc = output->crtc;
  
@@ -5135,7 +5042,7 @@
  #ifdef XF86DRI
      if (info->cp->CPStarted && pScrn->pScreen) DRILock(pScrn->pScreen, 0);
  #endif
-@@ -5410,67 +5582,79 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
+@@ -5410,67 +5587,79 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
  		   "RADEONEnterVT\n");
  
@@ -5260,7 +5167,7 @@
      }
  #endif
      /* this will get XVideo going again, but only if XVideo was initialised
-@@ -5482,7 +5666,7 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
+@@ -5482,7 +5671,7 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
  	RADEONEngineRestore(pScrn);
  
  #ifdef XF86DRI
@@ -5269,7 +5176,7 @@
  	RADEONCP_START(pScrn, info);
  	DRIUnlock(pScrn->pScreen);
      }
-@@ -5505,17 +5689,18 @@ void RADEONLeaveVT(int scrnIndex, int flags)
+@@ -5505,17 +5694,18 @@ void RADEONLeaveVT(int scrnIndex, int flags)
  		   "RADEONLeaveVT\n");
  #ifdef XF86DRI
      if (RADEONPTR(pScrn)->directRenderingInited) {
@@ -5299,7 +5206,7 @@
  
  	/* Make sure 3D clients will re-upload textures to video RAM */
  	if (info->dri->textureSize) {
-@@ -5551,10 +5736,15 @@ void RADEONLeaveVT(int scrnIndex, int flags)
+@@ -5551,10 +5741,15 @@ void RADEONLeaveVT(int scrnIndex, int flags)
  
      xf86_hide_cursors (pScrn);
  
@@ -5318,7 +5225,7 @@
  
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
  		   "Ok, leaving now...\n");
-@@ -5599,7 +5789,8 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
+@@ -5599,7 +5794,8 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
  #endif /* USE_XAA */
  
      if (pScrn->vtSema) {
@@ -5328,7 +5235,7 @@
      }
  
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
-@@ -5634,6 +5825,12 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
+@@ -5634,6 +5830,12 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
      info->DGAModes = NULL;
      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
  		   "Unmapping memory\n");


Index: xorg-x11-drv-ati.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/devel/xorg-x11-drv-ati.spec,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -r1.125 -r1.126
--- xorg-x11-drv-ati.spec	10 Oct 2008 05:21:11 -0000	1.125
+++ xorg-x11-drv-ati.spec	13 Oct 2008 07:08:38 -0000	1.126
@@ -5,7 +5,7 @@
 Summary:   Xorg X11 ati video driver
 Name:      xorg-x11-drv-ati
 Version:   6.9.0
-Release:   25%{?dist}
+Release:   26%{?dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X Hardware Support
@@ -72,6 +72,9 @@
 %{_mandir}/man4/radeon.4*
 
 %changelog
+* Mon Oct 13 2008 Dave Airlie <airlied at redhat.com> 6.9.0-26
+- radeon-modeset.patch - fix nexuiz mode switch - remove unused reuse code
+
 * Fri Oct 10 2008 Dave Airlie <airlied at redhat.com> 6.9.0-25
 - fix rotation
 - make output names compatible with non-kms




More information about the fedora-extras-commits mailing list