diff options
| author | Michael Lentine <mlentine@google.com> | 2016-03-04 17:53:37 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-03-07 07:19:18 -0700 |
| commit | 845421ff83f54d9ff080fc5c771da469979e80b0 (patch) | |
| tree | 57957c459c3456fced9cfc105703a06ac6e78f37 /layers/draw_state.cpp | |
| parent | 97b1b117e0e1224bf49d94820f5ddadc855e6c13 (diff) | |
| download | usermoji-845421ff83f54d9ff080fc5c771da469979e80b0.tar.xz | |
Regester event on creation and delete on deletion.
Diffstat (limited to 'layers/draw_state.cpp')
| -rw-r--r-- | layers/draw_state.cpp | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 161dd63f..5c27d22e 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -4399,16 +4399,18 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEve bool skip_call = false; loader_platform_thread_lock_mutex(&globalLock); auto event_data = dev_data->eventMap.find(event); - if (event_data != dev_data->eventMap.end() && - event_data->second.in_use.load()) { - skip_call |= - log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, - reinterpret_cast<uint64_t &>(event), __LINE__, - DRAWSTATE_INVALID_EVENT, "DS", - "Cannot delete event %" PRIu64 - " which is in use by a command buffer.", - reinterpret_cast<uint64_t &>(event)); + if (event_data != dev_data->eventMap.end()) { + if (event_data->second.in_use.load()) { + skip_call |= + log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, + reinterpret_cast<uint64_t &>(event), __LINE__, + DRAWSTATE_INVALID_EVENT, "DS", + "Cannot delete event %" PRIu64 + " which is in use by a command buffer.", + reinterpret_cast<uint64_t &>(event)); + } + dev_data->eventMap.erase(event_data); } loader_platform_thread_unlock_mutex(&globalLock); if (!skip_call) @@ -7973,6 +7975,23 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore( return result; } +VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( + VkDevice device, + const VkEventCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkEvent* pEvent) { + layer_data* dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); + VkResult result = dev_data->device_dispatch_table->CreateEvent(device, pCreateInfo, pAllocator, pEvent); + if (result == VK_SUCCESS) { + loader_platform_thread_lock_mutex(&globalLock); + dev_data->eventMap[*pEvent].needsSignaled = false; + dev_data->eventMap[*pEvent].in_use.store(0); + dev_data->eventMap[*pEvent].stageMask = VkPipelineStageFlags(0); + loader_platform_thread_unlock_mutex(&globalLock); + } + return result; +} + VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, @@ -8389,6 +8408,8 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD return (PFN_vkVoidFunction) vkQueueBindSparse; if (!strcmp(funcName, "vkCreateSemaphore")) return (PFN_vkVoidFunction) vkCreateSemaphore; + if (!strcmp(funcName, "vkCreateEvent")) + return (PFN_vkVoidFunction) vkCreateEvent; if (dev == NULL) return NULL; |
