From 78bfa6c301bd1d87ec8aa3c097455beac0b65c4f Mon Sep 17 00:00:00 2001 From: Dave Houlton Date: Tue, 10 Apr 2018 16:41:14 -0600 Subject: layers: maint2 image usage bit validation Add partial support for VK_IMAGE_CREATE_EXTENDED_USAGE_BIT in vkCreateImage(), currently just avoiding the usage bit checks when EXTENDED_USAGE is specified. Full support will require an exhaustive search of all compatible format's usage bits, which seems pretty expensive. TODO for now. Adds support for checking for a chained VkImageViewUsageCreateInfo struct when doing usage bit validation in vkCreateImageView(). Change-Id: I79a5853dc93dfa54040ace162170f1226a978c2d --- layers/parameter_validation_utils.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'layers/parameter_validation_utils.cpp') diff --git a/layers/parameter_validation_utils.cpp b/layers/parameter_validation_utils.cpp index ba071d8d..53a9f875 100644 --- a/layers/parameter_validation_utils.cpp +++ b/layers/parameter_validation_utils.cpp @@ -1113,6 +1113,24 @@ bool pv_vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateI "pCreateInfo->subresourceRange.layerCount must be 1"); } } + + // Validate chained VkImageViewUsageCreateInfo struct, if present + if (nullptr != pCreateInfo->pNext) { + auto chained_ivuci_struct = lvl_find_in_chain(pCreateInfo->pNext); + if (chained_ivuci_struct) { + if (0 == chained_ivuci_struct->usage) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + VALIDATION_ERROR_3f230603, + "vkCreateImageView: Chained VkImageViewUsageCreateInfo usage field must not be 0"); + } else if (chained_ivuci_struct->usage & ~AllVkImageUsageFlagBits) { + std::stringstream ss; + ss << "vkCreateImageView: Chained VkImageViewUsageCreateInfo usage field (0x" << std::hex + << chained_ivuci_struct->usage << ") contains invalid flag bits."; + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + VALIDATION_ERROR_3f230601, "%s", ss.str().c_str()); + } + } + } } return skip; } -- cgit v1.2.3