summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Damen <albrt@gmx.net>2009-10-07 19:55:42 (GMT)
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-10-13 17:51:24 (GMT)
commitfcc2ee48b866b81c79315ff10189b56fc201539d (patch)
tree40ed44625729bdb46dd906242a51d014a1b34eec
parent8a77877f9c2c6a8a1308bc1a3be9e7ad88bc7f49 (diff)
Drop frontbuffer from crtc in I830CloseScreen
By dropping the frontbuffer from the crtc, the new frontbuffer can be properly added to the crtc when the xserver is reset. Signed-off-by: Albert Damen <albrt@gmx.net>
-rw-r--r--src/drmmode_display.c15
-rw-r--r--src/i830.h1
-rw-r--r--src/i830_driver.c1
3 files changed, 17 insertions, 0 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index c2ef514..472bc74 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1429,3 +1429,18 @@ drmmode_crtc_id(xf86CrtcPtr crtc)
return drmmode_crtc->mode_crtc->crtc_id;
}
+
+void drmmode_closefb(ScrnInfoPtr scrn)
+{
+ xf86CrtcConfigPtr xf86_config;
+ drmmode_crtc_private_ptr drmmode_crtc;
+ drmmode_ptr drmmode;
+
+ xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
+
+ drmmode_crtc = xf86_config->crtc[0]->driver_private;
+ drmmode = drmmode_crtc->drmmode;
+
+ drmModeRmFB(drmmode->fd, drmmode->fb_id);
+ drmmode->fb_id = 0;
+}
diff --git a/src/i830.h b/src/i830.h
index 7a64f00..2d7fc5b 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -330,6 +330,7 @@ Bool I830DRI2ScreenInit(ScreenPtr pScreen);
void I830DRI2CloseScreen(ScreenPtr pScreen);
extern Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp);
+extern void drmmode_closefb(ScrnInfoPtr scrn);
extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr * bufmgr,
xf86CrtcPtr crtc);
extern int drmmode_output_dpms_status(xf86OutputPtr output);
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 47bc4df..8b5e946 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -1519,6 +1519,7 @@ static Bool I830CloseScreen(int scrnIndex, ScreenPtr screen)
}
if (intel->front_buffer) {
i830_set_pixmap_bo(screen->GetScreenPixmap(screen), NULL);
+ drmmode_closefb(scrn);
i830_free_memory(scrn, intel->front_buffer);
intel->front_buffer = NULL;
}