mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
ui/gtk-egl: Wait for the draw signal for dmabuf blobs
Instead of immediately drawing and submitting, queue and wait for the draw signal if the dmabuf submitted is a blob. Cc: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Message-Id: <20210914211837.3229977-5-vivek.kasireddy@intel.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
65b847d284
commit
ab971f8abb
@ -182,6 +182,8 @@ void gd_egl_cursor_dmabuf(DisplayChangeListener *dcl,
|
||||
uint32_t hot_x, uint32_t hot_y);
|
||||
void gd_egl_cursor_position(DisplayChangeListener *dcl,
|
||||
uint32_t pos_x, uint32_t pos_y);
|
||||
void gd_egl_flush(DisplayChangeListener *dcl,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
|
||||
void gd_egl_scanout_flush(DisplayChangeListener *dcl,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
|
||||
void gtk_egl_init(DisplayGLMode mode);
|
||||
|
15
ui/gtk-egl.c
15
ui/gtk-egl.c
@ -309,6 +309,21 @@ void gd_egl_scanout_flush(DisplayChangeListener *dcl,
|
||||
eglSwapBuffers(qemu_egl_display, vc->gfx.esurface);
|
||||
}
|
||||
|
||||
void gd_egl_flush(DisplayChangeListener *dcl,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h)
|
||||
{
|
||||
VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
|
||||
GtkWidget *area = vc->gfx.drawing_area;
|
||||
|
||||
if (vc->gfx.guest_fb.dmabuf) {
|
||||
graphic_hw_gl_block(vc->gfx.dcl.con, true);
|
||||
gtk_widget_queue_draw_area(area, x, y, w, h);
|
||||
return;
|
||||
}
|
||||
|
||||
gd_egl_scanout_flush(&vc->gfx.dcl, x, y, w, h);
|
||||
}
|
||||
|
||||
void gtk_egl_init(DisplayGLMode mode)
|
||||
{
|
||||
GdkDisplay *gdk_display = gdk_display_get_default();
|
||||
|
2
ui/gtk.c
2
ui/gtk.c
@ -637,7 +637,7 @@ static const DisplayChangeListenerOps dcl_egl_ops = {
|
||||
.dpy_gl_scanout_dmabuf = gd_egl_scanout_dmabuf,
|
||||
.dpy_gl_cursor_dmabuf = gd_egl_cursor_dmabuf,
|
||||
.dpy_gl_cursor_position = gd_egl_cursor_position,
|
||||
.dpy_gl_update = gd_egl_scanout_flush,
|
||||
.dpy_gl_update = gd_egl_flush,
|
||||
.dpy_gl_release_dmabuf = gd_gl_release_dmabuf,
|
||||
.dpy_has_dmabuf = gd_has_dmabuf,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user