summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compositor-drm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 11219233..6732c1b0 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -167,6 +167,7 @@ struct drm_output {
int vblank_pending;
int page_flip_pending;
int destroy_pending;
+ int force_modeset;
struct gbm_surface *surface;
struct gbm_bo *cursor_bo[2];
@@ -613,7 +614,8 @@ drm_output_repaint(struct weston_output *output_base,
mode = container_of(output->base.current_mode, struct drm_mode, base);
if (!output->current ||
- output->current->stride != output->next->stride) {
+ output->current->stride != output->next->stride ||
+ output->force_modeset) {
ret = drmModeSetCrtc(compositor->drm.fd, output->crtc_id,
output->next->fb_id, 0, 0,
&output->connector_id, 1,
@@ -623,6 +625,7 @@ drm_output_repaint(struct weston_output *output_base,
goto err_pageflip;
}
output_base->set_dpms(output_base, WESTON_DPMS_ON);
+ output->force_modeset = 0;
}
if (drmModePageFlip(compositor->drm.fd, output->crtc_id,
@@ -2727,8 +2730,11 @@ switch_to_gl_renderer(struct drm_compositor *c)
assert(0);
}
- wl_list_for_each(output, &c->base.output_list, base.link)
+ wl_list_for_each(output, &c->base.output_list, base.link) {
+ /* Workaround page flip not setting the tiling mode on BYT */
+ output->force_modeset = 1;
drm_output_init_egl(output, c);
+ }
c->use_pixman = 0;
}