mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 02:30:18 +01:00
vk/sync: add asserts for timeline semaphore count matching
spec requires that the number of timeline waits/signals matches the base number of waits/signals if there are any timeline semaphores being processed by the submit, so asserting here is in line with what validation will yield failure to match these will also hang every driver I've tested, so asserting here potentially saves some people their desktop session Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14741>
This commit is contained in:
parent
388f23eabe
commit
8335fdfeaf
2 changed files with 60 additions and 10 deletions
|
|
@ -1158,10 +1158,36 @@ vk_common_QueueBindSparse(VkQueue _queue,
|
|||
for (uint32_t i = 0; i < bindInfoCount; i++) {
|
||||
const VkTimelineSemaphoreSubmitInfo *timeline_info =
|
||||
vk_find_struct_const(pBindInfo[i].pNext, TIMELINE_SEMAPHORE_SUBMIT_INFO);
|
||||
const uint64_t *wait_values = timeline_info &&
|
||||
timeline_info->waitSemaphoreValueCount ? timeline_info->pWaitSemaphoreValues : NULL;
|
||||
const uint64_t *signal_values = timeline_info &&
|
||||
timeline_info->signalSemaphoreValueCount ? timeline_info->pSignalSemaphoreValues : NULL;
|
||||
const uint64_t *wait_values = NULL;
|
||||
const uint64_t *signal_values = NULL;
|
||||
|
||||
if (timeline_info && timeline_info->waitSemaphoreValueCount) {
|
||||
/* From the Vulkan 1.3.204 spec:
|
||||
*
|
||||
* VUID-VkBindSparseInfo-pNext-03248
|
||||
*
|
||||
* "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure
|
||||
* and any element of pSignalSemaphores was created with a VkSemaphoreType of
|
||||
* VK_SEMAPHORE_TYPE_TIMELINE, then its signalSemaphoreValueCount member must equal
|
||||
* signalSemaphoreCount"
|
||||
*/
|
||||
assert(timeline_info->waitSemaphoreValueCount == pBindInfo[i].waitSemaphoreCount);
|
||||
wait_values = timeline_info->pWaitSemaphoreValues;
|
||||
}
|
||||
|
||||
if (timeline_info && timeline_info->signalSemaphoreValueCount) {
|
||||
/* From the Vulkan 1.3.204 spec:
|
||||
*
|
||||
* VUID-VkBindSparseInfo-pNext-03247
|
||||
*
|
||||
* "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure
|
||||
* and any element of pWaitSemaphores was created with a VkSemaphoreType of
|
||||
* VK_SEMAPHORE_TYPE_TIMELINE, then its waitSemaphoreValueCount member must equal
|
||||
* waitSemaphoreCount"
|
||||
*/
|
||||
assert(timeline_info->signalSemaphoreValueCount == pBindInfo[i].signalSemaphoreCount);
|
||||
signal_values = timeline_info->pSignalSemaphoreValues;
|
||||
}
|
||||
|
||||
STACK_ARRAY(VkSemaphoreSubmitInfoKHR, wait_semaphore_infos,
|
||||
pBindInfo[i].waitSemaphoreCount);
|
||||
|
|
|
|||
|
|
@ -315,12 +315,36 @@ vk_common_QueueSubmit(
|
|||
const VkTimelineSemaphoreSubmitInfoKHR *timeline_info =
|
||||
vk_find_struct_const(pSubmits[s].pNext,
|
||||
TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR);
|
||||
const uint64_t *wait_values =
|
||||
timeline_info && timeline_info->waitSemaphoreValueCount ?
|
||||
timeline_info->pWaitSemaphoreValues : NULL;
|
||||
const uint64_t *signal_values =
|
||||
timeline_info && timeline_info->signalSemaphoreValueCount ?
|
||||
timeline_info->pSignalSemaphoreValues : NULL;
|
||||
const uint64_t *wait_values = NULL;
|
||||
const uint64_t *signal_values = NULL;
|
||||
|
||||
if (timeline_info && timeline_info->waitSemaphoreValueCount) {
|
||||
/* From the Vulkan 1.3.204 spec:
|
||||
*
|
||||
* VUID-VkSubmitInfo-pNext-03240
|
||||
*
|
||||
* "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure
|
||||
* and any element of pSignalSemaphores was created with a VkSemaphoreType of
|
||||
* VK_SEMAPHORE_TYPE_TIMELINE, then its signalSemaphoreValueCount member must equal
|
||||
* signalSemaphoreCount"
|
||||
*/
|
||||
assert(timeline_info->waitSemaphoreValueCount == pSubmits[s].waitSemaphoreCount);
|
||||
wait_values = timeline_info->pWaitSemaphoreValues;
|
||||
}
|
||||
|
||||
if (timeline_info && timeline_info->signalSemaphoreValueCount) {
|
||||
/* From the Vulkan 1.3.204 spec:
|
||||
*
|
||||
* VUID-VkSubmitInfo-pNext-03241
|
||||
*
|
||||
* "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure
|
||||
* and any element of pWaitSemaphores was created with a VkSemaphoreType of
|
||||
* VK_SEMAPHORE_TYPE_TIMELINE, then its waitSemaphoreValueCount member must equal
|
||||
* waitSemaphoreCount"
|
||||
*/
|
||||
assert(timeline_info->signalSemaphoreValueCount == pSubmits[s].signalSemaphoreCount);
|
||||
signal_values = timeline_info->pSignalSemaphoreValues;
|
||||
}
|
||||
|
||||
const VkDeviceGroupSubmitInfo *group_info =
|
||||
vk_find_struct_const(pSubmits[s].pNext, DEVICE_GROUP_SUBMIT_INFO);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue