diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 370f4104d41..fcd5d643470 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -102,6 +102,22 @@ zink_reset_batch(struct zink_context *ctx, struct zink_batch *batch) batch->resource_size = 0; } +void +zink_batch_destroy(struct zink_context* ctx, struct zink_batch *batch) +{ + struct zink_screen *screen = zink_screen(ctx->base.screen); + + vkFreeCommandBuffers(screen->dev, batch->cmdpool, 1, &batch->cmdbuf); + vkDestroyCommandPool(screen->dev, batch->cmdpool, NULL); + zink_fence_reference(screen, &batch->fence, NULL); + _mesa_set_destroy(batch->fbs, NULL); + _mesa_set_destroy(batch->resources, NULL); + util_dynarray_fini(&batch->zombie_samplers); + _mesa_set_destroy(batch->surfaces, NULL); + _mesa_set_destroy(batch->programs, NULL); + _mesa_set_destroy(batch->active_queries, NULL); +} + static void init_batch(struct zink_context *ctx, struct zink_batch *batch) { diff --git a/src/gallium/drivers/zink/zink_batch.h b/src/gallium/drivers/zink/zink_batch.h index 5fe27ab1086..8b07311ee31 100644 --- a/src/gallium/drivers/zink/zink_batch.h +++ b/src/gallium/drivers/zink/zink_batch.h @@ -90,6 +90,9 @@ zink_start_batch(struct zink_context *ctx, struct zink_batch *batch); void zink_end_batch(struct zink_context *ctx, struct zink_batch *batch); +void +zink_batch_destroy(struct zink_context* ctx, struct zink_batch *batch); + enum zink_queue zink_batch_reference_resource_rw(struct zink_batch *batch, struct zink_resource *res, diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 64bd6239152..a27dfb31e07 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -275,23 +275,6 @@ debug_describe_zink_buffer_view(char *buf, const struct zink_buffer_view *ptr) sprintf(buf, "zink_buffer_view"); } -static void -destroy_batch(struct zink_context* ctx, struct zink_batch* batch) -{ - struct zink_screen *screen = zink_screen(ctx->base.screen); - - zink_reset_batch(ctx, batch); - vkFreeCommandBuffers(screen->dev, batch->cmdpool, 1, &batch->cmdbuf); - vkDestroyCommandPool(screen->dev, batch->cmdpool, NULL); - zink_fence_reference(screen, &batch->fence, NULL); - _mesa_set_destroy(batch->fbs, NULL); - _mesa_set_destroy(batch->resources, NULL); - util_dynarray_fini(&batch->zombie_samplers); - _mesa_set_destroy(batch->surfaces, NULL); - _mesa_set_destroy(batch->programs, NULL); - _mesa_set_destroy(batch->active_queries, NULL); -} - static void zink_context_destroy(struct pipe_context *pctx) { @@ -310,9 +293,9 @@ zink_context_destroy(struct pipe_context *pctx) pipe_resource_reference(&ctx->null_buffers[i], NULL); for (int i = 0; i < ARRAY_SIZE(ctx->batches); ++i) - destroy_batch(ctx, &ctx->batches[i]); + zink_batch_destroy(ctx, &ctx->batches[i]); if (ctx->compute_batch.cmdpool) - destroy_batch(ctx, &ctx->compute_batch); + zink_batch_destroy(ctx, &ctx->compute_batch); hash_table_foreach(ctx->render_pass_cache, he) zink_destroy_render_pass(screen, he->data);