From c5529d68c5b01cf0f36d8f2ce3694a7a0f3333da Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 20 Feb 2012 11:05:59 +0000 Subject: [PATCH] modesetting: fix shadow resizing. if we hotplugged and output, the shadow got disabled by accident. Signed-off-by: Dave Airlie --- .../drivers/modesetting/drmmode_display.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index caa9f44cb..c004721c9 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -984,8 +984,21 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height) if (!new_pixels) goto fail; - screen->ModifyPixmapHeader(ppix, width, height, -1, -1, - pitch, new_pixels); + if (!drmmode->shadow_enable) + screen->ModifyPixmapHeader(ppix, width, height, -1, -1, + pitch, new_pixels); + else { + void *new_shadow; + uint32_t size = scrn->displayWidth * scrn->virtualY * + ((scrn->bitsPerPixel + 7) >> 3); + new_shadow = calloc(1, size); + if (new_shadow == NULL) + goto fail; + free(drmmode->shadow_fb); + drmmode->shadow_fb = new_shadow; + screen->ModifyPixmapHeader(ppix, width, height, -1, -1, + pitch, drmmode->shadow_fb); + } #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,9,99,1,0) scrn->pixmapPrivate.ptr = ppix->devPrivate.ptr;