Demos (master): eglkms: Restore saved crtc

Benjamin Franzke bnf at kemper.freedesktop.org
Mon Jun 27 09:07:01 UTC 2011


Module: Demos
Branch: master
Commit: 0e83890b5eae0236537d844c60375072210995d9
URL:    http://cgit.freedesktop.org/mesa/demos/commit/?id=0e83890b5eae0236537d844c60375072210995d9

Author: Benjamin Franzke <benjaminfranzke at googlemail.com>
Date:   Mon Jun 27 10:51:48 2011 +0200

eglkms: Restore saved crtc

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=38473

---

 src/egl/opengl/eglkms.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/egl/opengl/eglkms.c b/src/egl/opengl/eglkms.c
index 0dfb477..438b4c5 100644
--- a/src/egl/opengl/eglkms.c
+++ b/src/egl/opengl/eglkms.c
@@ -140,6 +140,7 @@ int main(int argc, char *argv[])
    int ret, fd;
    struct gbm_device *gbm;
    struct gbm_bo *bo;
+   drmModeCrtcPtr saved_crtc;
 
    fd = open(device_name, O_RDWR);
    if (fd < 0) {
@@ -269,15 +270,28 @@ int main(int argc, char *argv[])
       goto rm_rb;
    }
 
+   saved_crtc = drmModeGetCrtc(fd, kms.encoder->crtc_id);
+   if (saved_crtc == NULL)
+      goto rm_fb;
+
    ret = drmModeSetCrtc(fd, kms.encoder->crtc_id, kms.fb_id, 0, 0,
 			&kms.connector->connector_id, 1, &kms.mode);
    if (ret) {
       fprintf(stderr, "failed to set mode: %m\n");
-      goto rm_fb;
+      goto free_saved_crtc;
    }
 
    getchar();
 
+   ret = drmModeSetCrtc(fd, saved_crtc->crtc_id, saved_crtc->buffer_id,
+                        saved_crtc->x, saved_crtc->y,
+                        &kms.connector->connector_id, 1, &saved_crtc->mode);
+   if (ret) {
+      fprintf(stderr, "failed to restore crtc: %m\n");
+   }
+
+free_saved_crtc:
+   drmModeFreeCrtc(saved_crtc);
 rm_rb:
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
 				GL_COLOR_ATTACHMENT0_EXT,




More information about the mesa-commit mailing list