struct zink_context *ctx = zink_context(pctx);
struct zink_resource *res = zink_resource(pres);
if (res->obj->dt) {
- if (res->obj->acquire) {
+ if (zink_kopper_acquired(res->obj->dt, res->obj->dt_idx)) {
zink_resource_image_barrier(ctx, res, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);
zink_batch_reference_resource_rw(&ctx->batch, res, true);
} else {
if (!res->obj->new_dt && res->obj->dt_idx != UINT32_MAX &&
(cdt->swapchain->images[res->obj->dt_idx].acquire || cdt->swapchain->images[res->obj->dt_idx].acquired))
return VK_SUCCESS;
- res->obj->acquire = VK_NULL_HANDLE;
VkSemaphore acquire = VK_NULL_HANDLE;
while (true) {
break;
}
- cdt->swapchain->images[res->obj->dt_idx].acquire = res->obj->acquire = acquire;
+ cdt->swapchain->images[res->obj->dt_idx].acquire = acquire;
res->obj->image = cdt->swapchain->images[res->obj->dt_idx].image;
cdt->swapchain->images[res->obj->dt_idx].acquired = false;
if (!cdt->swapchain->images[res->obj->dt_idx].init) {
struct kopper_displaytarget *cdt = kopper_displaytarget(res->obj->dt);
if (cdt->swapchain->dt_has_data)
return VK_NULL_HANDLE;
- assert(res->obj->acquire);
+ assert(res->obj->dt_idx != UINT32_MAX);
+ assert(cdt->swapchain->images[res->obj->dt_idx].acquire);
cdt->swapchain->images[res->obj->dt_idx].acquired = true;
/* 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;
- return res->obj->acquire;
+ return acquire;
}
VkSemaphore
} else {
kopper_present(cpi, screen, -1);
}
- res->obj->acquire = VK_NULL_HANDLE;
res->obj->indefinite_acquire = false;
cdt->swapchain->images[res->obj->dt_idx].acquired = false;
res->obj->dt_idx = UINT32_MAX;