gpu: Fix pre draw save/restore
diff --git a/layers/gpu_validation.cpp b/layers/gpu_validation.cpp
index 4f95fbb..0ae6a87 100644
--- a/layers/gpu_validation.cpp
+++ b/layers/gpu_validation.cpp
@@ -559,7 +559,7 @@
VkPipelineBindPoint pipeline_bind_point = VK_PIPELINE_BIND_POINT_MAX_ENUM;
VkPipeline pipeline = VK_NULL_HANDLE;
VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
- std::vector<VkDescriptorSet> descriptor_sets;
+ std::vector<std::pair<VkDescriptorSet, uint32_t>> descriptor_sets;
std::vector<std::vector<uint32_t>> dynamic_offsets;
uint32_t push_descriptor_set_index = 0;
std::vector<safe_VkWriteDescriptorSet> push_descriptor_set_writes;
@@ -578,7 +578,7 @@
for (std::size_t i = 0; i < last_bound.per_set.size(); i++) {
const auto &bound_descriptor_set = last_bound.per_set[i].bound_descriptor_set;
if (bound_descriptor_set) {
- descriptor_sets.push_back(bound_descriptor_set->GetSet());
+ descriptor_sets.push_back(std::make_pair(bound_descriptor_set->GetSet(), static_cast<uint32_t>(i)));
if (bound_descriptor_set->IsPushDescriptor()) {
push_descriptor_set_index = static_cast<uint32_t>(i);
}
@@ -602,10 +602,10 @@
DispatchCmdBindPipeline(command_buffer, pipeline_bind_point, pipeline);
if (!descriptor_sets.empty()) {
for (std::size_t i = 0; i < descriptor_sets.size(); i++) {
- VkDescriptorSet descriptor_set = descriptor_sets[i];
+ VkDescriptorSet descriptor_set = descriptor_sets[i].first;
if (descriptor_set != VK_NULL_HANDLE) {
DispatchCmdBindDescriptorSets(command_buffer, pipeline_bind_point, pipeline_layout,
- static_cast<uint32_t>(i), 1, &descriptor_set,
+ descriptor_sets[i].second, 1, &descriptor_set,
static_cast<uint32_t>(dynamic_offsets[i].size()), dynamic_offsets[i].data());
}
}