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