From 1951065a1613bc64351e6ff461677fe9f301b772 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 22 Jun 2022 13:24:33 -0400 Subject: [PATCH] zink: delete zink_resource_object::dt_has_data this should be on the swapchain image Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_batch.c | 4 +--- src/gallium/drivers/zink/zink_kopper.c | 11 ++++++----- src/gallium/drivers/zink/zink_kopper.h | 2 +- src/gallium/drivers/zink/zink_resource.h | 1 - 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 31e17d53468..faa64385deb 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -493,10 +493,8 @@ zink_batch_resource_usage_set(struct zink_batch *batch, struct zink_resource *re { if (res->obj->dt) { VkSemaphore acquire = zink_kopper_acquire_submit(zink_screen(batch->state->ctx->base.screen), res); - if (acquire) { + if (acquire) util_dynarray_append(&batch->state->acquires, VkSemaphore, acquire); - res->obj->dt_has_data = true; - } } if (write && !res->obj->is_buffer) { if (!res->valid && res->fb_binds) diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c index 5d2be3d791b..d27b32bd4ec 100644 --- a/src/gallium/drivers/zink/zink_kopper.c +++ b/src/gallium/drivers/zink/zink_kopper.c @@ -512,8 +512,7 @@ kopper_acquire(struct zink_screen *screen, struct zink_resource *res, uint64_t t res->obj->indefinite_acquire = true; p_atomic_inc(&cdt->swapchain->num_acquires); } - cdt->swapchain->dt_has_data = false; - res->obj->dt_has_data = false; + cdt->swapchain->images[res->obj->dt_idx].dt_has_data = false; return VK_SUCCESS; } @@ -573,7 +572,8 @@ zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res { assert(res->obj->dt); struct kopper_displaytarget *cdt = res->obj->dt; - if (cdt->swapchain->dt_has_data) + assert(res->obj->dt_idx != UINT32_MAX); + if (cdt->swapchain->images[res->obj->dt_idx].dt_has_data) return VK_NULL_HANDLE; assert(res->obj->dt_idx != UINT32_MAX); assert(cdt->swapchain->images[res->obj->dt_idx].acquire); @@ -581,7 +581,7 @@ zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res /* this is now owned by the batch */ VkSemaphore acquire = cdt->swapchain->images[res->obj->dt_idx].acquire; cdt->swapchain->images[res->obj->dt_idx].acquire = VK_NULL_HANDLE; - cdt->swapchain->dt_has_data = true; + cdt->swapchain->images[res->obj->dt_idx].dt_has_data = true; return acquire; } @@ -743,7 +743,8 @@ zink_kopper_acquire_readback(struct zink_context *ctx, struct zink_resource *res uint32_t last_dt_idx = res->obj->last_dt_idx; VkResult ret = VK_SUCCESS; /* if this hasn't been presented or if it has data, use this as the readback target */ - if (res->obj->last_dt_idx == UINT32_MAX || res->obj->dt_has_data) + if (res->obj->last_dt_idx == UINT32_MAX || + (zink_kopper_acquired(cdt, res->obj->dt_idx) && cdt->swapchain->images[res->obj->dt_idx].dt_has_data)) return false; while (res->obj->dt_idx != last_dt_idx) { if (res->obj->dt_idx != UINT32_MAX && !zink_kopper_present_readback(ctx, res)) diff --git a/src/gallium/drivers/zink/zink_kopper.h b/src/gallium/drivers/zink/zink_kopper.h index a62c6a14860..43f7687a9d7 100644 --- a/src/gallium/drivers/zink/zink_kopper.h +++ b/src/gallium/drivers/zink/zink_kopper.h @@ -32,6 +32,7 @@ struct kopper_swapchain_image { bool init; bool acquired; + bool dt_has_data; VkImage image; VkSemaphore acquire; }; @@ -48,7 +49,6 @@ struct kopper_swapchain { unsigned num_acquires; unsigned max_acquires; unsigned async_presents; - bool dt_has_data; struct kopper_swapchain_image *images; }; diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h index 5047cb01c9c..2c460dbddef 100644 --- a/src/gallium/drivers/zink/zink_resource.h +++ b/src/gallium/drivers/zink/zink_resource.h @@ -90,7 +90,6 @@ struct zink_resource_object { uint32_t last_dt_idx; VkSemaphore present; bool new_dt; - bool dt_has_data; bool indefinite_acquire; // }