vulkan: Update vulkan.h for revision 88 -- Bug #13744

Rename some vkCmdBindDescriptorSets parameters and add a dynamic offset count.

v2: Add a check against dynamicOffsetCount before copying dset data.
diff --git a/include/vulkan.h b/include/vulkan.h
index 8d495fe..b9fce56 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -2148,7 +2148,7 @@
 typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer);
 typedef void     (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
 typedef void     (VKAPI *PFN_vkCmdBindDynamicStateObject)(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state);
-typedef void     (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData);
+typedef void     (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
 typedef void     (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
 typedef void     (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
 typedef void     (VKAPI *PFN_vkCmdDraw)(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
@@ -2650,10 +2650,11 @@
 void VKAPI vkCmdBindDescriptorSets(
     VkCmdBuffer                                 cmdBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
-    uint32_t                                    layoutChainSlot,
-    uint32_t                                    count,
+    uint32_t                                    firstSet,
+    uint32_t                                    setCount,
     const VkDescriptorSet*                      pDescriptorSets,
-    const uint32_t*                             pUserData);
+    uint32_t                                    dynamicOffsetCount,
+    const uint32_t*                             pDynamicOffsets);
 
 void VKAPI vkCmdBindIndexBuffer(
     VkCmdBuffer                                 cmdBuffer,
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 3510370..ab49bce 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1997,13 +1997,13 @@
     nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData)
+VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
 {
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
     if (pCB) {
         updateCBTracking(cmdBuffer);
         addCmd(pCB, CMD_BINDDESCRIPTORSETS);
-        for (uint32_t i=0; i<count; i++) {
+        for (uint32_t i=0; i<setCount; i++) {
             if (getSetNode(pDescriptorSets[i])) {
                 if (dsUpdateActive(pDescriptorSets[i])) {
                     // TODO : This check here needs to be made at QueueSubmit time
@@ -2034,7 +2034,7 @@
         sprintf(str, "Attempt to use CmdBuffer %p that doesn't exist!", (void*)cmdBuffer);
         layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, cmdBuffer, 0, DRAWSTATE_INVALID_CMD_BUFFER, "DS", str);
     }
-    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChainSlot, count, pDescriptorSets, pUserData);
+    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index ddba58c..a89a1db 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -1606,13 +1606,14 @@
 VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
     VkCmdBuffer                              cmdBuffer,
     VkPipelineBindPoint                     pipelineBindPoint,
-    uint32_t                                    layoutChainSlot,
-    uint32_t                                    count,
-    const VkDescriptorSet*                   pDescriptorSets,
-    const uint32_t*                             pUserData)
+        uint32_t                            firstSet,
+        uint32_t                            setCount,
+        const VkDescriptorSet*              pDescriptorSets,
+        uint32_t                            dynamicOffsetCount,
+        const uint32_t*                     pDynamicOffsets)
 {
     // TODO : Somewhere need to verify that all textures referenced by shaders in DS are in some type of *SHADER_READ* state
-    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChainSlot, count, pDescriptorSets, pUserData);
+    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 4e526c3..cbb341a 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -1222,14 +1222,14 @@
     nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData)
+VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
 {
     char str[1024];
     if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
         sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
         layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
     }
-    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChainSlot, count, pDescriptorSets, pUserData);
+    nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 7d3c777..25d2098 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -1369,7 +1369,7 @@
 
     // bind pipeline, vertex buffer (descriptor set) and WVP (dynamic buffer view)
     vkCmdBindDescriptorSets(obj(), VK_PIPELINE_BIND_POINT_GRAPHICS,
-           0, 1, &set_obj, NULL );
+           0, 1, &set_obj, 0, NULL );
 
     // Add descriptor set mem refs to command buffer's list
     mem_ref_mgr.AddMemoryRefs(descriptorSet.memories());
diff --git a/vulkan.py b/vulkan.py
index 9301b51..9a708fa 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -632,10 +632,11 @@
         Proto("void", "CmdBindDescriptorSets",
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkPipelineBindPoint", "pipelineBindPoint"),
-             Param("uint32_t", "layoutChainSlot"),
-             Param("uint32_t", "count"),
+             Param("uint32_t", "firstSet"),
+             Param("uint32_t", "setCount"),
              Param("const VkDescriptorSet*", "pDescriptorSets"),
-             Param("const uint32_t*", "pUserData")]),
+             Param("uint32_t", "dynamicOffsetCount"),
+             Param("const uint32_t*", "pDynamicOffsets")]),
 
         Proto("void", "CmdBindVertexBuffers",
             [Param("VkCmdBuffer", "cmdBuffer"),