debian/changelog | 18 + debian/patches/101-git-a80785f792.diff | 477 +++++++++++++++++++++++++++++++++ debian/patches/series | 1 3 files changed, 496 insertions(+)
New commits: commit 43a56f086be3d11452dddf69be3c259e04f2c5b7 Author: Maarten Lankhorst <[email protected]> Date: Tue Feb 19 17:39:21 2013 +0100 Remove individual cherry-picked commits, and sync to git a80785f792 to pick up some fixes. Mostly import for fixes to reverse prime support. diff --git a/debian/changelog b/debian/changelog index edcddf8..f30ada1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,12 @@ -xserver-xorg-video-nouveau (1:1.0.6-0ubuntu2) UNRELEASED; urgency=low +xserver-xorg-video-nouveau (1:1.0.6-0ubuntu3) raring; urgency=low + + * Remove individual patches, sync to git a80785f792 to pick up some fixes. + - Mostly import for fixes to reverse prime support. + * This hopefully fixes (LP: #1124693) + + -- Maarten Lankhorst <[email protected]> Tue, 19 Feb 2013 17:34:52 +0100 + +xserver-xorg-video-nouveau (1:1.0.6-0ubuntu2) raring; urgency=low * Cherry-pick upstream patches to sync with git 58284cf32 - 101-gart-cursor.patch diff --git a/debian/patches/101-gart-cursor.patch b/debian/patches/101-gart-cursor.patch deleted file mode 100644 index b246931..0000000 --- a/debian/patches/101-gart-cursor.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 912d418fdfd2e99eef1e5c631c76dda1d82cf451 -Author: Marcin Slusarz <[email protected]> -Date: Mon Jan 21 00:15:38 2013 +0100 - - nouveau: put cursor BO in GART - - Keeping it in VRAM wastes CPU time, because cursor_set ioctl reads - handed BO back to RAM, just to write it to actual cursor BO. - - Here (nv92/core i7), this patch decreases overall cpu usage of - drmmode_load_cursor_argb from 4.6ms to ~90us and lets nv50_crtc_cursor_set - disappear from perf traces. - - Signed-off-by: Ben Skeggs <[email protected]> - -diff --git a/src/drmmode_display.c b/src/drmmode_display.c -index 429e9cc..06f7a24 100644 ---- a/src/drmmode_display.c -+++ b/src/drmmode_display.c -@@ -567,7 +567,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num) - drmmode->mode_res->crtcs[num]); - drmmode_crtc->drmmode = drmmode; - -- ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_VRAM | NOUVEAU_BO_MAP, 0, -+ ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, - 64*64*4, NULL, &drmmode_crtc->cursor); - assert(ret == 0); - diff --git a/debian/patches/101-git-a80785f792.diff b/debian/patches/101-git-a80785f792.diff new file mode 100644 index 0000000..80aaf90 --- /dev/null +++ b/debian/patches/101-git-a80785f792.diff @@ -0,0 +1,477 @@ +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index 429e9cc..9eca60f 100644 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c +@@ -42,6 +42,7 @@ + #include "libudev.h" + #endif + ++static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height); + typedef struct { + int fd; + uint32_t fb_id; +@@ -345,6 +346,11 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode, + drmmode_ConvertToKMode(crtc->scrn, &kmode, mode); + + fb_id = drmmode->fb_id; ++#ifdef NOUVEAU_PIXMAP_SHARING ++ if (crtc->randr_crtc->scanout_pixmap) ++ x = y = 0; ++ else ++#endif + if (drmmode_crtc->rotate_fb_id) { + fb_id = drmmode_crtc->rotate_fb_id; + x = 0; +@@ -536,6 +542,35 @@ drmmode_gamma_set(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, + } + } + ++#ifdef NOUVEAU_PIXMAP_SHARING ++static Bool ++drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix) ++{ ++ ScreenPtr screen = xf86ScrnToScreen(crtc->scrn); ++ PixmapPtr screenpix = screen->GetScreenPixmap(screen); ++ ++ if (!ppix) { ++ if (crtc->randr_crtc->scanout_pixmap) ++ PixmapStopDirtyTracking(crtc->randr_crtc->scanout_pixmap, screenpix); ++ return TRUE; ++ } ++ ++ if (ppix->drawable.width > screenpix->drawable.width || ++ ppix->drawable.height > screenpix->drawable.height) { ++ Bool ret; ++ ret = drmmode_xf86crtc_resize(crtc->scrn, ppix->drawable.width, ppix->drawable.height); ++ if (ret == FALSE) ++ return FALSE; ++ ++ screenpix = screen->GetScreenPixmap(screen); ++ screen->width = screenpix->drawable.width = ppix->drawable.width; ++ screen->height = screenpix->drawable.height = ppix->drawable.height; ++ } ++ PixmapStartDirtyTracking(ppix, screenpix, 0, 0); ++ return TRUE; ++} ++#endif ++ + static const xf86CrtcFuncsRec drmmode_crtc_funcs = { + .dpms = drmmode_crtc_dpms, + .set_mode_major = drmmode_set_mode_major, +@@ -547,6 +582,10 @@ static const xf86CrtcFuncsRec drmmode_crtc_funcs = { + .shadow_allocate = drmmode_crtc_shadow_allocate, + .shadow_destroy = drmmode_crtc_shadow_destroy, + .gamma_set = drmmode_gamma_set, ++ ++#ifdef NOUVEAU_PIXMAP_SHARING ++ .set_scanout_pixmap = drmmode_set_scanout_pixmap, ++#endif + }; + + +@@ -567,7 +606,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num) + drmmode->mode_res->crtcs[num]); + drmmode_crtc->drmmode = drmmode; + +- ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_VRAM | NOUVEAU_BO_MAP, 0, ++ ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, + 64*64*4, NULL, &drmmode_crtc->cursor); + assert(ret == 0); + +diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c +index 036bcff..e462a86 100644 +--- a/src/nouveau_dri2.c ++++ b/src/nouveau_dri2.c +@@ -134,6 +134,7 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio + { + struct nouveau_dri2_buffer *src = nouveau_dri2_buffer(pSrcBuffer); + struct nouveau_dri2_buffer *dst = nouveau_dri2_buffer(pDstBuffer); ++ NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen)); + RegionPtr pCopyClip; + GCPtr pGC; + DrawablePtr src_draw, dst_draw; +@@ -178,6 +179,23 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio + } + pGC->funcs->ChangeClip(pGC, CT_REGION, pCopyClip, 0); + ValidateGC(dst_draw, pGC); ++ ++ /* If this is a full buffer swap or frontbuffer flush, throttle on ++ * the previous one. ++ */ ++ if (dst->base.attachment == DRI2BufferFrontLeft && ++ REGION_NUM_RECTS(pRegion) == 1) { ++ BoxPtr extents = REGION_EXTENTS(pScreen, pRegion); ++ if (extents->x1 == 0 && extents->y1 == 0 && ++ extents->x2 == pDraw->width && ++ extents->y2 == pDraw->height) { ++ PixmapPtr fpix = get_drawable_pixmap(dst_draw); ++ struct nouveau_bo *bo = nouveau_pixmap_bo(fpix); ++ if (bo) ++ nouveau_bo_wait(bo, NOUVEAU_BO_RD, pNv->client); ++ } ++ } ++ + pGC->ops->CopyArea(src_draw, dst_draw, pGC, 0, 0, + pDraw->width, pDraw->height, off_x, off_y); + +diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c +index 8191aeb..bcc0d4e 100644 +--- a/src/nouveau_exa.c ++++ b/src/nouveau_exa.c +@@ -139,6 +139,11 @@ nouveau_exa_create_pixmap(ScreenPtr pScreen, int width, int height, int depth, + return NULL; + } + ++#ifdef NOUVEAU_PIXMAP_SHARING ++ if ((usage_hint & 0xffff) == CREATE_PIXMAP_USAGE_SHARED) ++ nvpix->shared = TRUE; ++#endif ++ + return nvpix; + } + +diff --git a/src/nv30_exa.c b/src/nv30_exa.c +index 95509bc..21586e9 100644 +--- a/src/nv30_exa.c ++++ b/src/nv30_exa.c +@@ -820,146 +820,146 @@ NVAccelInitNV30TCL(ScrnInfoPtr pScrn) + PUSH_DATA (push, 4096<<16); + + PUSH_DATAu(push, pNv->scratch, PFP_PASS, 2 * 4); +- PUSH_DATA (push, 0x18009e80); /* txph r0, a[tex0], t[0] */ +- PUSH_DATA (push, 0x1c9dc801); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x3fe1c800); +- PUSH_DATA (push, 0x1802be83); /* txph r1, a[tex1], t[1] */ +- PUSH_DATA (push, 0x1c9dc801); /* exit */ +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x3fe1c800); ++ PUSH_DATAs(push, 0x18009e80); /* txph r0, a[tex0], t[0] */ ++ PUSH_DATAs(push, 0x1c9dc801); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x3fe1c800); ++ PUSH_DATAs(push, 0x1802be83); /* txph r1, a[tex1], t[1] */ ++ PUSH_DATAs(push, 0x1c9dc801); /* exit */ ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x3fe1c800); + + PUSH_DATAu(push, pNv->scratch, PFP_NV12_BILINEAR, 8 * 4); +- PUSH_DATA (push, 0x17028200); /* texr r0.x, a[tex0], t[1] */ +- PUSH_DATA (push, 0x1c9dc801); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x3fe1c800); +- PUSH_DATA (push, 0x04000e02); /* madr r1.xyz, r0.x, imm.x, imm.yzww */ +- PUSH_DATA (push, 0x1c9c0000); +- PUSH_DATA (push, 0x00000002); +- PUSH_DATA (push, 0x0001f202); +- PUSH_DATA (push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */ +- PUSH_DATA (push, 0xbf5ee393); +- PUSH_DATA (push, 0x3f078fef); +- PUSH_DATA (push, 0xbf8a6762); +- PUSH_DATA (push, 0x1704ac80); /* texr r0.yz, a[tex1], t[2] */ +- PUSH_DATA (push, 0x1c9dc801); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x3fe1c800); +- PUSH_DATA (push, 0x04000e02); /* madr r1.xyz, r0.y, imm, r1 */ +- PUSH_DATA (push, 0x1c9cab00); +- PUSH_DATA (push, 0x0001c802); +- PUSH_DATA (push, 0x0001c804); +- PUSH_DATA (push, 0x00000000); /* { 0.00, -0.39, 2.02, 0.00 } */ +- PUSH_DATA (push, 0xbec890d6); +- PUSH_DATA (push, 0x40011687); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x04000e81); /* madr r0.xyz, r0.z, imm, r1 */ +- PUSH_DATA (push, 0x1c9d5500); +- PUSH_DATA (push, 0x0001c802); +- PUSH_DATA (push, 0x0001c804); +- PUSH_DATA (push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */ +- PUSH_DATA (push, 0xbf501a37); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); ++ PUSH_DATAs(push, 0x17028200); /* texr r0.x, a[tex0], t[1] */ ++ PUSH_DATAs(push, 0x1c9dc801); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x3fe1c800); ++ PUSH_DATAs(push, 0x04000e02); /* madr r1.xyz, r0.x, imm.x, imm.yzww */ ++ PUSH_DATAs(push, 0x1c9c0000); ++ PUSH_DATAs(push, 0x00000002); ++ PUSH_DATAs(push, 0x0001f202); ++ PUSH_DATAs(push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */ ++ PUSH_DATAs(push, 0xbf5ee393); ++ PUSH_DATAs(push, 0x3f078fef); ++ PUSH_DATAs(push, 0xbf8a6762); ++ PUSH_DATAs(push, 0x1704ac80); /* texr r0.yz, a[tex1], t[2] */ ++ PUSH_DATAs(push, 0x1c9dc801); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x3fe1c800); ++ PUSH_DATAs(push, 0x04000e02); /* madr r1.xyz, r0.y, imm, r1 */ ++ PUSH_DATAs(push, 0x1c9cab00); ++ PUSH_DATAs(push, 0x0001c802); ++ PUSH_DATAs(push, 0x0001c804); ++ PUSH_DATAs(push, 0x00000000); /* { 0.00, -0.39, 2.02, 0.00 } */ ++ PUSH_DATAs(push, 0xbec890d6); ++ PUSH_DATAs(push, 0x40011687); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x04000e81); /* madr r0.xyz, r0.z, imm, r1 */ ++ PUSH_DATAs(push, 0x1c9d5500); ++ PUSH_DATAs(push, 0x0001c802); ++ PUSH_DATAs(push, 0x0001c804); ++ PUSH_DATAs(push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */ ++ PUSH_DATAs(push, 0xbf501a37); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); + + PUSH_DATAu(push, pNv->scratch, PFP_NV12_BICUBIC, 24 * 4); +- PUSH_DATA (push, 0x01008604); /* movr r2.xy, a[tex0] */ +- PUSH_DATA (push, 0x1c9dc801); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x03000600); /* addr r0.xy, r2, imm.x */ +- PUSH_DATA (push, 0x1c9dc808); +- PUSH_DATA (push, 0x00000002); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x3f000000); /* { 0.50, 0.00, 0.00, 0.00 } */ +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x17000e06); /* texr r3.xyz, r0, t[0] */ +- PUSH_DATA (push, 0x1c9dc800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x17000e00); /* texr r0.xyz, r0.y, t[0] */ +- PUSH_DATA (push, 0x1c9caa00); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x02000a02); /* mulr r1.xz, r3.xxyy, imm.xxyy */ +- PUSH_DATA (push, 0x1c9ca00c); +- PUSH_DATA (push, 0x0000a002); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0xbf800000); /* { -1.00, 1.00, 0.00, 0.00 } */ +- PUSH_DATA (push, 0x3f800000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x02001402); /* mulr r1.yw, r0.xxyy, imm.xxyy */ +- PUSH_DATA (push, 0x1c9ca000); +- PUSH_DATA (push, 0x0000a002); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0xbf800000); /* { -1.00, 1.00, 0.00, 0.00 } */ +- PUSH_DATA (push, 0x3f800000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x03001e04); /* addr r2, r2.xyxy, r1 */ +- PUSH_DATA (push, 0x1c9c8808); +- PUSH_DATA (push, 0x0001c804); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x17020200); /* texr r0.x, r2, t[1] */ +- PUSH_DATA (push, 0x1c9dc808); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x17020402); /* texr r1.y, r2.xwxw, t[1] */ +- PUSH_DATA (push, 0x1c9d9808); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x17020202); /* texr r1.x, r2.zyxy, t[1] */ +- PUSH_DATA (push, 0x1c9c8c08); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x1f400280); /* lrph r0.x, r0.z, r0, r1.y */ +- PUSH_DATA (push, 0x1c9d5400); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0000aa04); +- PUSH_DATA (push, 0x17020400); /* texr r0.y, r2.zwzz, t[1] */ +- PUSH_DATA (push, 0x1c9d5c08); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x1f400480); /* lrph r0.y, r0.z, r1.x, r0 */ +- PUSH_DATA (push, 0x1c9d5400); +- PUSH_DATA (push, 0x00000004); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x1f400280); /* lrph r0.x, r3.z, r0, r0.y */ +- PUSH_DATA (push, 0x1c9d540c); +- PUSH_DATA (push, 0x0001c900); +- PUSH_DATA (push, 0x0000ab00); +- PUSH_DATA (push, 0x04400e80); /* madh r0.xyz, r0.x, imm.x, imm.yzww */ +- PUSH_DATA (push, 0x1c9c0100); +- PUSH_DATA (push, 0x00000002); +- PUSH_DATA (push, 0x0001f202); +- PUSH_DATA (push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */ +- PUSH_DATA (push, 0xbf5ee393); +- PUSH_DATA (push, 0x3f078fef); +- PUSH_DATA (push, 0xbf8a6762); +- PUSH_DATA (push, 0x1704ac02); /* texr r1.yz, a[tex1], t[2] */ +- PUSH_DATA (push, 0x1c9dc801); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x0001c800); +- PUSH_DATA (push, 0x04400e80); /* madh r0.xyz, r1.y, imm, r0 */ +- PUSH_DATA (push, 0x1c9caa04); +- PUSH_DATA (push, 0x0001c802); +- PUSH_DATA (push, 0x0001c900); +- PUSH_DATA (push, 0x00000000); /* { 0.00, -0.39, 2.02, 0.00 } */ +- PUSH_DATA (push, 0xbec890d6); +- PUSH_DATA (push, 0x40011687); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x04400e81); /* madh r0.xyz, r1.z, imm, r0 */ +- PUSH_DATA (push, 0x1c9d5404); +- PUSH_DATA (push, 0x0001c802); +- PUSH_DATA (push, 0x0001c900); +- PUSH_DATA (push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */ +- PUSH_DATA (push, 0xbf501a37); +- PUSH_DATA (push, 0x00000000); +- PUSH_DATA (push, 0x00000000); ++ PUSH_DATAs(push, 0x01008604); /* movr r2.xy, a[tex0] */ ++ PUSH_DATAs(push, 0x1c9dc801); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x03000600); /* addr r0.xy, r2, imm.x */ ++ PUSH_DATAs(push, 0x1c9dc808); ++ PUSH_DATAs(push, 0x00000002); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x3f000000); /* { 0.50, 0.00, 0.00, 0.00 } */ ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x17000e06); /* texr r3.xyz, r0, t[0] */ ++ PUSH_DATAs(push, 0x1c9dc800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x17000e00); /* texr r0.xyz, r0.y, t[0] */ ++ PUSH_DATAs(push, 0x1c9caa00); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x02000a02); /* mulr r1.xz, r3.xxyy, imm.xxyy */ ++ PUSH_DATAs(push, 0x1c9ca00c); ++ PUSH_DATAs(push, 0x0000a002); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0xbf800000); /* { -1.00, 1.00, 0.00, 0.00 } */ ++ PUSH_DATAs(push, 0x3f800000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x02001402); /* mulr r1.yw, r0.xxyy, imm.xxyy */ ++ PUSH_DATAs(push, 0x1c9ca000); ++ PUSH_DATAs(push, 0x0000a002); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0xbf800000); /* { -1.00, 1.00, 0.00, 0.00 } */ ++ PUSH_DATAs(push, 0x3f800000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x03001e04); /* addr r2, r2.xyxy, r1 */ ++ PUSH_DATAs(push, 0x1c9c8808); ++ PUSH_DATAs(push, 0x0001c804); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x17020200); /* texr r0.x, r2, t[1] */ ++ PUSH_DATAs(push, 0x1c9dc808); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x17020402); /* texr r1.y, r2.xwxw, t[1] */ ++ PUSH_DATAs(push, 0x1c9d9808); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x17020202); /* texr r1.x, r2.zyxy, t[1] */ ++ PUSH_DATAs(push, 0x1c9c8c08); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x1f400280); /* lrph r0.x, r0.z, r0, r1.y */ ++ PUSH_DATAs(push, 0x1c9d5400); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0000aa04); ++ PUSH_DATAs(push, 0x17020400); /* texr r0.y, r2.zwzz, t[1] */ ++ PUSH_DATAs(push, 0x1c9d5c08); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x1f400480); /* lrph r0.y, r0.z, r1.x, r0 */ ++ PUSH_DATAs(push, 0x1c9d5400); ++ PUSH_DATAs(push, 0x00000004); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x1f400280); /* lrph r0.x, r3.z, r0, r0.y */ ++ PUSH_DATAs(push, 0x1c9d540c); ++ PUSH_DATAs(push, 0x0001c900); ++ PUSH_DATAs(push, 0x0000ab00); ++ PUSH_DATAs(push, 0x04400e80); /* madh r0.xyz, r0.x, imm.x, imm.yzww */ ++ PUSH_DATAs(push, 0x1c9c0100); ++ PUSH_DATAs(push, 0x00000002); ++ PUSH_DATAs(push, 0x0001f202); ++ PUSH_DATAs(push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */ ++ PUSH_DATAs(push, 0xbf5ee393); ++ PUSH_DATAs(push, 0x3f078fef); ++ PUSH_DATAs(push, 0xbf8a6762); ++ PUSH_DATAs(push, 0x1704ac02); /* texr r1.yz, a[tex1], t[2] */ ++ PUSH_DATAs(push, 0x1c9dc801); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x0001c800); ++ PUSH_DATAs(push, 0x04400e80); /* madh r0.xyz, r1.y, imm, r0 */ ++ PUSH_DATAs(push, 0x1c9caa04); ++ PUSH_DATAs(push, 0x0001c802); ++ PUSH_DATAs(push, 0x0001c900); ++ PUSH_DATAs(push, 0x00000000); /* { 0.00, -0.39, 2.02, 0.00 } */ ++ PUSH_DATAs(push, 0xbec890d6); ++ PUSH_DATAs(push, 0x40011687); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x04400e81); /* madh r0.xyz, r1.z, imm, r0 */ ++ PUSH_DATAs(push, 0x1c9d5404); ++ PUSH_DATAs(push, 0x0001c802); ++ PUSH_DATAs(push, 0x0001c900); ++ PUSH_DATAs(push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */ ++ PUSH_DATAs(push, 0xbf501a37); ++ PUSH_DATAs(push, 0x00000000); ++ PUSH_DATAs(push, 0x00000000); + + return TRUE; + } +diff --git a/src/nv_accel_common.c b/src/nv_accel_common.c +index 57e52ff..b06fe0c 100644 +--- a/src/nv_accel_common.c ++++ b/src/nv_accel_common.c +@@ -35,10 +35,19 @@ nouveau_allocate_surface(ScrnInfoPtr scrn, int width, int height, int bpp, + NVPtr pNv = NVPTR(scrn); + Bool scanout = (usage_hint & NOUVEAU_CREATE_PIXMAP_SCANOUT); + Bool tiled = (usage_hint & NOUVEAU_CREATE_PIXMAP_TILED); ++ Bool shared = FALSE; + union nouveau_bo_config cfg = {}; + int flags = NOUVEAU_BO_MAP | (bpp >= 8 ? NOUVEAU_BO_VRAM : 0); + int cpp = bpp / 8, ret; + ++#ifdef NOUVEAU_PIXMAP_SHARING ++ shared = ((usage_hint & 0xffff) == CREATE_PIXMAP_USAGE_SHARED); ++#endif ++ ++ flags = NOUVEAU_BO_MAP; ++ if (bpp >= 8) ++ flags |= shared ? NOUVEAU_BO_GART : NOUVEAU_BO_VRAM; ++ + if (pNv->Architecture >= NV_ARCH_50) { + if (scanout) { + if (pNv->tiled_scanout) { +@@ -48,9 +57,9 @@ nouveau_allocate_surface(ScrnInfoPtr scrn, int width, int height, int bpp, + *pitch = NOUVEAU_ALIGN(width * cpp, 256); + } + } else { +- if (bpp >= 8) ++ if (bpp >= 8 && !shared) + tiled = TRUE; +- *pitch = NOUVEAU_ALIGN(width * cpp, 64); ++ *pitch = NOUVEAU_ALIGN(width * cpp, shared ? 256 : 64); + } + } else { + if (scanout && pNv->tiled_scanout) +diff --git a/src/nv_driver.c b/src/nv_driver.c +index f14c847..9f62fe2 100644 +--- a/src/nv_driver.c ++++ b/src/nv_driver.c +@@ -452,7 +452,7 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) + { + RegionRec pixregion; + +- PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); ++ PixmapRegionInit(&pixregion, dirty->slave_dst); + + DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); + PixmapSyncDirtyHelper(dirty, &pixregion); +@@ -676,7 +676,7 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn) + if (value & DRM_PRIME_CAP_EXPORT) + pScrn->capabilities |= RR_Capability_SourceOutput; + if (value & DRM_PRIME_CAP_IMPORT) +- pScrn->capabilities |= RR_Capability_SourceOffload; ++ pScrn->capabilities |= RR_Capability_SourceOffload | RR_Capability_SinkOutput; + } + #endif + } diff --git a/debian/patches/102-frame-throttle.patch b/debian/patches/102-frame-throttle.patch deleted file mode 100644 index 4c4c48d..0000000 --- a/debian/patches/102-frame-throttle.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit 58284cf32778d54cde139423450bc33360784503 -Author: Christoph Bumiller <[email protected]> -Date: Tue Jan 29 16:38:21 2013 +1000 - - dri2: fix missing frame throttle on copy_region buffer swaps - - Signed-off-by: Ben Skeggs <[email protected]> - -diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c -index 036bcff..0c2bdab 100644 ---- a/src/nouveau_dri2.c -+++ b/src/nouveau_dri2.c -@@ -134,6 +134,7 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio - { - struct nouveau_dri2_buffer *src = nouveau_dri2_buffer(pSrcBuffer); - struct nouveau_dri2_buffer *dst = nouveau_dri2_buffer(pDstBuffer); -+ NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen)); - RegionPtr pCopyClip; - GCPtr pGC; - DrawablePtr src_draw, dst_draw; -@@ -178,6 +179,22 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio - } - pGC->funcs->ChangeClip(pGC, CT_REGION, pCopyClip, 0); - ValidateGC(dst_draw, pGC); -+ -+ /* If this is a full buffer swap or frontbuffer flush, throttle on -+ * the previous one. -+ */ -+ if (dst->base.attachment == DRI2BufferFrontLeft && -+ REGION_NUM_RECTS(pRegion) == 1) { -+ BoxPtr extents = REGION_EXTENTS(pScreen, pRegion); -+ if (extents->x1 == 0 && extents->y1 == 0 && -+ extents->x2 == pDraw->width && -+ extents->y2 == pDraw->height) { -+ struct nouveau_bo *bo = nouveau_pixmap_bo(dst->ppix); -+ if (bo) -+ nouveau_bo_wait(bo, NOUVEAU_BO_RD, pNv->client); -+ } -+ } -+ - pGC->ops->CopyArea(src_draw, dst_draw, pGC, 0, 0, - pDraw->width, pDraw->height, off_x, off_y); - diff --git a/debian/patches/103-reverse-optimus.patch b/debian/patches/103-reverse-optimus.patch deleted file mode 100644 index de80b7e..0000000 --- a/debian/patches/103-reverse-optimus.patch +++ /dev/null @@ -1,105 +0,0 @@ -From de1cb49bec079fb350ef2fe7d47ed7ec20f6b26c Mon Sep 17 00:00:00 2001 -From: Dave Airlie <[email protected]> -Date: Mon, 7 Jan 2013 15:28:53 +1000 -Subject: [PATCH] nouveau: add reverse prime support - -This allows the nvidia card to scanout Intel cards rendering. - -Signed-off-by: Dave Airlie <[email protected]> ---- - src/drmmode_display.c | 35 ++++++++++++++++++++++++++++++++++- - src/nv_driver.c | 4 ++-- - 2 files changed, 36 insertions(+), 3 deletions(-) - -diff --git a/src/drmmode_display.c b/src/drmmode_display.c -index 429e9cc..39d0151 100644 ---- a/src/drmmode_display.c -+++ b/src/drmmode_display.c -@@ -42,6 +42,7 @@ - #include "libudev.h" - #endif - -+static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height); - typedef struct { - int fd; - uint32_t fb_id; -@@ -345,7 +346,9 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode, - drmmode_ConvertToKMode(crtc->scrn, &kmode, mode); - - fb_id = drmmode->fb_id; -- if (drmmode_crtc->rotate_fb_id) { -+ if (crtc->randr_crtc->scanout_pixmap) -+ x = y = 0; -+ else if (drmmode_crtc->rotate_fb_id) { - fb_id = drmmode_crtc->rotate_fb_id; - x = 0; - y = 0; -@@ -536,6 +539,34 @@ drmmode_gamma_set(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, - } - } - -+static Bool -+drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix) -+{ -+ ScreenPtr screen = xf86ScrnToScreen(crtc->scrn); -+ drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; -+ PixmapPtr screenpix = screen->GetScreenPixmap(screen); -+ -+ if (!ppix) { -+ if (crtc->randr_crtc->scanout_pixmap) -+ PixmapStopDirtyTracking(crtc->randr_crtc->scanout_pixmap, screenpix); -+ return TRUE; -+ } -+ -+ if (ppix->drawable.width > screenpix->drawable.width || -+ ppix->drawable.height > screenpix->drawable.height) { -+ Bool ret; -+ ret = drmmode_xf86crtc_resize(crtc->scrn, ppix->drawable.width, ppix->drawable.height); -+ if (ret == FALSE) -+ return FALSE; -+ -+ screenpix = screen->GetScreenPixmap(screen); -+ screen->width = screenpix->drawable.width = ppix->drawable.width; -+ screen->height = screenpix->drawable.height = ppix->drawable.height; -+ } -+ PixmapStartDirtyTracking(ppix, screenpix, 0, 0); -+ return TRUE; -+} -+ - static const xf86CrtcFuncsRec drmmode_crtc_funcs = { - .dpms = drmmode_crtc_dpms, - .set_mode_major = drmmode_set_mode_major, -@@ -547,6 +578,8 @@ static const xf86CrtcFuncsRec drmmode_crtc_funcs = { - .shadow_allocate = drmmode_crtc_shadow_allocate, - .shadow_destroy = drmmode_crtc_shadow_destroy, - .gamma_set = drmmode_gamma_set, -+ -+ .set_scanout_pixmap = drmmode_set_scanout_pixmap, - }; - - -diff --git a/src/nv_driver.c b/src/nv_driver.c -index f14c847..9f62fe2 100644 ---- a/src/nv_driver.c -+++ b/src/nv_driver.c -@@ -452,7 +452,7 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) - { - RegionRec pixregion; - -- PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); -+ PixmapRegionInit(&pixregion, dirty->slave_dst); - - DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); - PixmapSyncDirtyHelper(dirty, &pixregion); -@@ -676,7 +676,7 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn) - if (value & DRM_PRIME_CAP_EXPORT) - pScrn->capabilities |= RR_Capability_SourceOutput; - if (value & DRM_PRIME_CAP_IMPORT) -- pScrn->capabilities |= RR_Capability_SourceOffload; -+ pScrn->capabilities |= RR_Capability_SourceOffload | RR_Capability_SinkOutput; - } - #endif - } --- -1.8.1 - diff --git a/debian/patches/series b/debian/patches/series index 9df121a..fdf7b34 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,6 +3,4 @@ # Ubuntu patches 100-vblank-on.diff -101-gart-cursor.patch -102-frame-throttle.patch -103-reverse-optimus.patch +101-git-a80785f792.diff commit 40385035b843974ca15a7f0527ff71d7ec214d10 Author: Maarten Lankhorst <[email protected]> Date: Wed Jan 30 14:18:43 2013 +0100 Cherry-pick upstream patches to sync with git 58284cf32 * Cherry-pick upstream patches to sync with git 58284cf32 - 101-gart-cursor.patch - 102-frame-throttle.patch * Add patch to enable reverse-optimus support - 103-reverse-optimus.patch diff --git a/debian/changelog b/debian/changelog index bf53fa1..edcddf8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +xserver-xorg-video-nouveau (1:1.0.6-0ubuntu2) UNRELEASED; urgency=low + + * Cherry-pick upstream patches to sync with git 58284cf32 + - 101-gart-cursor.patch + - 102-frame-throttle.patch + * Add patch to enable reverse-optimus support + - 103-reverse-optimus.patch + + -- Maarten Lankhorst <[email protected]> Wed, 30 Jan 2013 14:16:30 +0100 + xserver-xorg-video-nouveau (1:1.0.6-0ubuntu1) raring; urgency=low * Sync from unreleased debian experimental git. diff --git a/debian/patches/101-gart-cursor.patch b/debian/patches/101-gart-cursor.patch new file mode 100644 index 0000000..b246931 --- /dev/null +++ b/debian/patches/101-gart-cursor.patch @@ -0,0 +1,28 @@ +commit 912d418fdfd2e99eef1e5c631c76dda1d82cf451 +Author: Marcin Slusarz <[email protected]> +Date: Mon Jan 21 00:15:38 2013 +0100 + + nouveau: put cursor BO in GART + + Keeping it in VRAM wastes CPU time, because cursor_set ioctl reads + handed BO back to RAM, just to write it to actual cursor BO. + + Here (nv92/core i7), this patch decreases overall cpu usage of + drmmode_load_cursor_argb from 4.6ms to ~90us and lets nv50_crtc_cursor_set + disappear from perf traces. + + Signed-off-by: Ben Skeggs <[email protected]> + +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index 429e9cc..06f7a24 100644 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c +@@ -567,7 +567,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num) + drmmode->mode_res->crtcs[num]); + drmmode_crtc->drmmode = drmmode; + +- ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_VRAM | NOUVEAU_BO_MAP, 0, ++ ret = nouveau_bo_new(pNv->dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, + 64*64*4, NULL, &drmmode_crtc->cursor); + assert(ret == 0); + diff --git a/debian/patches/102-frame-throttle.patch b/debian/patches/102-frame-throttle.patch new file mode 100644 index 0000000..4c4c48d --- /dev/null +++ b/debian/patches/102-frame-throttle.patch @@ -0,0 +1,43 @@ +commit 58284cf32778d54cde139423450bc33360784503 +Author: Christoph Bumiller <[email protected]> +Date: Tue Jan 29 16:38:21 2013 +1000 + + dri2: fix missing frame throttle on copy_region buffer swaps + + Signed-off-by: Ben Skeggs <[email protected]> + +diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c +index 036bcff..0c2bdab 100644 +--- a/src/nouveau_dri2.c ++++ b/src/nouveau_dri2.c +@@ -134,6 +134,7 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio + { + struct nouveau_dri2_buffer *src = nouveau_dri2_buffer(pSrcBuffer); + struct nouveau_dri2_buffer *dst = nouveau_dri2_buffer(pDstBuffer); ++ NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen)); + RegionPtr pCopyClip; + GCPtr pGC; + DrawablePtr src_draw, dst_draw; +@@ -178,6 +179,22 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio + } + pGC->funcs->ChangeClip(pGC, CT_REGION, pCopyClip, 0); + ValidateGC(dst_draw, pGC); ++ ++ /* If this is a full buffer swap or frontbuffer flush, throttle on ++ * the previous one. ++ */ ++ if (dst->base.attachment == DRI2BufferFrontLeft && ++ REGION_NUM_RECTS(pRegion) == 1) { ++ BoxPtr extents = REGION_EXTENTS(pScreen, pRegion); ++ if (extents->x1 == 0 && extents->y1 == 0 && ++ extents->x2 == pDraw->width && ++ extents->y2 == pDraw->height) { ++ struct nouveau_bo *bo = nouveau_pixmap_bo(dst->ppix); ++ if (bo) ++ nouveau_bo_wait(bo, NOUVEAU_BO_RD, pNv->client); ++ } ++ } ++ + pGC->ops->CopyArea(src_draw, dst_draw, pGC, 0, 0, + pDraw->width, pDraw->height, off_x, off_y); + diff --git a/debian/patches/103-reverse-optimus.patch b/debian/patches/103-reverse-optimus.patch new file mode 100644 index 0000000..de80b7e --- /dev/null +++ b/debian/patches/103-reverse-optimus.patch @@ -0,0 +1,105 @@ +From de1cb49bec079fb350ef2fe7d47ed7ec20f6b26c Mon Sep 17 00:00:00 2001 +From: Dave Airlie <[email protected]> +Date: Mon, 7 Jan 2013 15:28:53 +1000 +Subject: [PATCH] nouveau: add reverse prime support + +This allows the nvidia card to scanout Intel cards rendering. + +Signed-off-by: Dave Airlie <[email protected]> +--- + src/drmmode_display.c | 35 ++++++++++++++++++++++++++++++++++- + src/nv_driver.c | 4 ++-- + 2 files changed, 36 insertions(+), 3 deletions(-) + +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index 429e9cc..39d0151 100644 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c +@@ -42,6 +42,7 @@ + #include "libudev.h" + #endif + ++static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height); + typedef struct { + int fd; + uint32_t fb_id; +@@ -345,7 +346,9 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode, + drmmode_ConvertToKMode(crtc->scrn, &kmode, mode); + + fb_id = drmmode->fb_id; +- if (drmmode_crtc->rotate_fb_id) { ++ if (crtc->randr_crtc->scanout_pixmap) ++ x = y = 0; ++ else if (drmmode_crtc->rotate_fb_id) { + fb_id = drmmode_crtc->rotate_fb_id; + x = 0; + y = 0; +@@ -536,6 +539,34 @@ drmmode_gamma_set(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, + } + } + ++static Bool ++drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix) ++{ ++ ScreenPtr screen = xf86ScrnToScreen(crtc->scrn); ++ drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; ++ PixmapPtr screenpix = screen->GetScreenPixmap(screen); ++ ++ if (!ppix) { ++ if (crtc->randr_crtc->scanout_pixmap) ++ PixmapStopDirtyTracking(crtc->randr_crtc->scanout_pixmap, screenpix); ++ return TRUE; ++ } ++ ++ if (ppix->drawable.width > screenpix->drawable.width || ++ ppix->drawable.height > screenpix->drawable.height) { ++ Bool ret; ++ ret = drmmode_xf86crtc_resize(crtc->scrn, ppix->drawable.width, ppix->drawable.height); ++ if (ret == FALSE) ++ return FALSE; ++ ++ screenpix = screen->GetScreenPixmap(screen); ++ screen->width = screenpix->drawable.width = ppix->drawable.width; ++ screen->height = screenpix->drawable.height = ppix->drawable.height; ++ } ++ PixmapStartDirtyTracking(ppix, screenpix, 0, 0); ++ return TRUE; ++} ++ + static const xf86CrtcFuncsRec drmmode_crtc_funcs = { + .dpms = drmmode_crtc_dpms, + .set_mode_major = drmmode_set_mode_major, +@@ -547,6 +578,8 @@ static const xf86CrtcFuncsRec drmmode_crtc_funcs = { + .shadow_allocate = drmmode_crtc_shadow_allocate, + .shadow_destroy = drmmode_crtc_shadow_destroy, + .gamma_set = drmmode_gamma_set, ++ ++ .set_scanout_pixmap = drmmode_set_scanout_pixmap, + }; + + +diff --git a/src/nv_driver.c b/src/nv_driver.c +index f14c847..9f62fe2 100644 +--- a/src/nv_driver.c ++++ b/src/nv_driver.c +@@ -452,7 +452,7 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) + { + RegionRec pixregion; + +- PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); ++ PixmapRegionInit(&pixregion, dirty->slave_dst); + + DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); + PixmapSyncDirtyHelper(dirty, &pixregion); +@@ -676,7 +676,7 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn) + if (value & DRM_PRIME_CAP_EXPORT) + pScrn->capabilities |= RR_Capability_SourceOutput; + if (value & DRM_PRIME_CAP_IMPORT) +- pScrn->capabilities |= RR_Capability_SourceOffload; ++ pScrn->capabilities |= RR_Capability_SourceOffload | RR_Capability_SinkOutput; + } + #endif + } +-- +1.8.1 + diff --git a/debian/patches/series b/debian/patches/series index e8e209c..9df121a 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,6 @@ # Ubuntu patches 100-vblank-on.diff +101-gart-cursor.patch +102-frame-throttle.patch +103-reverse-optimus.patch -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

