]> code.ossystems Code Review - openembedded-core.git/commitdiff
mesa: Fix v3d & vc4 dmabuf import
authorJoshua Watt <JPEWhacker@gmail.com>
Tue, 27 Jul 2021 17:24:43 +0000 (12:24 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 28 Jul 2021 22:46:56 +0000 (23:46 +0100)
Mesa would unnecessarily fail in the v3d and vc4 driver if a dmabuf
could not imported for scanout. In particular, this meant the
weston-simple-dmabuf-egl test program would fail on a Raspberry Pi.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-graphics/mesa/files/0001-v3d-vc4-Fix-dmabuf-import-for-non-scanout-buffers.patch [new file with mode: 0644]
meta/recipes-graphics/mesa/mesa.inc

diff --git a/meta/recipes-graphics/mesa/files/0001-v3d-vc4-Fix-dmabuf-import-for-non-scanout-buffers.patch b/meta/recipes-graphics/mesa/files/0001-v3d-vc4-Fix-dmabuf-import-for-non-scanout-buffers.patch
new file mode 100644 (file)
index 0000000..1a87710
--- /dev/null
@@ -0,0 +1,72 @@
+From 303c02a31df4e2b8f6090e75982922a9cba33e4c Mon Sep 17 00:00:00 2001
+From: Joshua Watt <JPEWhacker@gmail.com>
+Date: Tue, 27 Jul 2021 11:41:53 -0500
+Subject: [PATCH] v3d, vc4: Fix dmabuf import for non-scanout buffers
+
+Failure to create a buffer for scanout should not be fatal when
+importing a buffer. Buffers allocated from a render-only device may not
+be able to scanned out directly but can still be used for other
+rendering purposes (e.g. as a texture).
+
+Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12081]
+---
+ src/gallium/drivers/v3d/v3d_resource.c | 13 +++++--------
+ src/gallium/drivers/vc4/vc4_resource.c |  3 ---
+ 2 files changed, 5 insertions(+), 11 deletions(-)
+
+diff --git a/src/gallium/drivers/v3d/v3d_resource.c b/src/gallium/drivers/v3d/v3d_resource.c
+index 602ba6d8447..02dc29ae6a0 100644
+--- a/src/gallium/drivers/v3d/v3d_resource.c
++++ b/src/gallium/drivers/v3d/v3d_resource.c
+@@ -433,10 +433,11 @@ v3d_resource_get_handle(struct pipe_screen *pscreen,
+                 return v3d_bo_flink(bo, &whandle->handle);
+         case WINSYS_HANDLE_TYPE_KMS:
+                 if (screen->ro) {
+-                        assert(rsc->scanout);
+-                        bool ok = renderonly_get_handle(rsc->scanout, whandle);
+-                        whandle->stride = rsc->slices[0].stride;
+-                        return ok;
++                        if (renderonly_get_handle(rsc->scanout, whandle)) {
++                                whandle->stride = rsc->slices[0].stride;
++                                return true;
++                        }
++                        return false;
+                 }
+                 whandle->handle = bo->handle;
+                 return true;
+@@ -929,10 +930,6 @@ v3d_resource_from_handle(struct pipe_screen *pscreen,
+                         renderonly_create_gpu_import_for_resource(prsc,
+                                                                   screen->ro,
+                                                                   NULL);
+-                if (!rsc->scanout) {
+-                        fprintf(stderr, "Failed to create scanout resource.\n");
+-                        goto fail;
+-                }
+         }
+         if (rsc->tiled && whandle->stride != slice->stride) {
+diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
+index 61e5fd7e5a6..bf3f7656ff8 100644
+--- a/src/gallium/drivers/vc4/vc4_resource.c
++++ b/src/gallium/drivers/vc4/vc4_resource.c
+@@ -320,7 +320,6 @@ vc4_resource_get_handle(struct pipe_screen *pscreen,
+                 return vc4_bo_flink(rsc->bo, &whandle->handle);
+         case WINSYS_HANDLE_TYPE_KMS:
+                 if (screen->ro) {
+-                        assert(rsc->scanout);
+                         return renderonly_get_handle(rsc->scanout, whandle);
+                 }
+                 whandle->handle = rsc->bo->handle;
+@@ -689,8 +688,6 @@ vc4_resource_from_handle(struct pipe_screen *pscreen,
+                         renderonly_create_gpu_import_for_resource(prsc,
+                                                                   screen->ro,
+                                                                   NULL);
+-                if (!rsc->scanout)
+-                        goto fail;
+         }
+         if (rsc->tiled && whandle->stride != slice->stride) {
+-- 
+2.32.0
+
index 6a0df4fa2ec6172182ab4d21cbf05f945d0683f9..85a352f73652ebef9650006b5737c3dd03e01c9e 100644 (file)
@@ -19,6 +19,7 @@ SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
            file://0002-meson.build-make-TLS-ELF-optional.patch \
            file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
            file://0001-futex.h-Define-__NR_futex-if-it-does-not-exist.patch \
+           file://0001-v3d-vc4-Fix-dmabuf-import-for-non-scanout-buffers.patch \
            "
 
 SRC_URI[sha256sum] = "022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d"