mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00:00
xwayland: add workaround for drivers that don't support impicit sync
Without either implicit or explicit synchronization, the result of rendering is
pretty much undefined, and many glitches can appear. This still doesn't synchronize
buffer release, but it works around most glitches until explicit sync is supported.
Signed-off-by: Xaver Hugl <xaver.hugl@kde.org>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/967>
(cherry picked from commit d411a8b611)
This commit is contained in:
committed by
Alan Coopersmith
parent
ccf200ac97
commit
9d0d57d74b
@@ -695,7 +695,10 @@ xwl_present_check_flip(RRCrtcPtr crtc,
|
||||
if (xwl_window->xwl_screen->glamor &&
|
||||
!xwl_glamor_check_flip(present_window, pixmap))
|
||||
return FALSE;
|
||||
#endif
|
||||
|
||||
if (!xwl_glamor_supports_implicit_sync(xwl_window->xwl_screen))
|
||||
return FALSE;
|
||||
#endif /* XWL_HAS_GLAMOR */
|
||||
|
||||
/* Can't flip if the window pixmap doesn't match the xwl_window parent
|
||||
* window's, e.g. because a client redirected this window or one of its
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
#include "xwayland-pixmap.h"
|
||||
#include "xwayland-screen.h"
|
||||
#include "xwayland-window-buffers.h"
|
||||
#ifdef XWL_HAS_GLAMOR
|
||||
#include "glamor.h"
|
||||
#endif
|
||||
|
||||
#define BUFFER_TIMEOUT 1 * 1000 /* ms */
|
||||
|
||||
@@ -384,6 +387,12 @@ xwl_window_swap_pixmap(struct xwl_window *xwl_window)
|
||||
|
||||
/* Hold a reference on the buffer until it's released by the compositor */
|
||||
xwl_window_buffer->refcnt++;
|
||||
|
||||
#ifdef XWL_HAS_GLAMOR
|
||||
if (!xwl_glamor_supports_implicit_sync(xwl_screen)) {
|
||||
glamor_finish(xwl_screen->screen);
|
||||
}
|
||||
#endif /* XWL_HAS_GLAMOR */
|
||||
xwl_pixmap_set_buffer_release_cb(xwl_window_buffer->pixmap,
|
||||
xwl_window_buffer_release_callback,
|
||||
xwl_window_buffer);
|
||||
|
||||
Reference in New Issue
Block a user