mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 22:18:13 +02:00
anv: don't wait for completion of work on vkQueuePresent()
Another mistake which is that we don't use the right wait API. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Fixes:829699ba63("anv: implement shareable timeline semaphores") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4276 Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9188> (cherry picked from commit02f94c3306)
This commit is contained in:
parent
af8caf1f91
commit
c3347511ed
2 changed files with 18 additions and 10 deletions
|
|
@ -2326,7 +2326,7 @@
|
|||
"description": "anv: don't wait for completion of work on vkQueuePresent()",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "829699ba632b2b78e4de372baf42ae01095158a7"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -304,11 +304,16 @@ VkResult anv_QueuePresentKHR(
|
|||
/* Make sure all of the dependency semaphores have materialized when
|
||||
* using a threaded submission.
|
||||
*/
|
||||
uint32_t *syncobjs = vk_alloc(&device->vk.alloc,
|
||||
sizeof(*syncobjs) * pPresentInfo->waitSemaphoreCount, 8,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
|
||||
ANV_MULTIALLOC(ma);
|
||||
|
||||
if (!syncobjs)
|
||||
uint64_t *values;
|
||||
uint32_t *syncobjs;
|
||||
|
||||
anv_multialloc_add(&ma, &values, pPresentInfo->waitSemaphoreCount);
|
||||
anv_multialloc_add(&ma, &syncobjs, pPresentInfo->waitSemaphoreCount);
|
||||
|
||||
if (!anv_multialloc_alloc(&ma, &device->vk.alloc,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND))
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
uint32_t wait_count = 0;
|
||||
|
|
@ -321,18 +326,21 @@ VkResult anv_QueuePresentKHR(
|
|||
if (impl->type == ANV_SEMAPHORE_TYPE_DUMMY)
|
||||
continue;
|
||||
assert(impl->type == ANV_SEMAPHORE_TYPE_DRM_SYNCOBJ);
|
||||
syncobjs[wait_count++] = impl->syncobj;
|
||||
syncobjs[wait_count] = impl->syncobj;
|
||||
values[wait_count] = 0;
|
||||
}
|
||||
|
||||
int ret = 0;
|
||||
if (wait_count > 0) {
|
||||
ret =
|
||||
anv_gem_syncobj_wait(device, syncobjs, wait_count,
|
||||
anv_get_absolute_timeout(INT64_MAX),
|
||||
true /* wait_all */);
|
||||
anv_gem_syncobj_timeline_wait(device,
|
||||
syncobjs, values, wait_count,
|
||||
anv_get_absolute_timeout(INT64_MAX),
|
||||
true /* wait_all */,
|
||||
true /* wait_materialize */);
|
||||
}
|
||||
|
||||
vk_free(&device->vk.alloc, syncobjs);
|
||||
vk_free(&device->vk.alloc, values);
|
||||
|
||||
if (ret)
|
||||
return vk_error(VK_ERROR_DEVICE_LOST);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue