diff -Naur xf86-video-nouveau-1.0.1.orig/src/nouveau_exa.c xf86-video-nouveau-1.0.1/src/nouveau_exa.c --- xf86-video-nouveau-1.0.1.orig/src/nouveau_exa.c 2012-06-19 02:01:41.000000000 +0200 +++ xf86-video-nouveau-1.0.1/src/nouveau_exa.c 2012-09-01 22:01:14.155844705 +0200 @@ -125,7 +125,7 @@ if (!width || !height) return calloc(1, sizeof(*nvpix)); - if (!pNv->exa_force_cp && pNv->dev->vram_size <= 32 * 1024 * 1024) + if (!pNv->exa_force_cp && pNv->dev->vram_size < 8*1020*1020) return NULL; nvpix = calloc(1, sizeof(*nvpix)); @@ -382,16 +382,20 @@ exa->CreatePixmap2 = nouveau_exa_create_pixmap; exa->DestroyPixmap = nouveau_exa_destroy_pixmap; - if (pNv->Architecture >= NV_ARCH_50) { - exa->maxX = 8192; - exa->maxY = 8192; + if (pNv->dev->vram_size >= 512*1020*1020) { + exa->maxX = 8190; + exa->maxY = 8190; } else - if (pNv->Architecture >= NV_ARCH_10) { - exa->maxX = 4096; - exa->maxY = 4096; + if (pNv->dev->vram_size >= 128*1020*1020) { + exa->maxX = 4094; + exa->maxY = 4094; + } else + if (pNv->dev->vram_size >= 32*1020*1020) { + exa->maxX = 2046; + exa->maxY = 2046; } else { - exa->maxX = 2048; - exa->maxY = 2048; + exa->maxX = 1022; + exa->maxY = 1022; } exa->MarkSync = nouveau_exa_mark_sync;