Patrick Williams | 213cb26 | 2021-08-07 19:21:33 -0500 | [diff] [blame] | 1 | From 303c02a31df4e2b8f6090e75982922a9cba33e4c Mon Sep 17 00:00:00 2001 |
| 2 | From: Joshua Watt <JPEWhacker@gmail.com> |
| 3 | Date: Tue, 27 Jul 2021 11:41:53 -0500 |
| 4 | Subject: [PATCH] v3d, vc4: Fix dmabuf import for non-scanout buffers |
| 5 | |
| 6 | Failure to create a buffer for scanout should not be fatal when |
| 7 | importing a buffer. Buffers allocated from a render-only device may not |
| 8 | be able to scanned out directly but can still be used for other |
| 9 | rendering purposes (e.g. as a texture). |
| 10 | |
| 11 | Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> |
| 12 | Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12081] |
| 13 | --- |
| 14 | src/gallium/drivers/v3d/v3d_resource.c | 13 +++++-------- |
| 15 | src/gallium/drivers/vc4/vc4_resource.c | 3 --- |
| 16 | 2 files changed, 5 insertions(+), 11 deletions(-) |
| 17 | |
| 18 | diff --git a/src/gallium/drivers/v3d/v3d_resource.c b/src/gallium/drivers/v3d/v3d_resource.c |
| 19 | index 602ba6d8447..02dc29ae6a0 100644 |
| 20 | --- a/src/gallium/drivers/v3d/v3d_resource.c |
| 21 | +++ b/src/gallium/drivers/v3d/v3d_resource.c |
| 22 | @@ -433,10 +433,11 @@ v3d_resource_get_handle(struct pipe_screen *pscreen, |
| 23 | return v3d_bo_flink(bo, &whandle->handle); |
| 24 | case WINSYS_HANDLE_TYPE_KMS: |
| 25 | if (screen->ro) { |
| 26 | - assert(rsc->scanout); |
| 27 | - bool ok = renderonly_get_handle(rsc->scanout, whandle); |
| 28 | - whandle->stride = rsc->slices[0].stride; |
| 29 | - return ok; |
| 30 | + if (renderonly_get_handle(rsc->scanout, whandle)) { |
| 31 | + whandle->stride = rsc->slices[0].stride; |
| 32 | + return true; |
| 33 | + } |
| 34 | + return false; |
| 35 | } |
| 36 | whandle->handle = bo->handle; |
| 37 | return true; |
| 38 | @@ -929,10 +930,6 @@ v3d_resource_from_handle(struct pipe_screen *pscreen, |
| 39 | renderonly_create_gpu_import_for_resource(prsc, |
| 40 | screen->ro, |
| 41 | NULL); |
| 42 | - if (!rsc->scanout) { |
| 43 | - fprintf(stderr, "Failed to create scanout resource.\n"); |
| 44 | - goto fail; |
| 45 | - } |
| 46 | } |
| 47 | |
| 48 | if (rsc->tiled && whandle->stride != slice->stride) { |
| 49 | diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c |
| 50 | index 61e5fd7e5a6..bf3f7656ff8 100644 |
| 51 | --- a/src/gallium/drivers/vc4/vc4_resource.c |
| 52 | +++ b/src/gallium/drivers/vc4/vc4_resource.c |
| 53 | @@ -320,7 +320,6 @@ vc4_resource_get_handle(struct pipe_screen *pscreen, |
| 54 | return vc4_bo_flink(rsc->bo, &whandle->handle); |
| 55 | case WINSYS_HANDLE_TYPE_KMS: |
| 56 | if (screen->ro) { |
| 57 | - assert(rsc->scanout); |
| 58 | return renderonly_get_handle(rsc->scanout, whandle); |
| 59 | } |
| 60 | whandle->handle = rsc->bo->handle; |
| 61 | @@ -689,8 +688,6 @@ vc4_resource_from_handle(struct pipe_screen *pscreen, |
| 62 | renderonly_create_gpu_import_for_resource(prsc, |
| 63 | screen->ro, |
| 64 | NULL); |
| 65 | - if (!rsc->scanout) |
| 66 | - goto fail; |
| 67 | } |
| 68 | |
| 69 | if (rsc->tiled && whandle->stride != slice->stride) { |
| 70 | -- |
| 71 | 2.32.0 |
| 72 | |