summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2011-06-27 10:51:48 +0200
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2011-06-27 11:02:47 +0200
commit0e83890b5eae0236537d844c60375072210995d9 (patch)
treee94b42da2c2b533d73615a6dd77dcc488e93250b
parent82cae20c84ed3b65ed1f3ddb47f041412f4edf81 (diff)
eglkms: Restore saved crtc
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=38473
-rw-r--r--src/egl/opengl/eglkms.c16
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,