diff options
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | dix/dispatch.c | 2 | ||||
-rw-r--r-- | dix/main.c | 3 | ||||
-rw-r--r-- | dix/pixmap.c | 2 | ||||
-rw-r--r-- | fb/fbpixmap.c | 1 | ||||
-rw-r--r-- | hw/xfree86/common/xf86platformBus.c | 8 | ||||
-rw-r--r-- | hw/xfree86/modes/xf86Crtc.c | 34 |
7 files changed, 41 insertions, 15 deletions
diff --git a/configure.ac b/configure.ac index 99e3cd60e..271e49d5c 100644 --- a/configure.ac +++ b/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.14.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2013-06-25" -RELEASE_NAME="Act Abnormal" +AC_INIT([xorg-server], 1.14.2.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2013-07-25" +RELEASE_NAME="Act semi-normal-rc1" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) diff --git a/dix/dispatch.c b/dix/dispatch.c index 20f241467..979ba48f0 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3943,7 +3943,6 @@ void AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new) { assert(new->isGPU); - assert(!new->current_master); xorg_list_add(&new->output_head, &pScreen->output_slave_list); new->current_master = pScreen; } @@ -3960,7 +3959,6 @@ void AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new) { assert(new->isGPU); - assert(!new->current_master); xorg_list_add(&new->offload_head, &pScreen->offload_slave_list); new->current_master = pScreen; } diff --git a/dix/main.c b/dix/main.c index fb935c969..e558d702b 100644 --- a/dix/main.c +++ b/dix/main.c @@ -211,6 +211,9 @@ main(int argc, char *argv[], char *envp[]) ScreenPtr pScreen = screenInfo.gpuscreens[i]; if (!CreateScratchPixmapsForScreen(pScreen)) FatalError("failed to create scratch pixmaps"); + if (pScreen->CreateScreenResources && + !(*pScreen->CreateScreenResources) (pScreen)) + FatalError("failed to create screen resources"); } for (i = 0; i < screenInfo.numScreens; i++) { diff --git a/dix/pixmap.c b/dix/pixmap.c index 241881262..fe9214739 100644 --- a/dix/pixmap.c +++ b/dix/pixmap.c @@ -243,6 +243,8 @@ Bool PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region) } dst = dirty->slave_dst->master_pixmap; + if (!dst) + dst = dirty->slave_dst; RegionTranslate(dirty_region, -dirty->x, -dirty->y); n = RegionNumRects(dirty_region); diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c index fbcdca99c..0824b64bb 100644 --- a/fb/fbpixmap.c +++ b/fb/fbpixmap.c @@ -67,6 +67,7 @@ fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp, pPixmap->devKind = paddedWidth; pPixmap->refcnt = 1; pPixmap->devPrivate.ptr = (pointer) ((char *) pPixmap + base + adjust); + pPixmap->master_pixmap = NULL; #ifdef FB_DEBUG pPixmap->devPrivate.ptr = diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c index 9034dad5e..db831a883 100644 --- a/hw/xfree86/common/xf86platformBus.c +++ b/hw/xfree86/common/xf86platformBus.c @@ -454,6 +454,14 @@ xf86platformAddDevice(int index) CreateScratchPixmapsForScreen(xf86GPUScreens[i]->pScreen); + if (xf86GPUScreens[i]->pScreen->CreateScreenResources && + !(*xf86GPUScreens[i]->pScreen->CreateScreenResources) (xf86GPUScreens[i]->pScreen)) { + RemoveGPUScreen(xf86GPUScreens[i]->pScreen); + xf86DeleteScreen(xf86GPUScreens[i]); + xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL); + xf86NumGPUScreens = old_screens; + return -1; + } /* attach unbound to 0 protocol screen */ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 7d55f606e..989595fee 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -1908,6 +1908,14 @@ xf86CollectEnabledOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config, Bool any_enabled = FALSE; int o; + /* + * Don't bother enabling outputs on GPU screens: a client needs to attach + * it to a source provider before setting a mode that scans out a shared + * pixmap. + */ + if (scrn->is_gpu) + return FALSE; + for (o = 0; o < config->num_output; o++) any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE); @@ -2360,11 +2368,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) config->debug_modes = xf86ReturnOptValBool(config->options, OPTION_MODEDEBUG, FALSE); - if (scrn->display->virtualX) + if (scrn->display->virtualX && !scrn->is_gpu) width = scrn->display->virtualX; else width = config->maxWidth; - if (scrn->display->virtualY) + if (scrn->display->virtualY && !scrn->is_gpu) height = scrn->display->virtualY; else height = config->maxHeight; @@ -2377,9 +2385,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) ret = xf86CollectEnabledOutputs(scrn, config, enabled); if (ret == FALSE && canGrow) { - xf86DrvMsg(i, X_WARNING, - "Unable to find connected outputs - setting %dx%d initial framebuffer\n", - NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT); + if (!scrn->is_gpu) + xf86DrvMsg(i, X_WARNING, + "Unable to find connected outputs - setting %dx%d " + "initial framebuffer\n", + NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT); have_outputs = FALSE; } else { @@ -2428,8 +2438,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) /* XXX override xf86 common frame computation code */ - scrn->display->frameX0 = 0; - scrn->display->frameY0 = 0; + if (!scrn->is_gpu) { + scrn->display->frameX0 = 0; + scrn->display->frameY0 = 0; + } for (c = 0; c < config->num_crtc; c++) { xf86CrtcPtr crtc = config->crtc[c]; @@ -2477,7 +2489,7 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) } } - if (scrn->display->virtualX == 0) { + if (scrn->display->virtualX == 0 || scrn->is_gpu) { /* * Expand virtual size to cover the current config and potential mode * switches, if the driver can't enlarge the screen later. @@ -2492,8 +2504,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) } } - scrn->display->virtualX = width; - scrn->display->virtualY = height; + if (!scrn->is_gpu) { + scrn->display->virtualX = width; + scrn->display->virtualY = height; + } } if (width > scrn->virtualX) |