Module: Mesa Branch: main Commit: 20902d1ed685e97e135f4a16531793ddb7b4db69 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=20902d1ed685e97e135f4a16531793ddb7b4db69
Author: Dave Airlie <[email protected]> Date: Thu Jan 12 06:44:19 2023 +1000 lavapipe: fix descriptor set layout reference counting in layout merge When taking the descriptor set layouts from the pipeline layout, make sure to take references Fixes: d4d5a7abba7a ("lavapipe: implement EXT_graphics_pipeline_library") Reviewed-by: Mike Blumenkrantz <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20630> --- src/gallium/frontends/lavapipe/lvp_pipeline.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 51293be245e..58eb8b72617 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -681,6 +681,10 @@ merge_layouts(struct lvp_pipeline *dst, struct lvp_pipeline_layout *src) /* no layout created yet: copy onto ralloc ctx allocation for auto-free */ dst->layout = ralloc(dst->mem_ctx, struct lvp_pipeline_layout); memcpy(dst->layout, src, sizeof(struct lvp_pipeline_layout)); + for (unsigned i = 0; i < dst->layout->vk.set_count; i++) { + if (dst->layout->vk.set_layouts[i]) + vk_descriptor_set_layout_ref(dst->layout->vk.set_layouts[i]); + } return; } #ifndef NDEBUG @@ -703,8 +707,10 @@ merge_layouts(struct lvp_pipeline *dst, struct lvp_pipeline_layout *src) } #endif for (unsigned i = 0; i < src->vk.set_count; i++) { - if (!dst->layout->vk.set_layouts[i]) + if (!dst->layout->vk.set_layouts[i]) { dst->layout->vk.set_layouts[i] = src->vk.set_layouts[i]; + vk_descriptor_set_layout_ref(src->vk.set_layouts[i]); + } } dst->layout->vk.set_count = MAX2(dst->layout->vk.set_count, src->vk.set_count);
