rpms/xorg-x11-drv-nouveau/F-13 nouveau-exa-no-pa_fa.patch, NONE, 1.1 nouveau-server-regen.patch, NONE, 1.1 nouveau-zfill-fallback.patch, NONE, 1.1 xorg-x11-drv-nouveau.spec, 1.71, 1.72

Ben Skeggs bskeggs at fedoraproject.org
Sat Jun 26 01:26:40 UTC 2010


Author: bskeggs

Update of /cvs/pkgs/rpms/xorg-x11-drv-nouveau/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv5178

Modified Files:
	xorg-x11-drv-nouveau.spec 
Added Files:
	nouveau-exa-no-pa_fa.patch nouveau-server-regen.patch 
	nouveau-zfill-fallback.patch 
Log Message:
* Sat Jun 26 2010 Ben Skeggs <bskeggs at redhat.com> 0.0.16-7.20100423git13c1043
- disable wfb usage, fixes certain slowdowns and corruption (rh#596393)
- zfill framebuffer if we can't properly transition for any reason (rh#582489)
- fix server regeneration



nouveau-exa-no-pa_fa.patch:
 drmmode_display.c |    2 +-
 nouveau_exa.c     |    5 +++++
 nv_driver.c       |    2 +-
 3 files changed, 7 insertions(+), 2 deletions(-)

--- NEW FILE nouveau-exa-no-pa_fa.patch ---
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 7867ddb..56dc93a 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1016,7 +1016,7 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 	if (scrn->virtualX == width && scrn->virtualY == height)
 		return TRUE;
 
-	if (pNv->Architecture >= NV_ARCH_50 && pNv->wfb_enabled) {
+	if (pNv->Architecture >= NV_ARCH_50 && pNv->tiled_scanout) {
 		tile_mode = 4;
 		tile_flags = 0x7000; //(scrn->bitsPerPixel == 16) ? 0x7000 : 0x7a00;
 		ah = NOUVEAU_ALIGN(height, 1 << (tile_mode + 2));
diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
index 964bc73..ab86251 100644
--- a/src/nouveau_exa.c
+++ b/src/nouveau_exa.c
@@ -290,8 +290,13 @@ nouveau_exa_wait_marker(ScreenPtr pScreen, int marker)
 static Bool
 nouveau_exa_prepare_access(PixmapPtr ppix, int index)
 {
+	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
 
+	if (pNv->Architecture >= NV_ARCH_50 && !pNv->wfb_enabled)
+		return FALSE;
+
 	if (nouveau_bo_map(bo, NOUVEAU_BO_RDWR))
 		return FALSE;
 	ppix->devPrivate.ptr = bo->map;
diff --git a/src/nv_driver.c b/src/nv_driver.c
index f60b6d9..cb842e2 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -757,7 +757,7 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
 	}
 
 	if (!pNv->NoAccel && pNv->Architecture >= NV_ARCH_50) {
-		pNv->wfb_enabled = TRUE;
+		pNv->wfb_enabled = FALSE; /* UTS/DFS instead */
 		pNv->tiled_scanout = TRUE;
 	}
 

nouveau-server-regen.patch:
 nv_driver.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- NEW FILE nouveau-server-regen.patch ---
diff --git a/src/nv_driver.c b/src/nv_driver.c
index a0483df..0abe400 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -389,6 +389,10 @@ NVCreateScreenResources(ScreenPtr pScreen)
 		return FALSE;
 	pScreen->CreateScreenResources = NVCreateScreenResources;
 
+	drmmode_fbcon_copy(pScreen);
+	if (!NVEnterVT(pScrn->scrnIndex, 0))
+		return FALSE;
+
 	if (!pNv->NoAccel) {
 		ppix = pScreen->GetScreenPixmap(pScreen);
 		nouveau_bo_ref(pNv->scanout, &nouveau_pixmap(ppix)->bo);
@@ -1138,10 +1142,6 @@ NVScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	pNv->BlockHandler = pScreen->BlockHandler;
 	pScreen->BlockHandler = NVBlockHandler;
 
-	drmmode_fbcon_copy(pScreen);
-
-	if (!NVEnterVT(pScrn->scrnIndex, 0))
-		return FALSE;
 	pScrn->vtSema = TRUE;
 	pScrn->pScreen = pScreen;
 

nouveau-zfill-fallback.patch:
 drmmode_display.c |   35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

--- NEW FILE nouveau-zfill-fallback.patch ---
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 7867ddb..399e7f2 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -178,13 +178,8 @@ drmmode_fbcon_copy(ScreenPtr pScreen)
 	unsigned w = pScrn->virtualX, h = pScrn->virtualY;
 	int i, ret, fbcon_id = 0;
 
-	if (pNv->NoAccel) {
-		if (nouveau_bo_map(pNv->scanout, NOUVEAU_BO_WR))
-			return;
-		memset(pNv->scanout->map, 0x00, pNv->scanout->size);
-		nouveau_bo_unmap(pNv->scanout);
-		return;
-	}
+	if (pNv->NoAccel)
+		goto fallback;
 
 	for (i = 0; i < xf86_config->num_crtc; i++) {
 		drmmode_crtc_private_ptr drmmode_crtc =
@@ -195,32 +190,27 @@ drmmode_fbcon_copy(ScreenPtr pScreen)
 	}
 
 	if (!fbcon_id)
-		return;
+		goto fallback;
 
 	fb = drmModeGetFB(nouveau_device(pNv->dev)->fd, fbcon_id);
 	if (!fb) {
 		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			   "Failed to retrieve fbcon fb: id %d\n", fbcon_id);
-		return;
+		goto fallback;
 	}
 
-	if (fb->depth != pScrn->depth) {
+	if (fb->depth != pScrn->depth || fb->width != w || fb->height != h) {
 		drmFree(fb);
-		return;
+		goto fallback;
 	}
 
-	if (w > fb->width)
-		w = fb->width;
-	if (h > fb->height)
-		h = fb->height;
-
 	ret = nouveau_bo_wrap(pNv->dev, fb->handle, &bo);
 	if (ret) {
 		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			   "Failed to retrieve fbcon buffer: handle=0x%08x\n",
 			   fb->handle);
 		drmFree(fb);
-		return;
+		goto fallback;
 	}
 
 	pspix = drmmode_pixmap_wrap(pScreen, fb->width, fb->height,
@@ -230,7 +220,7 @@ drmmode_fbcon_copy(ScreenPtr pScreen)
 	if (!pspix) {
 		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			   "Failed to create pixmap for fbcon contents\n");
-		return;
+		goto fallback;
 	}
 
 	pdpix = drmmode_pixmap_wrap(pScreen, pScrn->virtualX,
@@ -241,7 +231,7 @@ drmmode_fbcon_copy(ScreenPtr pScreen)
 		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			   "Failed to init scanout pixmap for fbcon mirror\n");
 		pScreen->DestroyPixmap(pspix);
-		return;
+		goto fallback;
 	}
 
 	exa->PrepareCopy(pspix, pdpix, 0, 0, GXcopy, ~0);
@@ -257,6 +247,13 @@ drmmode_fbcon_copy(ScreenPtr pScreen)
 
 	pScreen->DestroyPixmap(pdpix);
 	pScreen->DestroyPixmap(pspix);
+	return;
+
+fallback:
+	if (nouveau_bo_map(pNv->scanout, NOUVEAU_BO_WR))
+		return;
+	memset(pNv->scanout->map, 0x00, pNv->scanout->size);
+	nouveau_bo_unmap(pNv->scanout);
 }
 
 static Bool


Index: xorg-x11-drv-nouveau.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-nouveau/F-13/xorg-x11-drv-nouveau.spec,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -p -r1.71 -r1.72
--- xorg-x11-drv-nouveau.spec	12 May 2010 23:27:53 -0000	1.71
+++ xorg-x11-drv-nouveau.spec	26 Jun 2010 01:26:40 -0000	1.72
@@ -19,7 +19,7 @@ Name:      xorg-x11-drv-nouveau
 # need to set an epoch to get version number in sync with upstream
 Epoch:     1
 Version:   %{nouveau_version}
-Release:   6.%{snapshot}%{?dist}
+Release:   7.%{snapshot}%{?dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X Hardware Support
@@ -45,6 +45,9 @@ Requires:  libudev
 Patch0: nouveau-bgnr.patch
 Patch1: nouveau-nva0-corruption-fix.patch
 Patch2: nouveau-no-outputs.patch
+Patch3: nouveau-exa-no-pa_fa.patch
+Patch4: nouveau-zfill-fallback.patch
+Patch5: nouveau-server-regen.patch
 
 %description 
 X.Org X11 nouveau video driver.
@@ -55,6 +58,9 @@ X.Org X11 nouveau video driver.
 %patch0 -p1 -b .bgnr
 %patch1 -p1 -b .tile7000
 %patch2 -p1 -b .no-outputs
+%patch3 -p1 -b .no_wfb
+%patch4 -p1 -b .zfill
+%patch5 -p1 -b .regen
 
 %build
 autoreconf -v --install
@@ -78,6 +84,11 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man4/nouveau.4*
 
 %changelog
+* Sat Jun 26 2010 Ben Skeggs <bskeggs at redhat.com> 0.0.16-7.20100423git13c1043
+- disable wfb usage, fixes certain slowdowns and corruption (rh#596393)
+- zfill framebuffer if we can't properly transition for any reason (rh#582489)
+- fix server regeneration
+
 * Thu May 13 2010 Ben Skeggs <bskeggs at redhat.com> 0.0.16-6.20100423git13c1043
 - fix Requires: libudev-devel -> libudev
 



More information about the scm-commits mailing list