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
*/
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);
}
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);
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);
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;
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;
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;