debian/changelog | 6 + debian/control | 2 debian/patches/xmir.patch | 239 ++++++++++++++++++++++------------------------ 3 files changed, 126 insertions(+), 121 deletions(-)
New commits: commit 6511e8fb24c331b029cd0400dc88a70ff3d60a6f Author: Christopher James Halse Rogers <r...@ubuntu.com> Date: Sun Aug 25 21:16:37 2013 +1000 Update to new XMir MM API diff --git a/debian/changelog b/debian/changelog index 896c006..8bfb6e1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +xserver-xorg-video-ati (1:7.2.0-0ubuntu4) saucy; urgency=low + + * Update for new XMir API + + -- Christopher James Halse Rogers <r...@ubuntu.com> Thu, 29 Aug 2013 20:18:26 +1000 + xserver-xorg-video-ati (1:7.2.0-0ubuntu3) saucy; urgency=low * xmir.patch: Also support 1D tiling. (LP: #1195425) diff --git a/debian/control b/debian/control index 32fcf15..678e43f 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,7 @@ Build-Depends: dh-autoreconf, quilt, pkg-config, - xserver-xorg-dev (>= 2:1.14.2-0ubuntu4~), + xserver-xorg-dev (>= 2:1.14.2.901-2ubuntu4~), x11proto-gl-dev, x11proto-xext-dev, x11proto-core-dev, diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch index 8e81f76..4fdbbf8 100644 --- a/debian/patches/xmir.patch +++ b/debian/patches/xmir.patch @@ -6,10 +6,8 @@ Date: Mon Jul 22 17:02:17 2013 +1000 Signed-off-by: Christopher James Halse Rogers <r...@ubuntu.com> -Index: xf86-video-ati/src/drmmode_display.c -=================================================================== ---- xf86-video-ati.orig/src/drmmode_display.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/drmmode_display.c 2013-08-15 09:44:05.622352176 +1000 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c @@ -1941,7 +1941,7 @@ if (!miCreateDefColormap(pScreen)) return FALSE; @@ -19,10 +17,8 @@ Index: xf86-video-ati/src/drmmode_display.c drmmode_load_palette, NULL, CMAP_PALETTED_TRUECOLOR #if 0 /* This option messes up text mode! (e...@suse.de) */ -Index: xf86-video-ati/src/radeon.h -=================================================================== ---- xf86-video-ati.orig/src/radeon.h 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon.h 2013-08-15 09:44:05.622352176 +1000 +--- a/src/radeon.h ++++ b/src/radeon.h @@ -87,6 +87,14 @@ #include "picturestr.h" #endif @@ -51,10 +47,8 @@ Index: xf86-video-ati/src/radeon.h } RADEONInfoRec, *RADEONInfoPtr; /* radeon_accel.c */ -Index: xf86-video-ati/src/radeon_bo_helper.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_bo_helper.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_bo_helper.c 2013-08-15 10:00:04.206385137 +1000 +--- a/src/radeon_bo_helper.c ++++ b/src/radeon_bo_helper.c @@ -201,19 +201,25 @@ } @@ -114,10 +108,8 @@ Index: xf86-video-ati/src/radeon_bo_helper.c } radeon_set_pixmap_bo(ppix, bo); -Index: xf86-video-ati/src/radeon_bo_helper.h -=================================================================== ---- xf86-video-ati.orig/src/radeon_bo_helper.h 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_bo_helper.h 2013-08-15 09:44:05.622352176 +1000 +--- a/src/radeon_bo_helper.h ++++ b/src/radeon_bo_helper.h @@ -33,6 +33,7 @@ extern Bool @@ -127,10 +119,8 @@ Index: xf86-video-ati/src/radeon_bo_helper.h + uint32_t *tiling_flags, uint32_t *pitch); #endif /* RADEON_BO_HELPER_H */ -Index: xf86-video-ati/src/radeon_dri2.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_dri2.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_dri2.c 2013-08-15 09:44:05.622352176 +1000 +--- a/src/radeon_dri2.c ++++ b/src/radeon_dri2.c @@ -1535,6 +1535,18 @@ #endif /* USE_DRI2_SCHEDULING */ @@ -171,10 +161,8 @@ Index: xf86-video-ati/src/radeon_dri2.c #if DRI2INFOREC_VERSION >= 9 dri2_info.version = 9; dri2_info.CreateBuffer2 = radeon_dri2_create_buffer2; -Index: xf86-video-ati/src/radeon_exa.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_exa.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_exa.c 2013-08-15 09:44:05.622352176 +1000 +--- a/src/radeon_exa.c ++++ b/src/radeon_exa.c @@ -326,12 +326,12 @@ Bool RADEONEXASetSharedPixmapBacking(PixmapPtr ppix, void *fd_handle) { @@ -190,10 +178,8 @@ Index: xf86-video-ati/src/radeon_exa.c return TRUE; } #endif -Index: xf86-video-ati/src/radeon_glamor.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_glamor.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_glamor.c 2013-08-15 09:44:05.622352176 +1000 +--- a/src/radeon_glamor.c ++++ b/src/radeon_glamor.c @@ -277,14 +277,15 @@ ScrnInfoPtr scrn = xf86ScreenToScrn(screen); struct radeon_surface surface; @@ -213,10 +199,8 @@ Index: xf86-video-ati/src/radeon_glamor.c if (!radeon_glamor_create_textured_pixmap(pixmap)) { xf86DrvMsg(scrn->scrnIndex, X_ERROR, -Index: xf86-video-ati/src/radeon_kms.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_kms.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_kms.c 2013-08-15 09:44:05.626352176 +1000 +--- a/src/radeon_kms.c ++++ b/src/radeon_kms.c @@ -220,7 +220,11 @@ return FALSE; pScreen->CreateScreenResources = RADEONCreateScreenResources_KMS; @@ -230,29 +214,34 @@ Index: xf86-video-ati/src/radeon_kms.c return FALSE; drmmode_uevent_init(pScrn, &info->drmmode); -@@ -285,6 +289,102 @@ +@@ -285,6 +289,66 @@ } #endif +static void -+radeon_xmir_copy_pixmap_to_mir(PixmapPtr src, int prime_fd) ++radeon_xmir_copy_to_mir(xmir_window *xmir_win, RegionPtr region) +{ ++ WindowPtr win = xmir_window_to_windowptr(xmir_win); ++ PixmapPtr src = (*win->drawable.pScreen->GetWindowPixmap)(win); + ScreenPtr pScreen = src->drawable.pScreen; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); + RADEONInfoPtr info = RADEONPTR(pScrn); ++ BoxPtr output_box = xmir_window_get_drawable_region(xmir_win); ++ BoxPtr damage_box = RegionExtents(region); + if (info->accel_state->exa) { + PixmapPtr dst; + int ret; -+ int fd_copy = dup(prime_fd); ++ int fd_copy = dup(xmir_window_get_fd(xmir_win)); + /* TODO: Create this scratch pixmap once to avoid allocation overhead */ + dst = pScreen->CreatePixmap(pScreen, 0, 0, pScrn->depth, 0); + if (dst == NullPixmap) + return; + + if (!pScreen->ModifyPixmapHeader(dst, -+ pScrn->virtualX, pScrn->virtualY, ++ output_box->x2 - output_box->x1, ++ output_box->y2 - output_box->y1, + pScrn->depth, pScrn->bitsPerPixel, -+ src->devKind, NULL)) ++ xmir_window_get_stride(xmir_win), NULL)) + goto cleanup_dst; + + @@ -262,87 +251,46 @@ Index: xf86-video-ati/src/radeon_kms.c + -1, -1, GXcopy, FB_ALLONES); + if (!ret) + goto cleanup_dst; -+ info->accel_state->exa->Copy (dst, 0, 0, 0, 0, -+ pScrn->virtualX, pScrn->virtualY); ++ info->accel_state->exa->Copy (dst, ++ damage_box->x1, damage_box->y1, ++ damage_box->x1 - output_box->x1, ++ damage_box->y1 - output_box->y1, ++ output_box->x2 - output_box->x1, ++ output_box->y2 - output_box->y1); + info->accel_state->exa->DoneCopy (dst); + + radeon_cs_flush_indirect(pScrn); + ++ xmir_submit_rendering_for_window(xmir_win, region); +cleanup_dst: + pScreen->DestroyPixmap(dst); + } else if (0) { + /* TODO: glamor accel */ + } else { -+ /* Hideously bad software copy */ -+ struct radeon_bo *bo_src = radeon_get_pixmap_bo(src); -+ struct radeon_bo *bo_dst = radeon_gem_bo_open_prime(info->bufmgr, prime_fd, src->devKind * src->drawable.height); -+ -+ radeon_bo_map(bo_src, FALSE); -+ radeon_bo_map(bo_dst, TRUE); -+ -+ memcpy(bo_dst->ptr, bo_src->ptr, bo_dst->size); -+ -+ radeon_bo_unmap(bo_src); -+ radeon_bo_unmap(bo_dst); -+ -+ radeon_bo_unref(bo_dst); -+ } -+} -+ -+static void -+radeon_xmir_buffer_available(WindowPtr win) -+{ -+ int window_fd; -+ PixmapPtr window_pixmap; -+ -+ if(!xmir_window_is_dirty(win)) -+ return; -+ -+ window_fd = xmir_prime_fd_for_window(win); -+ -+ window_pixmap = (*win->drawable.pScreen->GetWindowPixmap)(win); -+ radeon_xmir_copy_pixmap_to_mir(window_pixmap, window_fd); -+ -+ xmir_submit_rendering_for_window(win, NULL); -+} -+ -+static void -+radeon_submit_dirty_window(WindowPtr win) -+{ -+ int window_fd; -+ PixmapPtr window_pixmap; -+ -+ if(!xmir_window_has_free_buffer(win)) -+ return; -+ -+ window_fd = xmir_prime_fd_for_window(win); -+ -+ window_pixmap = (*win->drawable.pScreen->GetWindowPixmap)(win); -+ radeon_xmir_copy_pixmap_to_mir(window_pixmap, window_fd); -+ -+ xmir_submit_rendering_for_window(win, NULL); ++ /* Software copy; let's just give up */ ++ } +} + +#ifdef XMIR +static xmir_driver xmir_radeon_driver = { + XMIR_DRIVER_VERSION, -+ radeon_xmir_buffer_available ++ radeon_xmir_copy_to_mir +}; +#endif + static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL) { SCREEN_PTR(arg); -@@ -302,6 +402,8 @@ +@@ -302,6 +366,8 @@ #ifdef RADEON_PIXMAP_SHARING radeon_dirty_update(pScreen); #endif + if(info->xmir) -+ xmir_screen_for_each_damaged_window(info->xmir, radeon_submit_dirty_window); ++ xmir_screen_for_each_damaged_window(info->xmir, radeon_xmir_copy_to_mir); } static void -@@ -606,6 +708,24 @@ +@@ -606,6 +672,24 @@ dev->domain, dev->bus, dev->dev, dev->func); #endif @@ -367,7 +315,7 @@ Index: xf86-video-ati/src/radeon_kms.c info->dri2.drm_fd = drmOpen("radeon", busid); if (info->dri2.drm_fd == -1) { -@@ -835,6 +955,14 @@ +@@ -835,6 +919,14 @@ if (!RADEONPreInitChipType_KMS(pScrn)) goto fail; @@ -382,7 +330,12 @@ Index: xf86-video-ati/src/radeon_kms.c if (radeon_open_drm_master(pScrn) == FALSE) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n"); goto fail; -@@ -913,6 +1041,10 @@ +@@ -909,10 +1001,14 @@ + } + + info->swapBuffersWait = xf86ReturnOptValBool(info->Options, +- OPTION_SWAPBUFFERS_WAIT, TRUE); ++ OPTION_SWAPBUFFERS_WAIT, !xorgMir); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "SwapBuffers wait for vsync: %sabled\n", info->swapBuffersWait ? "en" : "dis"); @@ -393,7 +346,7 @@ Index: xf86-video-ati/src/radeon_kms.c if (drmmode_pre_init(pScrn, &info->drmmode, pScrn->bitsPerPixel / 8) == FALSE) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Kernel modesetting setup failed\n"); goto fail; -@@ -922,7 +1054,10 @@ +@@ -922,7 +1018,10 @@ pRADEONEnt->HasCRTC2 = FALSE; else pRADEONEnt->HasCRTC2 = TRUE; @@ -405,7 +358,7 @@ Index: xf86-video-ati/src/radeon_kms.c /* fix up cloning on rn50 cards * since they only have one crtc sometimes the xserver doesn't assign -@@ -1122,6 +1257,11 @@ +@@ -1122,6 +1221,11 @@ if (info->accel_state->use_vbos) radeon_vbo_free_lists(pScrn); @@ -417,7 +370,29 @@ Index: xf86-video-ati/src/radeon_kms.c drmDropMaster(info->dri2.drm_fd); drmmode_fini(pScrn, &info->drmmode); -@@ -1157,7 +1297,7 @@ +@@ -1150,6 +1254,21 @@ + RADEONFreeRec(pScrn); + } + ++static void ++RADEONSetScreenPixmap_KMS(PixmapPtr pixmap) ++{ ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pixmap->drawable.pScreen); ++ RADEONInfoPtr info = RADEONPTR(pScrn); ++ ++ if (info->accel_state->exa) ++ exaMoveInPixmap(pixmap); ++ ++ info->front_bo = radeon_get_pixmap_bo(pixmap); ++ memmove(&info->front_surface, radeon_get_pixmap_surface(pixmap), sizeof info->front_surface); ++ ++ pixmap->drawable.pScreen->devPrivate = pixmap; ++} ++ + Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL) + { + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); +@@ -1157,7 +1276,7 @@ int subPixelOrder = SubPixelUnknown; char* s; void *front_ptr; @@ -426,7 +401,7 @@ Index: xf86-video-ati/src/radeon_kms.c pScrn->fbOffset = 0; -@@ -1168,7 +1308,8 @@ +@@ -1168,7 +1287,8 @@ pScrn->defaultVisual)) return FALSE; miSetPixmapDepths (); @@ -436,7 +411,7 @@ Index: xf86-video-ati/src/radeon_kms.c if (ret) { ErrorF("Unable to retrieve master\n"); return FALSE; -@@ -1185,7 +1326,8 @@ +@@ -1185,7 +1305,8 @@ "failed to initialise GEM buffer manager"); return FALSE; } @@ -446,26 +421,28 @@ Index: xf86-video-ati/src/radeon_kms.c if (!info->csm) info->csm = radeon_cs_manager_gem_ctor(info->dri2.drm_fd); -@@ -1259,6 +1401,9 @@ - /* Must be after RGB order fixed */ - fbPictureInit (pScreen, 0, 0); - -+ if (info->xmir) -+ xmir_screen_init(pScreen, info->xmir); -+ - #ifdef RENDER - if ((s = xf86GetOptValString(info->Options, OPTION_SUBPIXEL_ORDER))) { - if (strcmp(s, "RGB") == 0) subPixelOrder = SubPixelHorizontalRGB; -@@ -1309,7 +1454,7 @@ +@@ -1309,7 +1430,10 @@ /* Cursor setup */ miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); - if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) { ++ if (info->xmir) ++ xmir_screen_init(pScreen, info->xmir); ++ + if (!info->xmir && !xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) { if (RADEONCursorInit_KMS(pScreen)) { } } -@@ -1385,13 +1530,13 @@ +@@ -1351,6 +1475,8 @@ + info->CreateScreenResources = pScreen->CreateScreenResources; + pScreen->CreateScreenResources = RADEONCreateScreenResources_KMS; + ++ pScreen->SetScreenPixmap = RADEONSetScreenPixmap_KMS; ++ + #ifdef RADEON_PIXMAP_SHARING + pScreen->StartPixmapTracking = PixmapStartDirtyTracking; + pScreen->StopPixmapTracking = PixmapStopDirtyTracking; +@@ -1385,13 +1511,13 @@ { SCRN_INFO_PTR(arg); RADEONInfoPtr info = RADEONPTR(pScrn); @@ -482,7 +459,7 @@ Index: xf86-video-ati/src/radeon_kms.c if (ret) ErrorF("Unable to retrieve master\n"); info->accel_state->XInited3D = FALSE; -@@ -1399,7 +1544,9 @@ +@@ -1399,7 +1525,9 @@ pScrn->vtSema = TRUE; @@ -493,7 +470,17 @@ Index: xf86-video-ati/src/radeon_kms.c return FALSE; return TRUE; -@@ -1540,6 +1687,7 @@ +@@ -1414,7 +1542,8 @@ + xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, + "RADEONLeaveVT_KMS\n"); + +- drmDropMaster(info->dri2.drm_fd); ++ if (!xorgMir) ++ drmDropMaster(info->dri2.drm_fd); + + xf86RotateFreeShadow(pScrn); + +@@ -1540,6 +1669,7 @@ } info->front_surface = surface; } @@ -501,10 +488,8 @@ Index: xf86-video-ati/src/radeon_kms.c { int cursor_size; int c; -Index: xf86-video-ati/src/radeon_probe.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_probe.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_probe.c 2013-08-15 09:44:05.626352176 +1000 +--- a/src/radeon_probe.c ++++ b/src/radeon_probe.c @@ -40,6 +40,7 @@ * KMS support - Dave Airlie <airl...@redhat.com> */ @@ -609,10 +594,14 @@ Index: xf86-video-ati/src/radeon_probe.c if (!radeon_kernel_mode_enabled(pScrn, dev->pdev)) return FALSE; -Index: xf86-video-ati/src/radeon_video.c -=================================================================== ---- xf86-video-ati.orig/src/radeon_video.c 2013-08-15 09:44:05.626352176 +1000 -+++ xf86-video-ati/src/radeon_video.c 2013-08-15 09:44:05.626352176 +1000 +--- a/src/radeon_video.c ++++ b/src/radeon_video.c +@@ -1,4 +1,4 @@ +- ++ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif @@ -70,7 +70,10 @@ Bool radeon_crtc_is_enabled(xf86CrtcPtr crtc) { @@ -625,3 +614,13 @@ Index: xf86-video-ati/src/radeon_video.c } uint32_t radeon_get_interpolated_vblanks(xf86CrtcPtr crtc) +@@ -92,6 +95,9 @@ + if (!pScrn->vtSema) + return NULL; + ++ if (xorgMir) ++ return NULL; ++ + box.x1 = x1; + box.x2 = x2; + box.y1 = y1; -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1vf0i8-0005pq...@vasks.debian.org