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);

Reply via email to