aboutsummaryrefslogtreecommitdiff
path: root/layers/image.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/image.cpp')
-rw-r--r--layers/image.cpp69
1 files changed, 41 insertions, 28 deletions
diff --git a/layers/image.cpp b/layers/image.cpp
index 0b8b242b..52800bfa 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -490,32 +490,6 @@ VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
}
}
-VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
- VkCmdBuffer cmdBuffer,
- VkImageAspectFlags imageAspectMask,
- VkImageLayout imageLayout,
- const VkClearDepthStencilValue *pDepthStencil,
- uint32_t rectCount,
- const VkRect3D *pRects)
-{
- VkBool32 skipCall = VK_FALSE;
-
- // Image aspect must be depth or stencil or both
- if (((imageAspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) != VK_IMAGE_ASPECT_DEPTH_BIT) &&
- ((imageAspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) != VK_IMAGE_ASPECT_STENCIL_BIT))
- {
- layer_data *device_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
- char const str[] = "vkCmdClearDepthStencilAttachment aspectMask must be set to VK_IMAGE_ASPECT_DEPTH_BIT and/or VK_IMAGE_ASPECT_STENCIL_BIT";
- skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
- (uint64_t)cmdBuffer, 0, IMAGE_INVALID_IMAGE_ASPECT, "IMAGE", str);
- }
-
- if (VK_FALSE == skipCall) {
- get_dispatch_table(image_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer,
- imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
- }
-}
-
VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
VkCmdBuffer cmdBuffer,
VkImage srcImage,
@@ -577,6 +551,45 @@ VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
}
}
+void VKAPI vkCmdClearAttachments(
+ VkCmdBuffer cmdBuffer,
+ uint32_t attachmentCount,
+ const VkClearAttachment* pAttachments,
+ uint32_t rectCount,
+ const VkRect3D* pRects)
+{
+ VkBool32 skipCall = VK_FALSE;
+ VkImageAspectFlags aspectMask;
+
+ for (uint32_t i = 0; i < attachmentCount; i++) {
+ aspectMask = pAttachments[i].aspectMask;
+ if (aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) {
+ if (aspectMask != VK_IMAGE_ASPECT_COLOR_BIT) {
+ // VK_IMAGE_ASPECT_COLOR_BIT is not the only bit set for this attachment
+ layer_data *device_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ char const str[] = "vkCmdClearAttachments aspectMask [%d] must set only VK_IMAGE_ASPECT_COLOR_BIT of a color attachment.";
+ skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
+ (uint64_t)cmdBuffer, 0, IMAGE_INVALID_IMAGE_ASPECT, "IMAGE", str, i);
+ }
+ } else {
+ // Image aspect must be depth or stencil or both
+ if (((aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) != VK_IMAGE_ASPECT_DEPTH_BIT) &&
+ ((aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) != VK_IMAGE_ASPECT_STENCIL_BIT))
+ {
+ layer_data *device_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ char const str[] = "vkCmdClearAttachments aspectMask [%d] must be set to VK_IMAGE_ASPECT_DEPTH_BIT and/or VK_IMAGE_ASPECT_STENCIL_BIT";
+ skipCall |= log_msg(device_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER,
+ (uint64_t)cmdBuffer, 0, IMAGE_INVALID_IMAGE_ASPECT, "IMAGE", str, i);
+ }
+ }
+ }
+
+ if (VK_FALSE == skipCall) {
+ get_dispatch_table(image_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer,
+ attachmentCount, pAttachments, rectCount, pRects);
+ }
+}
+
VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
VkCmdBuffer cmdBuffer,
VkImage srcImage,
@@ -753,8 +766,8 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, co
return (PFN_vkVoidFunction) vkCmdClearColorImage;
if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
return (PFN_vkVoidFunction) vkCmdClearDepthStencilImage;
- if (!strcmp(funcName, "vkCmdClearDepthStencilAttachment"))
- return (PFN_vkVoidFunction) vkCmdClearDepthStencilAttachment;
+ if (!strcmp(funcName, "vkCmdClearAttachments"))
+ return (PFN_vkVoidFunction) vkCmdClearAttachments;
if (!strcmp(funcName, "vkCmdCopyImage"))
return (PFN_vkVoidFunction) vkCmdCopyImage;
if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))