| From 9277e452081670674dd9fabb909971da3b00c7f4 Mon Sep 17 00:00:00 2001 |
| From: David Stevens <stevensd@chromium.org> |
| Date: Thu, 26 Nov 2020 13:15:55 +0900 |
| Subject: [PATCH 10/11] frontend/dri: plumb loader image cleanup callback |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Signed-off-by: David Stevens <stevensd@chromium.org> |
| Reviewed-by: Tapani Pรคlli <tapani.palli@intel.com> |
| Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7805> |
| --- |
| src/gallium/state_trackers/dri/dri2.c | 3 +++ |
| src/gallium/state_trackers/dri/dri_helpers.c | 13 +++++++++++++ |
| src/gallium/state_trackers/dri/dri_screen.h | 2 ++ |
| 3 files changed, 18 insertions(+) |
| |
| diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c |
| index 8b4402a74aa..b9f0bd35b47 100644 |
| --- a/src/gallium/state_trackers/dri/dri2.c |
| +++ b/src/gallium/state_trackers/dri/dri2.c |
| @@ -801,6 +801,7 @@ dri2_create_image_from_winsys(__DRIscreen *_screen, |
| img->layer = 0; |
| img->use = 0; |
| img->loader_private = loaderPrivate; |
| + img->sPriv = _screen; |
| |
| return img; |
| } |
| @@ -1012,6 +1013,7 @@ dri2_create_image_common(__DRIscreen *_screen, |
| img->use = use; |
| |
| img->loader_private = loaderPrivate; |
| + img->sPriv = _screen; |
| return img; |
| } |
| |
| @@ -1260,6 +1262,7 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate) |
| /* This should be 0 for sub images, but dup is also used for base images. */ |
| img->dri_components = image->dri_components; |
| img->loader_private = loaderPrivate; |
| + img->sPriv = image->sPriv; |
| |
| return img; |
| } |
| diff --git a/src/gallium/state_trackers/dri/dri_helpers.c b/src/gallium/state_trackers/dri/dri_helpers.c |
| index 90a8a392fad..615fc70c1e1 100644 |
| --- a/src/gallium/state_trackers/dri/dri_helpers.c |
| +++ b/src/gallium/state_trackers/dri/dri_helpers.c |
| @@ -296,6 +296,7 @@ dri2_create_image_from_renderbuffer2(__DRIcontext *context, |
| |
| img->dri_format = driGLFormatToImageFormat(rb->Format); |
| img->loader_private = loaderPrivate; |
| + img->sPriv = context->driScreenPriv; |
| |
| pipe_resource_reference(&img->texture, tex); |
| |
| @@ -315,6 +316,17 @@ dri2_create_image_from_renderbuffer(__DRIcontext *context, |
| void |
| dri2_destroy_image(__DRIimage *img) |
| { |
| + const __DRIimageLoaderExtension *imgLoader = img->sPriv->image.loader; |
| + const __DRIdri2LoaderExtension *dri2Loader = img->sPriv->dri2.loader; |
| + |
| + if (imgLoader && imgLoader->base.version >= 4 && |
| + imgLoader->destroyLoaderImageState) { |
| + imgLoader->destroyLoaderImageState(img->loader_private); |
| + } else if (dri2Loader && dri2Loader->base.version >= 5 && |
| + dri2Loader->destroyLoaderImageState) { |
| + dri2Loader->destroyLoaderImageState(img->loader_private); |
| + } |
| + |
| pipe_resource_reference(&img->texture, NULL); |
| FREE(img); |
| } |
| @@ -373,6 +385,7 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture, |
| img->dri_format = driGLFormatToImageFormat(obj->Image[face][level]->TexFormat); |
| |
| img->loader_private = loaderPrivate; |
| + img->sPriv = context->driScreenPriv; |
| |
| pipe_resource_reference(&img->texture, tex); |
| |
| diff --git a/src/gallium/state_trackers/dri/dri_screen.h b/src/gallium/state_trackers/dri/dri_screen.h |
| index 1586439bba3..be8a5141237 100644 |
| --- a/src/gallium/state_trackers/dri/dri_screen.h |
| +++ b/src/gallium/state_trackers/dri/dri_screen.h |
| @@ -118,6 +118,8 @@ struct __DRIimageRec { |
| enum __DRIChromaSiting horizontal_siting; |
| enum __DRIChromaSiting vertical_siting; |
| |
| + /* DRI loader screen */ |
| + __DRIscreen *sPriv; |
| }; |
| |
| static inline boolean |
| -- |
| 2.29.2.684.gfbc64c5ab5-goog |
| |