aboutsummaryrefslogtreecommitdiff
path: root/layers/draw_state.cpp
diff options
context:
space:
mode:
authorMichael Lentine <mlentine@google.com>2016-03-10 12:08:30 -0600
committerTobin Ehlis <tobine@google.com>2016-03-10 11:21:49 -0700
commit55626899f3adbe572df9bbcc59bf07142ec81348 (patch)
tree91c5b721cd1b0f13afe80f8399501c5aee2a2b0a /layers/draw_state.cpp
parent85b02a2eca004cddf3a8f56dab2a5ee27f8b72c9 (diff)
downloadusermoji-55626899f3adbe572df9bbcc59bf07142ec81348.tar.xz
layers: GH99 Track all command buffers submitted at once at the same time.
Diffstat (limited to 'layers/draw_state.cpp')
-rw-r--r--layers/draw_state.cpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index ac36dc92..c3fcde07 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -4049,8 +4049,7 @@ void decrementResources(layer_data *my_data, VkQueue queue) {
}
}
-void trackCommandBuffers(layer_data *my_data, VkQueue queue, uint32_t cmdBufferCount, const VkCommandBuffer *pCmdBuffers,
- VkFence fence) {
+void trackCommandBuffers(layer_data *my_data, VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) {
auto queue_data = my_data->queueMap.find(queue);
if (fence != VK_NULL_HANDLE) {
VkFence priorFence = VK_NULL_HANDLE;
@@ -4071,31 +4070,40 @@ void trackCommandBuffers(layer_data *my_data, VkQueue queue, uint32_t cmdBufferC
fence_data->second.needsSignaled = true;
fence_data->second.queue = queue;
fence_data->second.in_use.fetch_add(1);
- for (uint32_t i = 0; i < cmdBufferCount; ++i) {
- for (auto secondaryCmdBuffer : my_data->commandBufferMap[pCmdBuffers[i]]->secondaryCommandBuffers) {
- fence_data->second.cmdBuffers.push_back(secondaryCmdBuffer);
+ for (uint32_t submit_idx = 0; submit_idx < submitCount; submit_idx++) {
+ const VkSubmitInfo *submit = &pSubmits[submit_idx];
+ for (uint32_t i = 0; i < submit->commandBufferCount; ++i) {
+ for (auto secondaryCmdBuffer : my_data->commandBufferMap[submit->pCommandBuffers[i]]->secondaryCommandBuffers) {
+ fence_data->second.cmdBuffers.push_back(secondaryCmdBuffer);
+ }
+ fence_data->second.cmdBuffers.push_back(submit->pCommandBuffers[i]);
}
- fence_data->second.cmdBuffers.push_back(pCmdBuffers[i]);
}
} else {
if (queue_data != my_data->queueMap.end()) {
- for (uint32_t i = 0; i < cmdBufferCount; ++i) {
- for (auto secondaryCmdBuffer : my_data->commandBufferMap[pCmdBuffers[i]]->secondaryCommandBuffers) {
- queue_data->second.untrackedCmdBuffers.push_back(secondaryCmdBuffer);
+ for (uint32_t submit_idx = 0; submit_idx < submitCount; submit_idx++) {
+ const VkSubmitInfo *submit = &pSubmits[submit_idx];
+ for (uint32_t i = 0; i < submit->commandBufferCount; ++i) {
+ for (auto secondaryCmdBuffer : my_data->commandBufferMap[submit->pCommandBuffers[i]]->secondaryCommandBuffers) {
+ queue_data->second.untrackedCmdBuffers.push_back(secondaryCmdBuffer);
+ }
+ queue_data->second.untrackedCmdBuffers.push_back(submit->pCommandBuffers[i]);
}
- queue_data->second.untrackedCmdBuffers.push_back(pCmdBuffers[i]);
}
}
}
if (queue_data != my_data->queueMap.end()) {
- for (uint32_t i = 0; i < cmdBufferCount; ++i) {
- // Add cmdBuffers to both the global set and queue set
- for (auto secondaryCmdBuffer : my_data->commandBufferMap[pCmdBuffers[i]]->secondaryCommandBuffers) {
- my_data->globalInFlightCmdBuffers.insert(secondaryCmdBuffer);
- queue_data->second.inFlightCmdBuffers.insert(secondaryCmdBuffer);
+ for (uint32_t submit_idx = 0; submit_idx < submitCount; submit_idx++) {
+ const VkSubmitInfo *submit = &pSubmits[submit_idx];
+ for (uint32_t i = 0; i < submit->commandBufferCount; ++i) {
+ // Add cmdBuffers to both the global set and queue set
+ for (auto secondaryCmdBuffer : my_data->commandBufferMap[submit->pCommandBuffers[i]]->secondaryCommandBuffers) {
+ my_data->globalInFlightCmdBuffers.insert(secondaryCmdBuffer);
+ queue_data->second.inFlightCmdBuffers.insert(secondaryCmdBuffer);
+ }
+ my_data->globalInFlightCmdBuffers.insert(submit->pCommandBuffers[i]);
+ queue_data->second.inFlightCmdBuffers.insert(submit->pCommandBuffers[i]);
}
- my_data->globalInFlightCmdBuffers.insert(pCmdBuffers[i]);
- queue_data->second.inFlightCmdBuffers.insert(pCmdBuffers[i]);
}
}
}
@@ -4256,9 +4264,9 @@ vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits,
pCB->submitCount++; // increment submit count
skipCall |= validatePrimaryCommandBufferState(dev_data, pCB);
}
- // Update cmdBuffer-related data structs and mark fence in-use
- trackCommandBuffers(dev_data, queue, submit->commandBufferCount, submit->pCommandBuffers, fence);
}
+ // Update cmdBuffer-related data structs and mark fence in-use
+ trackCommandBuffers(dev_data, queue, submitCount, pSubmits, fence);
loader_platform_thread_unlock_mutex(&globalLock);
if (VK_FALSE == skipCall)
return dev_data->device_dispatch_table->QueueSubmit(queue, submitCount, pSubmits, fence);