zink: don't leak sampler view textures
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 3 Jul 2020 17:34:34 +0000 (13:34 -0400)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 14 Oct 2020 13:20:39 +0000 (09:20 -0400)
by adding a batch reference for these textures during draw, we can successfully
destroy the resources without crashing

Reviewed-by: Erik Faye-Lun <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6924>

src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_draw.c

index 0ea5a50..0b224ff 100644 (file)
@@ -290,6 +290,7 @@ zink_sampler_view_destroy(struct pipe_context *pctx,
 {
    struct zink_sampler_view *view = zink_sampler_view(pview);
    vkDestroyImageView(zink_screen(pctx->screen)->dev, view->image_view, NULL);
+   pipe_resource_reference(&pview->texture, NULL);
    FREE(view);
 }
 
index 5877ba0..6302436 100644 (file)
@@ -390,6 +390,7 @@ zink_draw_vbo(struct pipe_context *pctx,
          } else {
             struct zink_sampler_view *sampler_view = zink_sampler_view(ctx->image_views[i][index]);
             zink_batch_reference_sampler_view(batch, sampler_view);
+            zink_batch_reference_resource_rw(batch, zink_resource(ctx->image_views[i][index]->texture), false);
          }
       }
    }