From 858b329c2cdf43269e083e0861eee2abbf802b4c Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Mon, 25 Apr 2016 15:49:28 -0400 Subject: [PATCH] vl/dri3: add support for resizing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When drawable size changed, PresentConfigureNotify event will be emitted, by handling the event to re-allocate resized buffer. Signed-off-by: Leo Liu Reviewed-by: Alex Deucher Reviewed-by: Christian König --- src/gallium/auxiliary/vl/vl_winsys_dri3.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c b/src/gallium/auxiliary/vl/vl_winsys_dri3.c index a370315..8bdfe82 100644 --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c @@ -91,7 +91,9 @@ dri3_handle_present_event(struct vl_dri3_screen *scrn, { switch (ge->evtype) { case XCB_PRESENT_CONFIGURE_NOTIFY: { - /* TODO */ + xcb_present_configure_notify_event_t *ce = (void *) ge; + scrn->width = ce->width; + scrn->height = ce->height; break; } case XCB_PRESENT_COMPLETE_NOTIFY: { @@ -249,12 +251,19 @@ dri3_get_back_buffer(struct vl_dri3_screen *scrn) return NULL; buffer = scrn->back_buffers[scrn->cur_back]; - if (!buffer) { - buffer = dri3_alloc_back_buffer(scrn); - if (!buffer) + if (!buffer || buffer->width != scrn->width || + buffer->height != scrn->height) { + struct vl_dri3_buffer *new_buffer; + + new_buffer = dri3_alloc_back_buffer(scrn); + if (!new_buffer) return NULL; + if (buffer) + dri3_free_back_buffer(scrn, buffer); + vl_compositor_reset_dirty_area(&scrn->dirty_areas[scrn->cur_back]); + buffer = new_buffer; scrn->back_buffers[scrn->cur_back] = buffer; } -- 2.7.4