summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-09-07 13:48:12 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-09-07 13:55:46 +0100
commit3dce661ef3df5558fe9c9d85324ab3395a37b7ea (patch)
tree57792f8e59df65fd9f6add17208f83556d3c5542
parent0c39c363d7235d03f27337c731c0ffe3369bf713 (diff)
downloadxorg-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.c38
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;
}