aboutsummaryrefslogtreecommitdiff
path: root/layers/parameter_validation_utils.cpp
diff options
context:
space:
mode:
authorDave Houlton <daveh@lunarg.com>2018-04-10 16:41:14 -0600
committerDave Houlton <daveh@lunarg.com>2018-04-12 14:05:51 -0600
commit78bfa6c301bd1d87ec8aa3c097455beac0b65c4f (patch)
tree6916d40fa11e1290929facad4886f69ddafdae95 /layers/parameter_validation_utils.cpp
parentb4c7b602e4238558e7001ca541e0fe8924c5c2ec (diff)
downloadusermoji-78bfa6c301bd1d87ec8aa3c097455beac0b65c4f.tar.xz
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
Diffstat (limited to 'layers/parameter_validation_utils.cpp')
-rw-r--r--layers/parameter_validation_utils.cpp18
1 files changed, 18 insertions, 0 deletions
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<VkImageViewUsageCreateInfoKHR>(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;
}