diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-09-07 13:48:12 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-09-07 13:55:46 +0100 |
commit | 3dce661ef3df5558fe9c9d85324ab3395a37b7ea (patch) | |
tree | 57792f8e59df65fd9f6add17208f83556d3c5542 | |
parent | 0c39c363d7235d03f27337c731c0ffe3369bf713 (diff) | |
download | xorg-driver-xf86-video-intel-3dce661ef3df5558fe9c9d85324ab3395a37b7ea.tar.gz |
sna: And remember to update the ScreenPixmap after resize
Fixes the regression from the previous commit
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_display.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index f69ca977..ff24ed38 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -2178,19 +2178,6 @@ sna_visit_set_window_pixmap(WindowPtr window, pointer data) return WT_DONTWALKCHILDREN; } -static void -sna_redirect_screen_pixmap(ScrnInfoPtr scrn, PixmapPtr old, PixmapPtr new) -{ - ScreenPtr screen = scrn->pScreen; - struct sna_visit_set_pixmap_window visit; - - visit.old = old; - visit.new = new; - TraverseTree(screen->root, sna_visit_set_window_pixmap, &visit); - - screen->SetScreenPixmap(new); -} - static void copy_front(struct sna *sna, PixmapPtr old, PixmapPtr new) { struct sna_pixmap *old_priv, *new_priv; @@ -2263,6 +2250,7 @@ sna_crtc_resize(ScrnInfoPtr scrn, int width, int height) { xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); struct sna *sna = to_sna(scrn); + ScreenPtr screen = scrn->pScreen; PixmapPtr old_front, new_front; int i; @@ -2274,16 +2262,15 @@ sna_crtc_resize(ScrnInfoPtr scrn, int width, int height) return TRUE; assert(sna->front); - assert(scrn->pScreen->GetScreenPixmap(scrn->pScreen) == sna->front); + assert(screen->GetScreenPixmap(screen) == sna->front); DBG(("%s: creating new framebuffer %dx%d\n", __FUNCTION__, width, height)); old_front = sna->front; - new_front = scrn->pScreen->CreatePixmap(scrn->pScreen, - width, height, - scrn->depth, - SNA_CREATE_FB); + new_front = screen->CreatePixmap(screen, + width, height, scrn->depth, + SNA_CREATE_FB); if (!new_front) return FALSE; @@ -2312,13 +2299,18 @@ sna_crtc_resize(ScrnInfoPtr scrn, int width, int height) sna_crtc_disable(crtc); } - if (scrn->pScreen->root) { - sna_redirect_screen_pixmap(scrn, old_front, sna->front); - assert(scrn->pScreen->GetScreenPixmap(scrn->pScreen) == sna->front); - assert(scrn->pScreen->GetWindowPixmap(scrn->pScreen->root) == sna->front); + if (screen->root) { + struct sna_visit_set_pixmap_window visit; + + visit.old = old_front; + visit.new = sna->front; + TraverseTree(screen->root, sna_visit_set_window_pixmap, &visit); + assert(screen->GetWindowPixmap(screen->root) == sna->front); } + screen->SetScreenPixmap(sna->front); + assert(screen->GetScreenPixmap(screen) == sna->front); - scrn->pScreen->DestroyPixmap(old_front); + screen->DestroyPixmap(old_front); return TRUE; } |