zink: ensure sampler-views survive a batch
[mesa.git] / src / gallium / drivers / zink / zink_batch.c
index 0db58c6a8810242550e2fe99a1e7fe55e00dd0ce..45466af5699f2617d5200faf04c1c8c405f0f294 100644 (file)
@@ -30,6 +30,13 @@ reset_batch(struct zink_screen *screen, struct zink_batch *batch)
    }
    _mesa_set_clear(batch->resources, NULL);
 
+   /* unref all used sampler-views */
+   set_foreach(batch->sampler_views, entry) {
+      struct pipe_sampler_view *pres = (struct pipe_sampler_view *)entry->key;
+      pipe_sampler_view_reference(&pres, NULL);
+   }
+   _mesa_set_clear(batch->sampler_views, NULL);
+
    util_dynarray_foreach(&batch->zombie_samplers, VkSampler, samp) {
       vkDestroySampler(screen->dev, *samp, NULL);
    }
@@ -97,3 +104,15 @@ zink_batch_reference_resoure(struct zink_batch *batch,
       pipe_resource_reference(&tmp, &res->base);
    }
 }
+
+void
+zink_batch_reference_sampler_view(struct zink_batch *batch,
+                                  struct zink_sampler_view *sv)
+{
+   struct set_entry *entry = _mesa_set_search(batch->sampler_views, sv);
+   if (!entry) {
+      struct pipe_sampler_view *tmp = NULL;
+      entry = _mesa_set_add(batch->sampler_views, sv);
+      pipe_sampler_view_reference(&tmp, &sv->base);
+   }
+}