From 34ec611dc6198c2ed8b6bf07898d66b54d4ee160 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 25 Oct 2022 13:34:01 -0400 Subject: [PATCH] zink: simplify swapchain imageview handling the zink_resource_object::views array already handles this, so don't duplicate its functionality Part-of: --- src/gallium/drivers/zink/zink_batch.c | 6 ------ src/gallium/drivers/zink/zink_surface.c | 14 ++++++-------- src/gallium/drivers/zink/zink_types.h | 3 --- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 28c60d8..7063463 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -149,10 +149,6 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) util_dynarray_init(&bs->wait_semaphores, NULL); bs->swapchain = NULL; - /* swapchain views are managed independent of the owner resource */ - while (util_dynarray_contains(&bs->dead_swapchains, VkImageView)) - VKSCR(DestroyImageView)(screen->dev, util_dynarray_pop(&bs->dead_swapchains, VkImageView), NULL); - /* only reset submitted here so that tc fence desync can pick up the 'completed' flag * before the state is reused */ @@ -275,7 +271,6 @@ zink_batch_state_destroy(struct zink_screen *screen, struct zink_batch_state *bs util_dynarray_fini(&bs->acquires); util_dynarray_fini(&bs->unref_semaphores); util_dynarray_fini(&bs->acquire_flags); - util_dynarray_fini(&bs->dead_swapchains); zink_batch_descriptor_deinit(screen, bs); ralloc_free(bs); } @@ -333,7 +328,6 @@ create_batch_state(struct zink_context *ctx) util_dynarray_init(&bs->acquires, NULL); util_dynarray_init(&bs->unref_semaphores, NULL); util_dynarray_init(&bs->acquire_flags, NULL); - util_dynarray_init(&bs->dead_swapchains, NULL); util_dynarray_init(&bs->bindless_releases[0], NULL); util_dynarray_init(&bs->bindless_releases[1], NULL); util_dynarray_init(&bs->swapchain_obj, NULL); diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c index 32442b4..78badb3 100644 --- a/src/gallium/drivers/zink/zink_surface.c +++ b/src/gallium/drivers/zink/zink_surface.c @@ -327,8 +327,6 @@ zink_destroy_surface(struct zink_screen *screen, struct pipe_surface *psurface) if (surface->simage_view) util_dynarray_append(&res->obj->views, VkImageView, surface->simage_view); if (surface->is_swapchain) { - for (unsigned i = 0; i < surface->old_swapchain_size; i++) - util_dynarray_append(&res->obj->views, VkImageView, surface->old_swapchain[i]); for (unsigned i = 0; i < surface->swapchain_size; i++) util_dynarray_append(&res->obj->views, VkImageView, surface->swapchain[i]); free(surface->swapchain); @@ -440,12 +438,12 @@ zink_surface_swapchain_update(struct zink_context *ctx, struct zink_surface *sur if (!cdt) return; //dead swapchain if (res->obj->dt != surface->dt) { - /* new swapchain: clear out previous old_swapchain and move current swapchain there */ - for (unsigned i = 0; i < surface->old_swapchain_size; i++) - util_dynarray_append(&ctx->batch.state->dead_swapchains, VkImageView, surface->old_swapchain[i]); - free(surface->old_swapchain); - surface->old_swapchain = surface->swapchain; - surface->old_swapchain_size = surface->swapchain_size; + /* new swapchain: clear out previous swapchain imageviews/array and setup a new one */ + simple_mtx_lock(&res->obj->view_lock); + for (unsigned i = 0; i < surface->swapchain_size; i++) + util_dynarray_append(&res->obj->views, VkImageView, surface->swapchain[i]); + simple_mtx_unlock(&res->obj->view_lock); + free(surface->swapchain); surface->swapchain_size = cdt->swapchain->num_images; surface->swapchain = calloc(surface->swapchain_size, sizeof(VkImageView)); surface->base.width = res->base.b.width0; diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 858c774..2ece664 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -502,7 +502,6 @@ struct zink_batch_state { struct zink_resource *swapchain; struct util_dynarray acquires; struct util_dynarray acquire_flags; - struct util_dynarray dead_swapchains; struct util_dynarray unref_semaphores; struct util_queue_fence flush_completed; @@ -1317,8 +1316,6 @@ struct zink_surface { void *dt; VkImageView *swapchain; unsigned swapchain_size; - VkImageView *old_swapchain; - unsigned old_swapchain_size; VkImageView simage_view;//old iview after storage replacement/rebind void *obj; //backing resource object uint32_t hash; -- 2.7.4