xwayland/present: Redirect surface window as needed for page flips
It's needed when the surface window is a depth 24 descendant of a depth 32 toplevel window. xwl_source_validate ensures the toplevel window pixmap has valid contents when a client reads from it, or when the window hierarchy / geometry changes. It's never called in the normal fullscreen application case, so there's no GPU copy overhead with that. v2: * Don't try to redirect a depth 32 descendant of different-depth ancestors, the alpha channel wouldn't be handled correctly. (Olivier Fourdan) Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1300>
This commit is contained in:
parent
4495c696b5
commit
c7d56b0e29
|
@ -46,6 +46,7 @@
|
|||
#include "xwayland-dmabuf.h"
|
||||
#include "xwayland-glamor.h"
|
||||
#include "xwayland-glamor-gbm.h"
|
||||
#include "xwayland-present.h"
|
||||
#include "xwayland-screen.h"
|
||||
#include "xwayland-window.h"
|
||||
#include "xwayland-window-buffers.h"
|
||||
|
@ -96,8 +97,12 @@ xwl_glamor_check_flip(WindowPtr present_window, PixmapPtr pixmap)
|
|||
ScreenPtr screen = pixmap->drawable.pScreen;
|
||||
PixmapPtr backing_pixmap = screen->GetWindowPixmap(present_window);
|
||||
|
||||
if (pixmap->drawable.depth != backing_pixmap->drawable.depth)
|
||||
return FALSE;
|
||||
if (pixmap->drawable.depth != backing_pixmap->drawable.depth) {
|
||||
if (pixmap->drawable.depth == 32)
|
||||
return FALSE;
|
||||
|
||||
return xwl_present_maybe_redirect_window(present_window, pixmap);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue