meta-core/recipes-graphics/mesa: Backport a fix from 22.2.5 80/28580/4
authorMarius Vlad <marius.vlad@collabora.com>
Tue, 28 Mar 2023 14:27:24 +0000 (17:27 +0300)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Fri, 31 Mar 2023 21:49:45 +0000 (21:49 +0000)
This adds
0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch which is
a backport from mesa 22.2.5 as a tentative fix for running on virgl on the x86
platform.

This issue seems have been fixed 22.2.4 and 22.2.5, but the original
change was initially quite a long time before in 22.0.X and we seem to
be using 22.0.3.

This also seems to affect Xen when updating it from 4.16 to 4.18.

Bug-AGL: SPEC-4724
Change-Id: I255e30d8e513b8f3bbfa720a24c1afcbd40af2c9
Reported-by: Rahul Kumar <Rahul.Kumar1@amd.com>
Tested-by: Rahul Kumar <Rahul.Kumar1@amd.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/28580
Tested-by: Jenkins Job builder account
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch [new file with mode: 0644]
meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend

diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch
new file mode 100644 (file)
index 0000000..9d6b2f3
--- /dev/null
@@ -0,0 +1,48 @@
+From f50ff0b5cf2bfedfc2fd660ccfbfd5cfc3c131d1 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Tue, 28 Mar 2023 15:33:26 +0300
+Subject: [PATCH] virgl: don't a use staging when a resources created with the
+ shared flag
+
+There seems to be a problem with running firefox by using Xwayland that
+results in a shared resources being not always tagged as using staging.
+
+As a result one process tries to map the resource that was allocated as
+one that uses staging without actually using the staging resource, and
+hence the mapped range only accounts for the small region that we have
+to allocated because a zero-allocation doesn't work, but the application
+mapping the resource assumes that a properly sized range is mapped, and
+consequently this results in invalid memory access.
+
+To work around this issue disable creating staging for resources that
+are created by using shared binding. It is not clear to me whether this
+is the best fix, but it seems to quell the issue.
+
+Fixes: c9d99b7eec7ec14d6d71d381a424b6280d75a882
+virgl: Fix texture transfers by using a staging resource
+
+Related: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/291
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19655>
+(cherry picked from commit e496d24cb2d5339566c08c79a8aa7809c240613c)
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+(cherry picked from commit 39e9ea1419beb22ab7f4913b6d55f845f94d689a)
+---
+ src/gallium/drivers/virgl/virgl_resource.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
+index 7185c9a90ff..257b790d437 100644
+--- a/src/gallium/drivers/virgl/virgl_resource.c
++++ b/src/gallium/drivers/virgl/virgl_resource.c
+@@ -100,6 +100,7 @@ static bool virgl_can_copy_transfer_from_host(struct virgl_screen *vs,
+ {
+    return virgl_can_use_staging(vs, res) &&
+          !is_stencil_array(res) &&
++       !(bind & VIRGL_BIND_SHARED) &&
+          virgl_has_readback_format(&vs->base, pipe_to_virgl_format(res->b.format), false) &&
+          ((!(vs->caps.caps.v2.capability_bits & VIRGL_CAP_FAKE_FP64)) ||
+           virgl_can_readback_from_rendertarget(vs, res) ||
+-- 
+2.35.1
+
index 3d5903d..27dd783 100644 (file)
@@ -1 +1,5 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch"
+
 require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}