diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2018-03-06 10:09:50 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2018-03-12 09:00:34 +0100 |
commit | 70763fea4fbbe2984fd2a8f6ce9c77114af80792 (patch) | |
tree | 7d3ba040a4e90faaa126fdd625dedcc5870e41b3 | |
parent | 4c70280592f5357c66f95173ec907920f48c99fa (diff) | |
download | qemu-70763fea4fbbe2984fd2a8f6ce9c77114af80792.zip qemu-70763fea4fbbe2984fd2a8f6ce9c77114af80792.tar.gz qemu-70763fea4fbbe2984fd2a8f6ce9c77114af80792.tar.bz2 |
ui/gtk-egl: add scanout_dmabuf support
Add support for dmabuf scanouts to gtk-egl.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 20180306090951.22932-6-kraxel@redhat.com
-rw-r--r-- | include/ui/gtk.h | 4 | ||||
-rw-r--r-- | ui/gtk-egl.c | 23 | ||||
-rw-r--r-- | ui/gtk.c | 2 |
3 files changed, 29 insertions, 0 deletions
diff --git a/include/ui/gtk.h b/include/ui/gtk.h index f6dafc5..84c992c 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -113,6 +113,10 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl, uint32_t backing_height, uint32_t x, uint32_t y, uint32_t w, uint32_t h); +void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl, + QemuDmaBuf *dmabuf); +void gd_egl_release_dmabuf(DisplayChangeListener *dcl, + QemuDmaBuf *dmabuf); void gd_egl_scanout_flush(DisplayChangeListener *dcl, uint32_t x, uint32_t y, uint32_t w, uint32_t h); void gtk_egl_init(void); diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index eb86c26..2c83c22 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -194,6 +194,29 @@ void gd_egl_scanout_texture(DisplayChangeListener *dcl, backing_id, false); } +void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl, + QemuDmaBuf *dmabuf) +{ +#ifdef CONFIG_OPENGL_DMABUF + egl_dmabuf_import_texture(dmabuf); + if (!dmabuf->texture) { + return; + } + + gd_egl_scanout_texture(dcl, dmabuf->texture, + false, dmabuf->width, dmabuf->height, + 0, 0, dmabuf->width, dmabuf->height); +#endif +} + +void gd_egl_release_dmabuf(DisplayChangeListener *dcl, + QemuDmaBuf *dmabuf) +{ +#ifdef CONFIG_OPENGL_DMABUF + egl_dmabuf_release_texture(dmabuf); +#endif +} + void gd_egl_scanout_flush(DisplayChangeListener *dcl, uint32_t x, uint32_t y, uint32_t w, uint32_t h) { @@ -744,6 +744,8 @@ static const DisplayChangeListenerOps dcl_egl_ops = { .dpy_gl_ctx_get_current = qemu_egl_get_current_context, .dpy_gl_scanout_disable = gd_egl_scanout_disable, .dpy_gl_scanout_texture = gd_egl_scanout_texture, + .dpy_gl_scanout_dmabuf = gd_egl_scanout_dmabuf, + .dpy_gl_release_dmabuf = gd_egl_release_dmabuf, .dpy_gl_update = gd_egl_scanout_flush, }; |