layers: Fix CmdPushDescriptorSet object tracker
Ignore the dstSet field of VkWriteDescriptorSet as indicated
by the spec
Change-Id: I28ca6ea3059f5528bdf369954e1621ef670e0d54
diff --git a/layers/object_tracker_utils.cpp b/layers/object_tracker_utils.cpp
index 88b4d0f..c9b2700 100644
--- a/layers/object_tracker_utils.cpp
+++ b/layers/object_tracker_utils.cpp
@@ -190,6 +190,50 @@
return skip;
}
+VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
+ VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount,
+ const VkWriteDescriptorSet *pDescriptorWrites) {
+ bool skip = false;
+ {
+ std::lock_guard<std::mutex> lock(global_lock);
+ skip |= ValidateObject(commandBuffer, commandBuffer, kVulkanObjectTypeCommandBuffer, false, VALIDATION_ERROR_1be02401,
+ VALIDATION_ERROR_1be00009);
+ skip |= ValidateObject(commandBuffer, layout, kVulkanObjectTypePipelineLayout, false, VALIDATION_ERROR_1be0be01,
+ VALIDATION_ERROR_1be00009);
+ if (pDescriptorWrites) {
+ for (uint32_t index0 = 0; index0 < descriptorWriteCount; ++index0) {
+ if (pDescriptorWrites[index0].pImageInfo) {
+ for (uint32_t index1 = 0; index1 < pDescriptorWrites[index0].descriptorCount; ++index1) {
+ skip |=
+ ValidateObject(commandBuffer, pDescriptorWrites[index0].pImageInfo[index1].sampler,
+ kVulkanObjectTypeSampler, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_04600009);
+ skip |= ValidateObject(commandBuffer, pDescriptorWrites[index0].pImageInfo[index1].imageView,
+ kVulkanObjectTypeImageView, false, VALIDATION_ERROR_UNDEFINED,
+ VALIDATION_ERROR_04600009);
+ }
+ }
+ if (pDescriptorWrites[index0].pBufferInfo) {
+ for (uint32_t index1 = 0; index1 < pDescriptorWrites[index0].descriptorCount; ++index1) {
+ skip |=
+ ValidateObject(commandBuffer, pDescriptorWrites[index0].pBufferInfo[index1].buffer,
+ kVulkanObjectTypeBuffer, false, VALIDATION_ERROR_04401a01, VALIDATION_ERROR_UNDEFINED);
+ }
+ }
+ if (pDescriptorWrites[index0].pTexelBufferView) {
+ for (uint32_t index1 = 0; index1 < pDescriptorWrites[index0].descriptorCount; ++index1) {
+ skip |= ValidateObject(commandBuffer, pDescriptorWrites[index0].pTexelBufferView[index1],
+ kVulkanObjectTypeBufferView, false, VALIDATION_ERROR_UNDEFINED,
+ VALIDATION_ERROR_15c00009);
+ }
+ }
+ }
+ }
+ }
+ if (skip) return;
+ get_dispatch_table(ot_device_table_map, commandBuffer)
+ ->CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
+}
+
void CreateQueue(VkDevice device, VkQueue vkObj) {
layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);