Bug 14643: use VkClearDepthStencilValue
diff --git a/include/vulkan.h b/include/vulkan.h
index 89c93a2..b8c7585 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -2006,6 +2006,11 @@
 } VkClearColorValue;
 
 typedef struct {
+    float                                       depth;
+    uint32_t                                    stencil;
+} VkClearDepthStencilValue;
+
+typedef struct {
     VkOffset3D                                  offset;
     VkExtent3D                                  extent;
 } VkRect3D;
@@ -2018,11 +2023,6 @@
     VkExtent3D                                  extent;
 } VkImageResolve;
 
-typedef struct {
-    float                                       depth;
-    uint32_t                                    stencil;
-} VkClearDepthStencilValue;
-
 typedef union {
     VkClearColorValue                           color;
     VkClearDepthStencilValue                    depthStencil;
@@ -2228,9 +2228,9 @@
 typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
 typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
 typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
 typedef void (VKAPI *PFN_vkCmdClearColorAttachment)(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects);
-typedef void (VKAPI *PFN_vkCmdClearDepthStencilAttachment)(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects);
+typedef void (VKAPI *PFN_vkCmdClearDepthStencilAttachment)(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rectCount, const VkRect3D* pRects);
 typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
 typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
 typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
@@ -2955,8 +2955,7 @@
     VkCmdBuffer                                 cmdBuffer,
     VkImage                                     image,
     VkImageLayout                               imageLayout,
-    float                                       depth,
-    uint32_t                                    stencil,
+    const VkClearDepthStencilValue*             pDepthStencil,
     uint32_t                                    rangeCount,
     const VkImageSubresourceRange*              pRanges);
 
@@ -2972,8 +2971,7 @@
     VkCmdBuffer                                 cmdBuffer,
     VkImageAspectFlags                          aspectMask,
     VkImageLayout                               imageLayout,
-    float                                       depth,
-    uint32_t                                    stencil,
+    const VkClearDepthStencilValue*             pDepthStencil,
     uint32_t                                    rectCount,
     const VkRect3D*                             pRects);
 
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index a831869..172260e 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2715,8 +2715,7 @@
     VkCmdBuffer                                 cmdBuffer,
     VkImageAspectFlags                          imageAspectMask,
     VkImageLayout                               imageLayout,
-    float                                       depth,
-    uint32_t                                    stencil,
+    const VkClearDepthStencilValue*             pDepthStencil,
     uint32_t                                    rectCount,
     const VkRect3D*                             pRects)
 {
@@ -2744,7 +2743,7 @@
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
@@ -2773,10 +2772,12 @@
         get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
 }
 
-VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer,
-                                                     VkImage image, VkImageLayout imageLayout,
-                                                     float depth, uint32_t stencil,
-                                                     uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
+VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
+        VkCmdBuffer cmdBuffer,
+        VkImage image, VkImageLayout imageLayout,
+        const VkClearDepthStencilValue *pDepthStencil,
+        uint32_t rangeCount,
+        const VkImageSubresourceRange* pRanges)
 {
     VkBool32 skipCall = VK_FALSE;
     GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
@@ -2795,7 +2796,7 @@
         }
     }
     if (VK_FALSE == skipCall)
-        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
+        get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer,
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 0b2d7a6..29b10d4 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -2903,13 +2903,12 @@
 }
 
 VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
