mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 05:35:39 +00:00
ui/gtk-gl-area: Remove extra draw call in refresh
This partially reverts commit77bf310084which causes some guest display corruption when gtk-gl-area is used for GTK rendering (e.g. Wayland Compositor) possibly due to simulataneous accesses on the guest frame buffer by host compositor and the guest. Fixes:77bf310084("ui/gtk: Draw guest frame at refresh cycle") Reported-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Reported-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> Message-Id: <20250214170813.2234754-1-dongwon.kim@intel.com> Message-ID: <20250603110204.838117-12-alex.bennee@linaro.org> Cc: qemu-stable@nongnu.org Message-ID: <20251016150357.876415-6-alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
@@ -165,7 +165,22 @@ void gd_gl_area_refresh(DisplayChangeListener *dcl)
|
||||
|
||||
if (vc->gfx.guest_fb.dmabuf &&
|
||||
qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) {
|
||||
gd_gl_area_draw(vc);
|
||||
/*
|
||||
* gd_egl_refresh() calls gd_egl_draw() if a DMA-BUF draw has already
|
||||
* been submitted, but this function does not call gd_gl_area_draw() in
|
||||
* such a case due to display corruption.
|
||||
*
|
||||
* Calling gd_gl_area_draw() is necessary to prevent a situation where
|
||||
* there is a scheduled draw event but it won't happen bacause the window
|
||||
* is currently in inactive state (minimized or tabified). If draw is not
|
||||
* done for a long time, gl_block timeout and/or fence timeout (on the
|
||||
* guest) will happen eventually.
|
||||
*
|
||||
* However, it is found that calling gd_gl_area_draw() here causes guest
|
||||
* display corruption on a Wayland Compositor. The display corruption is
|
||||
* more serious than the possible fence timeout so gd_gl_area_draw() is
|
||||
* omitted for now.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user