diff options
| author | Tony Barbour <tony@LunarG.com> | 2016-06-02 09:43:50 -0600 |
|---|---|---|
| committer | Tony Barbour <tony@LunarG.com> | 2016-06-07 12:05:13 -0600 |
| commit | 0d0a82a77b82e9560dce5c5a7f6b213cac490237 (patch) | |
| tree | bc94da638f791290af3fdcdb109ea916436e025e | |
| parent | b6b1a1f490a1a64877a52ec42600da5c8a340b7d (diff) | |
| download | usermoji-0d0a82a77b82e9560dce5c5a7f6b213cac490237.tar.xz | |
layers: Add check for image usage in vkCmdClearColorImage
Change-Id: I7ba803a11de29e65ae65fbf0a0168561a2e6739f
| -rw-r--r-- | layers/image.cpp | 6 | ||||
| -rw-r--r-- | layers/image.h | 8 | ||||
| -rw-r--r-- | layers/vk_validation_layer_details.md | 1 |
3 files changed, 12 insertions, 3 deletions
diff --git a/layers/image.cpp b/layers/image.cpp index 1fb7d5a0..116f49f7 100644 --- a/layers/image.cpp +++ b/layers/image.cpp @@ -644,6 +644,12 @@ VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkI skipCall |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, reinterpret_cast<uint64_t &>(image), __LINE__, IMAGE_INVALID_FORMAT, "IMAGE", str); } + + if (!(image_state->usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT)) { + char const str[] = "vkCmdClearColorImage called with image created without VK_IMAGE_USAGE_TRANSFER_DST_BIT."; + skipCall |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, + reinterpret_cast<uint64_t &>(image), __LINE__, IMAGE_INVALID_USAGE, "IMAGE", str); + } } if (!skipCall) { diff --git a/layers/image.h b/layers/image.h index 93b6c7ed..6a6c76b3 100644 --- a/layers/image.h +++ b/layers/image.h @@ -44,6 +44,7 @@ enum IMAGE_ERROR { IMAGE_INVALID_FORMAT_LIMITS_VIOLATION, // Device limits for this format have been exceeded IMAGE_INVALID_LAYOUT, // Operation specifies an invalid layout IMAGE_INVALID_EXTENTS, // Operation specifies invalid image extents + IMAGE_INVALID_USAGE, // Image was created without necessary usage for operation }; struct IMAGE_STATE { @@ -54,13 +55,14 @@ struct IMAGE_STATE { VkImageType imageType; VkExtent3D extent; VkImageCreateFlags flags; + VkImageUsageFlags usage; IMAGE_STATE() : mipLevels(0), arraySize(0), format(VK_FORMAT_UNDEFINED), samples(VK_SAMPLE_COUNT_1_BIT), - imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{}, flags(0){}; + imageType(VK_IMAGE_TYPE_RANGE_SIZE), extent{}, flags(0), usage(0){}; IMAGE_STATE(const VkImageCreateInfo *pCreateInfo) : mipLevels(pCreateInfo->mipLevels), arraySize(pCreateInfo->arrayLayers), format(pCreateInfo->format), - samples(pCreateInfo->samples), imageType(pCreateInfo->imageType), extent(pCreateInfo->extent), - flags(pCreateInfo->flags){}; + samples(pCreateInfo->samples), imageType(pCreateInfo->imageType), extent(pCreateInfo->extent), flags(pCreateInfo->flags), + usage(pCreateInfo->usage){}; }; #endif // IMAGE_H diff --git a/layers/vk_validation_layer_details.md b/layers/vk_validation_layer_details.md index e7c6c592..e71a41db 100644 --- a/layers/vk_validation_layer_details.md +++ b/layers/vk_validation_layer_details.md @@ -215,6 +215,7 @@ DETAILS TABLE PENDING | Verify Image Format Limits | Verifies that image creation parameters are with the device format limits | INVALID_FORMAT_LIMITS_VIOLATION | vkCreateImage | ImageFormatLimits | NA | | Verify Layout | Verifies the layouts are valid for this image operation | INVALID_LAYOUT | vkCreateImage vkCmdClearColorImage | TODO | ImageFormatLimits | | Verify Image Extents | Validates that image extent limits are not invalid | INVALID_EXTENTS | vkCmdCopyImage | CopyImageLayerCountMismatch | NA | +| Verify Usage | Verifies the image was created with usage valid for this image operation | INVALID_USAGE | vkCmdClearColorImage | TODO | ClearImageErrors | | NA | Enum used for informational messages | NONE | | TODO | None | ### VK_LAYER_LUNARG_image Pending Work |
