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")]),