Blame SOURCES/0005-xwayland-eglstream-fix-X11-rendering-to-flipping-GL-.patch

4c4b8b
From 43d1648dc71d01628a6a65a62364c1a3994a88a8 Mon Sep 17 00:00:00 2001
4c4b8b
From: Erik Kurzinger <ekurzinger@nvidia.com>
4c4b8b
Date: Tue, 27 Apr 2021 07:23:44 -0400
4c4b8b
Subject: [PATCH xserver 05/27] xwayland-eglstream: fix X11 rendering to
4c4b8b
 flipping GL / VK window
4c4b8b
MIME-Version: 1.0
4c4b8b
Content-Type: text/plain; charset=UTF-8
4c4b8b
Content-Transfer-Encoding: 8bit
4c4b8b
4c4b8b
If a window is being used for direct rendering with OpenGL or Vulkan, and is
4c4b8b
using the flipping path for presentation, it's pixmap will be set to a dma-buf
4c4b8b
backed pixmap created by the client-side GL driver. However, this means that
4c4b8b
xwl_glamor_eglstream_post_damage won't work since it requires that the pixmap
4c4b8b
has an EGLSurface that it can render to, which dma-buf backed pixmaps do not.
4c4b8b
4c4b8b
In this case, though, xwl_glamor_eglstream_post_damage is not necessary since
4c4b8b
glamor will have rendered directly to the pixmap, so we can simply pass it
4c4b8b
directly to the compositor. There's no need for the intermediate copy we
4c4b8b
normally do in that function.
4c4b8b
4c4b8b
Therefore, this change adds an early-return case to post_damage for dma-buf
4c4b8b
backed pixmaps, and removes the corresponding asserts from that function and
4c4b8b
allow_commits.
4c4b8b
4c4b8b
Signed-off-by: Erik Kurzinger <ekurzinger@nvidia.com>
4c4b8b
Acked-by: Olivier Fourdan <ofourdan@redhat.com>
4c4b8b
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
4c4b8b
(cherry picked from commit 4f6fbd5009ae533cf0b3bbe382502254f9276a01)
4c4b8b
---
4c4b8b
 hw/xwayland/xwayland-glamor-eglstream.c | 8 ++++++--
4c4b8b
 1 file changed, 6 insertions(+), 2 deletions(-)
4c4b8b
4c4b8b
diff --git a/hw/xwayland/xwayland-glamor-eglstream.c b/hw/xwayland/xwayland-glamor-eglstream.c
4c4b8b
index 2d8380e1f..17295f3bd 100644
4c4b8b
--- a/hw/xwayland/xwayland-glamor-eglstream.c
4c4b8b
+++ b/hw/xwayland/xwayland-glamor-eglstream.c
4c4b8b
@@ -576,7 +576,6 @@ xwl_glamor_eglstream_allow_commits(struct xwl_window *xwl_window)
4c4b8b
     struct xwl_pixmap *xwl_pixmap = xwl_pixmap_get(pixmap);
4c4b8b
 
4c4b8b
     if (xwl_pixmap) {
4c4b8b
-        assert(xwl_pixmap->type == XWL_PIXMAP_EGLSTREAM);
4c4b8b
         if (pending) {
4c4b8b
             /* Wait for the compositor to finish connecting the consumer for
4c4b8b
              * this eglstream */
4c4b8b
@@ -615,7 +614,12 @@ xwl_glamor_eglstream_post_damage(struct xwl_window *xwl_window,
4c4b8b
     };
4c4b8b
     GLint saved_vao;
4c4b8b
 
4c4b8b
-    assert(xwl_pixmap->type == XWL_PIXMAP_EGLSTREAM);
4c4b8b
+    if (xwl_pixmap->type != XWL_PIXMAP_EGLSTREAM)
4c4b8b
+        /* This can happen if a client does X11 rendering on a
4c4b8b
+         * flipping OpenGL or Vulkan window. In that case, we don't
4c4b8b
+         * need to do the copy below.
4c4b8b
+         */
4c4b8b
+        return;
4c4b8b
 
4c4b8b
     /* Unbind the framebuffer BEFORE binding the EGLSurface, otherwise we
4c4b8b
      * won't actually draw to it
4c4b8b
-- 
4c4b8b
2.31.1
4c4b8b