syncval: Add FreeCommandBuffer callback support
Add support for a state tracker callback for command buffer free
operations and implement in sync tracking.
Change-Id: Ic949b53f17477f9d6881a0d20f35aff486538d9b
diff --git a/layers/synchronization_validation.cpp b/layers/synchronization_validation.cpp
index 7dbea33..2c4b577 100644
--- a/layers/synchronization_validation.cpp
+++ b/layers/synchronization_validation.cpp
@@ -863,13 +863,21 @@
}
}
-void SyncValidator::ResetCommandBuffer(VkCommandBuffer command_buffer) {
+void SyncValidator::ResetCommandBufferCallback(VkCommandBuffer command_buffer) {
auto *access_context = GetAccessContextNoInsert(command_buffer);
if (access_context) {
access_context->Reset();
}
}
+void SyncValidator::FreeCommandBufferCallback(VkCommandBuffer command_buffer) {
+ auto access_found = cb_access_state.find(command_buffer);
+ if (access_found != cb_access_state.end()) {
+ access_found->second->Reset();
+ cb_access_state.erase(access_found);
+ }
+}
+
void SyncValidator::ApplyGlobalBarriers(AccessContext *context, VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask, SyncStageAccessFlags src_access_scope,
SyncStageAccessFlags dst_access_scope, uint32_t memoryBarrierCount,
@@ -1126,8 +1134,12 @@
ValidationObject *validation_data = GetValidationObject(device_object->object_dispatch, LayerObjectTypeSyncValidation);
SyncValidator *sync_device_state = static_cast<SyncValidator *>(validation_data);
- sync_device_state->SetCommandBufferResetCallback(
- [sync_device_state](VkCommandBuffer command_buffer) -> void { sync_device_state->ResetCommandBuffer(command_buffer); });
+ sync_device_state->SetCommandBufferResetCallback([sync_device_state](VkCommandBuffer command_buffer) -> void {
+ sync_device_state->ResetCommandBufferCallback(command_buffer);
+ });
+ sync_device_state->SetCommandBufferFreeCallback([sync_device_state](VkCommandBuffer command_buffer) -> void {
+ sync_device_state->FreeCommandBufferCallback(command_buffer);
+ });
}
void SyncValidator::PostCallRecordBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo,