diff options
| author | Tobin Ehlis <tobine@google.com> | 2016-03-10 09:18:20 -0700 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-03-10 09:41:49 -0700 |
| commit | a0c3998fc18cb5d9362b19a3478c70699b284352 (patch) | |
| tree | 42f4e84e350c8c0723050344f68d609254a92952 /layers/draw_state.cpp | |
| parent | 80fa52c13be9df09277afe41c4ab4dd84ef348ae (diff) | |
| download | usermoji-a0c3998fc18cb5d9362b19a3478c70699b284352.tar.xz | |
layers: GH98 Only check fence in-use once per QueueSubmit
In vkQueueSubmit, perform the fence in-use check first.
Then validate each submit, which includes marking the current fence in-use.
Diffstat (limited to 'layers/draw_state.cpp')
| -rw-r--r-- | layers/draw_state.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index db289795..338e1b37 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -4224,6 +4224,13 @@ vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, GLOBAL_CB_NODE *pCB = NULL; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); loader_platform_thread_lock_mutex(&globalLock); + // First verify that fence is not in use + if ((fence != VK_NULL_HANDLE) && (submitCount != 0) && dev_data->fenceMap[fence].in_use.load()) { + skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, + (uint64_t)(fence), __LINE__, DRAWSTATE_INVALID_FENCE, "DS", + "Fence %#" PRIx64 " is already in use by another submission.", (uint64_t)(fence)); + } + // Now verify each individual submit for (uint32_t submit_idx = 0; submit_idx < submitCount; submit_idx++) { const VkSubmitInfo *submit = &pSubmits[submit_idx]; vector<VkSemaphore> semaphoreList; @@ -4249,11 +4256,7 @@ vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, pCB->submitCount++; // increment submit count skipCall |= validatePrimaryCommandBufferState(dev_data, pCB); } - if ((fence != VK_NULL_HANDLE) && dev_data->fenceMap[fence].in_use.load()) { - skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, - (uint64_t)(fence), __LINE__, DRAWSTATE_INVALID_FENCE, "DS", - "Fence %#" PRIx64 " is already in use by another submission.", (uint64_t)(fence)); - } + // Update cmdBuffer-related data structs and mark fence in-use trackCommandBuffers(dev_data, queue, submit->commandBufferCount, submit->pCommandBuffers, fence); } loader_platform_thread_unlock_mutex(&globalLock); |
