diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-06-27 10:51:48 +0200 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-06-27 11:02:47 +0200 |
commit | 0e83890b5eae0236537d844c60375072210995d9 (patch) | |
tree | e94b42da2c2b533d73615a6dd77dcc488e93250b | |
parent | 82cae20c84ed3b65ed1f3ddb47f041412f4edf81 (diff) |
eglkms: Restore saved crtc
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=38473
-rw-r--r-- | 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 0dfb4775..438b4c5e 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, |