diff options
author | Leo Liu <[email protected]> | 2016-04-25 13:06:20 -0400 |
---|---|---|
committer | Leo Liu <[email protected]> | 2016-05-16 16:28:51 -0400 |
commit | 672e8d5e7ee63ebb69ffdc635210f06f68cb4d8a (patch) | |
tree | febae3b00b71b9d63787b88946706600a12d836c /src | |
parent | 12e5220e34677e19b7dfce95c9370bab814d2ee8 (diff) |
vl/dri3: set drawable geometry
Signed-off-by: Leo Liu <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/vl/vl_winsys_dri3.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c b/src/gallium/auxiliary/vl/vl_winsys_dri3.c index 74f38915fb5..980b3b60996 100644 --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c @@ -44,8 +44,36 @@ struct vl_dri3_screen struct vl_screen base; xcb_connection_t *conn; xcb_drawable_t drawable; + + uint32_t width, height, depth; }; +static bool +dri3_set_drawable(struct vl_dri3_screen *scrn, Drawable drawable) +{ + xcb_get_geometry_cookie_t geom_cookie; + xcb_get_geometry_reply_t *geom_reply; + + assert(drawable); + + if (scrn->drawable == drawable) + return true; + + scrn->drawable = drawable; + + geom_cookie = xcb_get_geometry(scrn->conn, scrn->drawable); + geom_reply = xcb_get_geometry_reply(scrn->conn, geom_cookie, NULL); + if (!geom_reply) + return false; + + scrn->width = geom_reply->width; + scrn->height = geom_reply->height; + scrn->depth = geom_reply->depth; + free(geom_reply); + + return true; +} + static void vl_dri3_flush_frontbuffer(struct pipe_screen *screen, struct pipe_resource *resource, @@ -59,6 +87,13 @@ vl_dri3_flush_frontbuffer(struct pipe_screen *screen, static struct pipe_resource * vl_dri3_screen_texture_from_drawable(struct vl_screen *vscreen, void *drawable) { + struct vl_dri3_screen *scrn = (struct vl_dri3_screen *)vscreen; + + assert(scrn); + + if (!dri3_set_drawable(scrn, (Drawable)drawable)) + return NULL; + /* TODO */ return NULL; } |