[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#599719: xserver-xorg-video-nouveau: Graphical glitches on GTX 285



On 2010-10-10 14:49 +0200, Stephan Thamm wrote:

> Package: xserver-xorg-video-nouveau
> Version: 1:0.0.16+git20100825+390f1c8-1
> Severity: important
>
>
> I am using a GeForce GTX 285 and am getting graphical glitches since I
> switched from the proprietary nvidia to nouveau. They are appearing near
> the upper left corner of my screen. I think they are related to
> off screen rendering as I sometimes see thumbnails of dolphin
> thumbnails.
>
> The glitches get mostly triggered by kde applications like dolphin and
> gwenview. I suspect they use more off screen rendering than my other
> applications.
>
> There are also some other problems:
> - Colors get corrupted. From time to time one color gets replaced by
>   another wherever it's used
> - Sometimes X freezes. First it doesn't accept any mouse clicks or
>   keyboard input, after some time not even mouse movement gets displayed
>   (can be triggered by watching HD movies for some time or heavily using
>   dolphin thumbnails)
>
> I don't know if these problems are related and might post bug reports on
> them later (when this is resolved and they still occur).
>
> The problem seems to be the same as here:
> https://bugzilla.redhat.com/show_bug.cgi?id=590216
>
> I was not able to to find the patch which solved the problem in fedora,
> they are just referring to a new version ...

I dug the patch out (attached), would you like to try it?  It might also
be a good idea to report the bug upstream at
https://bugs.freedesktop.org/ (choose Product xorg, Component
Driver/nouveau).

Cheers,
       Sven

>From bf9ee3339d5bd0258df493e766f2e6677cd4d73f Mon Sep 17 00:00:00 2001
From: Ben Skeggs <bskeggs@redhat.com>
Date: Mon, 10 May 2010 08:31:36 +1000
Subject: [PATCH] force consistant tiling mode to prevent corruption issues

---
 src/drmmode_display.c |    4 ++--
 src/nv_driver.c       |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 7867ddb..4a9daa1 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -420,7 +420,7 @@ drmmode_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
 
 	if (pNv->Architecture >= NV_ARCH_50) {
 		tile_mode = 4;
-		tile_flags = (drmmode->cpp == 2) ? 0x7000 : 0x7a00;
+		tile_flags = 0x7000; //(drmmode->cpp == 2) ? 0x7000 : 0x7a00;
 		ah = NOUVEAU_ALIGN(height, 1 << (tile_mode + 2));
 		pitch = NOUVEAU_ALIGN(width * drmmode->cpp, 64);
 	} else {
@@ -1018,7 +1018,7 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 
 	if (pNv->Architecture >= NV_ARCH_50 && pNv->wfb_enabled) {
 		tile_mode = 4;
-		tile_flags = (scrn->bitsPerPixel == 16) ? 0x7000 : 0x7a00;
+		tile_flags = 0x7000; //(scrn->bitsPerPixel == 16) ? 0x7000 : 0x7a00;
 		ah = NOUVEAU_ALIGN(height, 1 << (tile_mode + 2));
 		pitch = NOUVEAU_ALIGN(width * (scrn->bitsPerPixel >> 3), 64);
 	} else {
diff --git a/src/nv_driver.c b/src/nv_driver.c
index ca2c669..f74e415 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -838,7 +838,7 @@ NVMapMem(ScrnInfoPtr pScrn)
 	size = pScrn->displayWidth * (pScrn->bitsPerPixel >> 3);
 	if (pNv->Architecture >= NV_ARCH_50 && pNv->tiled_scanout) {
 		tile_mode = 4;
-		tile_flags = pScrn->bitsPerPixel == 16 ? 0x7000 : 0x7a00;
+		tile_flags = 0x7000; //pScrn->bitsPerPixel == 16 ? 0x7000 : 0x7a00;
 		size *= NOUVEAU_ALIGN(pScrn->virtualY, (1 << (tile_mode + 2)));
 	} else {
 		size *= pScrn->virtualY;
-- 
1.7.0.1


Reply to: