aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2015-10-29 22:01:53 +0800
committerChia-I Wu <olv@lunarg.com>2015-10-30 20:49:24 +0800
commite3b27abd755380a8a00247e38e35fe2d9d5250db (patch)
tree4f5a1990da25697671b5361fb5a06c070a8383ce
parent450dd2c719e95b17fa60b29d6290ddf5809fd7c6 (diff)
downloadusermoji-e3b27abd755380a8a00247e38e35fe2d9d5250db.tar.xz
support and use VkSubmitInfo semaphore signaling and waiting
-rw-r--r--layers/mem_tracker.cpp39
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;
}