-    VkCmdBuffer                    cmdBuffer,
-    VkImage                        image,
-    VkImageLayout                  imageLayout,
-    float                          depth,
-    uint32_t                       stencil,
-    uint32_t                       rangeCount,
-    const VkImageSubresourceRange *pRanges)
+    VkCmdBuffer                         cmdBuffer,
+    VkImage                             image,
+    VkImageLayout                       imageLayout,
+    const VkClearDepthStencilValue*     pDepthStencil,
+    uint32_t                            rangeCount,
+    const VkImageSubresourceRange*      pRanges)
 {
     // TODO : Verify memory is in VK_IMAGE_STATE_CLEAR state
     VkDeviceMemory mem;
@@ -2920,7 +2919,7 @@
     loader_platform_thread_unlock_mutex(&globalLock);
     if (VK_FALSE == skipCall) {
         get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(
-            cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
+            cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
     }
 }
 
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index c93f487..ea31546 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -6655,8 +6655,7 @@
     VkCmdBuffer cmdBuffer,
     VkImage image,
     VkImageLayout imageLayout,
-    float depth,
-    uint32_t stencil,
+    const VkClearDepthStencilValue* pDepthStencil,
     uint32_t rangeCount)
 {
 
@@ -6679,16 +6678,15 @@
     VkCmdBuffer cmdBuffer,
     VkImage image,
     VkImageLayout imageLayout,
-    float depth,
-    uint32_t stencil,
+    const VkClearDepthStencilValue* pDepthStencil,
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
     PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
 
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
 
-    PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
+    PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
 }
 
 bool PreCmdClearColorAttachment(
@@ -6757,8 +6755,7 @@
     VkCmdBuffer cmdBuffer,
     VkImageAspectFlags imageAspectMask,
     VkImageLayout imageLayout,
-    float depth,
-    uint32_t stencil,
+    const VkClearDepthStencilValue* pDepthStencil,
     uint32_t rectCount)
 {
 
@@ -6781,16 +6778,15 @@
     VkCmdBuffer cmdBuffer,
     VkImageAspectFlags imageAspectMask,
     VkImageLayout imageLayout,
-    float depth,
-    uint32_t stencil,
+    const VkClearDepthStencilValue* pDepthStencil,
     uint32_t rectCount,
     const VkRect3D* pRects)
 {
     PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
 
-    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
+    get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
 
-    PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
+    PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount);
 }
 
 bool PreCmdResolveImage(
diff --git a/loader/trampoline.c b/loader/trampoline.c
index b1a8390..b24e822 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -1427,13 +1427,13 @@
     disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
 }
 
-LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
+LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
+    disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
 }
 
 LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects)
@@ -1445,13 +1445,13 @@
     disp->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
 }
 
-LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects)
+LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue *pDepthStencil, uint32_t rectCount, const VkRect3D* pRects)
 {
     const VkLayerDispatchTable *disp;
 
     disp = loader_get_dispatch(cmdBuffer);
 
-    disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
+    disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
 }
 
 LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 704e540..b6acdb9 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -1422,9 +1422,13 @@
         VkPipelineStageFlags dest_stages = VK_PIPELINE_STAGE_ALL_GPU_COMMANDS;
         vkCmdPipelineBarrier(cmd_.handle(), src_stages, dest_stages, false, to_clear.size(), (const void * const*) p_to_clear.data());
 
+        VkClearDepthStencilValue clear_value = {
+            depth,
+            stencil
+        };
         vkCmdClearDepthStencilImage(cmd_.handle(),
                                     img.handle(), VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-                                    depth, stencil,
+                                    &clear_value,
                                     ranges.size(), &ranges[0]);
 
         vkCmdPipelineBarrier(cmd_.handle(), src_stages, dest_stages, false, to_xfer.size(), (const void * const*)p_to_xfer.data());
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index f983498..8bea1f6 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -1398,9 +1398,13 @@
 
         vkCmdPipelineBarrier( handle(), src_stages, dest_stages, false, 1, (const void * const*)&pmemory_barrier);
 
+        VkClearDepthStencilValue clear_value = {
+            depth_clear_color,
+            stencil_clear_color
+        };
         vkCmdClearDepthStencilImage(handle(),
                                     depthStencilObj->handle(), VK_IMAGE_LAYOUT_GENERAL,
-                                    depth_clear_color,  stencil_clear_color,
+                                    &clear_value,
                                     1, &dsRange);
 
         // prepare depth buffer for rendering
diff --git a/vulkan.py b/vulkan.py
index 5d8601d..d647989 100755
--- a/vulkan.py
+++ b/vulkan.py
@@ -901,8 +901,7 @@
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkImage", "image"),
              Param("VkImageLayout", "imageLayout"),
-             Param("float", "depth"),
-             Param("uint32_t", "stencil"),
+             Param("const VkClearDepthStencilValue*", "pDepthStencil"),
              Param("uint32_t", "rangeCount"),
              Param("const VkImageSubresourceRange*", "pRanges")]),
 
@@ -918,8 +917,7 @@
             [Param("VkCmdBuffer", "cmdBuffer"),
              Param("VkImageAspectFlags", "imageAspectMask"),
              Param("VkImageLayout", "imageLayout"),
-             Param("float", "depth"),
-             Param("uint32_t", "stencil"),
+             Param("const VkClearDepthStencilValue*", "pDepthStencil"),
              Param("uint32_t", "rectCount"),
              Param("const VkRect3D*", "pRects")]),