diff options
| author | Chia-I Wu <olv@lunarg.com> | 2015-10-29 22:01:53 +0800 |
|---|---|---|
| committer | Chia-I Wu <olv@lunarg.com> | 2015-10-30 20:49:24 +0800 |
| commit | e3b27abd755380a8a00247e38e35fe2d9d5250db (patch) | |
| tree | 4f5a1990da25697671b5361fb5a06c070a8383ce /layers/mem_tracker.cpp | |
| parent | 450dd2c719e95b17fa60b29d6290ddf5809fd7c6 (diff) | |
| download | usermoji-e3b27abd755380a8a00247e38e35fe2d9d5250db.tar.xz | |
support and use VkSubmitInfo semaphore signaling and waiting
Diffstat (limited to 'layers/mem_tracker.cpp')
| -rw-r--r-- | layers/mem_tracker.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 272bbc5c..d1a21731 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -1163,6 +1163,31 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit( pCBInfo->lastSubmittedFence = fence; pCBInfo->lastSubmittedQueue = queue; } + + for (uint32_t i = 0; i < submit->waitSemCount; i++) { + VkSemaphore sem = submit->pWaitSemaphores[i]; + + if (semaphoreMap.find(sem.handle) != semaphoreMap.end()) { + if (semaphoreMap[sem.handle] != MEMTRACK_SEMAPHORE_STATE_SIGNALLED) { + skipCall = log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_SEMAPHORE, sem.handle, + 0, MEMTRACK_NONE, "SEMAPHORE", + "vkQueueSubmit: Semaphore must be in signaled state before passing to pWaitSemaphores"); + } + semaphoreMap[sem.handle] = MEMTRACK_SEMAPHORE_STATE_WAIT; + } + } + for (uint32_t i = 0; i < submit->signalSemCount; i++) { + VkSemaphore sem = submit->pWaitSemaphores[i]; + + if (semaphoreMap.find(sem.handle) != semaphoreMap.end()) { + if (semaphoreMap[sem.handle] != MEMTRACK_SEMAPHORE_STATE_UNSET) { + skipCall = log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_SEMAPHORE, sem.handle, + 0, MEMTRACK_NONE, "SEMAPHORE", + "vkQueueSubmit: Semaphore must not be currently signaled or in a wait state"); + } + semaphoreMap[sem.handle] = MEMTRACK_SEMAPHORE_STATE_SIGNALLED; + } + } } loader_platform_thread_unlock_mutex(&globalLock); @@ -1170,6 +1195,20 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit( result = get_dispatch_table(mem_tracker_device_table_map, queue)->QueueSubmit( queue, submitCount, pSubmitInfo, fence); } + + loader_platform_thread_lock_mutex(&globalLock); + for (uint32_t submit_idx = 0; submit_idx < submitCount; submit_idx++) { + const VkSubmitInfo *submit = &pSubmitInfo[submit_idx]; + for (uint32_t i = 0; i < submit->waitSemCount; i++) { + VkSemaphore sem = submit->pWaitSemaphores[i]; + + if (semaphoreMap.find(sem.handle) != semaphoreMap.end()) { + semaphoreMap[sem.handle] = MEMTRACK_SEMAPHORE_STATE_UNSET; + } + } + } + loader_platform_thread_unlock_mutex(&globalLock); + return result; } |
