zink: keep a count of async presents occuring for a given swapchain
this provides info about whether a swapchain is in use in another thread
Fixes: 8ade5588e3
("zink: add kopper api")
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16932>
This commit is contained in:
parent
892f42271f
commit
1dfa19c541
|
@ -634,6 +634,8 @@ kopper_present(void *data, void *gdata, int thread_idx)
|
||||||
_mesa_hash_table_insert(swapchain->presents, (void*)(uintptr_t)next, arr);
|
_mesa_hash_table_insert(swapchain->presents, (void*)(uintptr_t)next, arr);
|
||||||
}
|
}
|
||||||
util_dynarray_append(arr, VkSemaphore, cpi->sem);
|
util_dynarray_append(arr, VkSemaphore, cpi->sem);
|
||||||
|
if (thread_idx != -1)
|
||||||
|
p_atomic_dec(&swapchain->async_presents);
|
||||||
free(cpi);
|
free(cpi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,10 +662,11 @@ zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
|
||||||
cpi->info.pResults = NULL;
|
cpi->info.pResults = NULL;
|
||||||
res->obj->present = VK_NULL_HANDLE;
|
res->obj->present = VK_NULL_HANDLE;
|
||||||
if (util_queue_is_initialized(&screen->flush_queue)) {
|
if (util_queue_is_initialized(&screen->flush_queue)) {
|
||||||
|
p_atomic_inc(&cpi->swapchain->async_presents);
|
||||||
util_queue_add_job(&screen->flush_queue, cpi, &cdt->present_fence,
|
util_queue_add_job(&screen->flush_queue, cpi, &cdt->present_fence,
|
||||||
kopper_present, NULL, 0);
|
kopper_present, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
kopper_present(cpi, screen, 0);
|
kopper_present(cpi, screen, -1);
|
||||||
}
|
}
|
||||||
res->obj->acquire = VK_NULL_HANDLE;
|
res->obj->acquire = VK_NULL_HANDLE;
|
||||||
res->obj->indefinite_acquire = res->obj->acquired = false;
|
res->obj->indefinite_acquire = res->obj->acquired = false;
|
||||||
|
|
|
@ -41,6 +41,7 @@ struct kopper_swapchain {
|
||||||
VkSwapchainCreateInfoKHR scci;
|
VkSwapchainCreateInfoKHR scci;
|
||||||
unsigned num_acquires;
|
unsigned num_acquires;
|
||||||
unsigned max_acquires;
|
unsigned max_acquires;
|
||||||
|
unsigned async_presents;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum kopper_type {
|
enum kopper_type {
|
||||||
|
|
Loading…
Reference in New Issue