Mesa (staging/21.2): v3d, vc4: Fix dmabuf import for non-scanout buffers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jul 30 17:14:47 UTC 2021
Module: Mesa
Branch: staging/21.2
Commit: ca5fbe85170a661d180c623fb93a8fafe9848aca
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca5fbe85170a661d180c623fb93a8fafe9848aca
Author: Joshua Watt <JPEWhacker at gmail.com>
Date: Tue Jul 27 11:41:53 2021 -0500
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 at gmail.com>
Reviewed-by: Simon Ser <contact at emersion.fr>
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12081>
(cherry picked from commit 7bcb22363935431f1c8886608d9a77b3503fc5b4)
---
.pick_status.json | 2 +-
src/broadcom/ci/piglit-v3d-rpi4-fails.txt | 2 +-
src/gallium/drivers/v3d/v3d_resource.c | 13 +++++--------
src/gallium/drivers/vc4/vc4_resource.c | 3 ---
4 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index b0ff252710c..a9cd563b448 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -184,7 +184,7 @@
"description": "v3d, vc4: Fix dmabuf import for non-scanout buffers",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
diff --git a/src/broadcom/ci/piglit-v3d-rpi4-fails.txt b/src/broadcom/ci/piglit-v3d-rpi4-fails.txt
index 89c03381967..f335cf8f016 100644
--- a/src/broadcom/ci/piglit-v3d-rpi4-fails.txt
+++ b/src/broadcom/ci/piglit-v3d-rpi4-fails.txt
@@ -208,7 +208,7 @@ spec at ext_framebuffer_object@fbo-blending-formats,Fail
spec at ext_framebuffer_object@fbo-blending-formats at GL_RGB10,Fail
spec at ext_framebuffer_object@getteximage-formats init-by-clear-and-render,Fail
spec at ext_framebuffer_object@getteximage-formats init-by-rendering,Fail
-spec at ext_image_dma_buf_import@ext_image_dma_buf_import-export-tex,Crash
+spec at ext_image_dma_buf_import@ext_image_dma_buf_import-export-tex,Fail
spec at ext_packed_depth_stencil@texwrap formats bordercolor,Fail
spec at ext_packed_depth_stencil@texwrap formats bordercolor at GL_DEPTH24_STENCIL8- border color only,Fail
spec at ext_packed_depth_stencil@texwrap formats bordercolor-swizzled,Fail
diff --git a/src/gallium/drivers/v3d/v3d_resource.c b/src/gallium/drivers/v3d/v3d_resource.c
index 96dfcddf69d..62da3147620 100644
--- a/src/gallium/drivers/v3d/v3d_resource.c
+++ b/src/gallium/drivers/v3d/v3d_resource.c
@@ -432,10 +432,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;
@@ -928,10 +929,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 8ecfb9507e6..af61c4860b8 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) {
More information about the mesa-commit
mailing list