From 6f0baae176a47bd15788dc712e7719a92bc9d0ab Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Thu, 27 Jul 2023 13:20:21 -0600 Subject: [PATCH] layers: Add misc host-image-copy VUIDs --- layers/core_checks/cc_device.cpp | 21 +++++++++++++++++++++ layers/core_checks/cc_image.cpp | 9 +++++++++ layers/core_checks/core_validation.h | 2 ++ 3 files changed, 32 insertions(+) diff --git a/layers/core_checks/cc_device.cpp b/layers/core_checks/cc_device.cpp index b6fd68ebe36..e60119f355a 100644 --- a/layers/core_checks/cc_device.cpp +++ b/layers/core_checks/cc_device.cpp @@ -601,12 +601,32 @@ bool CoreChecks::PreCallValidateGetDeviceQueue2(VkDevice device, const VkDeviceQ } return skip; } +bool CoreChecks::ValidateGetPhysicalDeviceImageFormatProperties2(const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo, + VkImageFormatProperties2 *pImageFormatProperties) const { + bool skip = false; + const auto *copy_perf_query = LvlFindInChain(pImageFormatProperties->pNext); + if (nullptr != copy_perf_query) { + if (!(enabled_features.host_image_copy_features.hostImageCopy)) { + skip |= LogError(device, "VUID-VkImageFormatProperties2-pNext-09005", + "vkGetPhysicalDeviceImageFormatProperties2(): pImageFormatProperties includes a chained " + "VkHostImageCopyDevicePerformanceQueryEXT struct when the hostImageCopy feature was not enabled"); + } + if ((pImageFormatInfo->usage & VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT) == 0) { + skip |= LogError(physical_device, "VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-09004", + "vkGetPhysicalDeviceImageFormatProperties2: pImageFormatProperties includes a chained " + "VkHostImageCopyDevicePerformanceQueryEXT struct, but pImageFormatInfo->usage does not contain " + "VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT"); + } + } + return skip; +} bool CoreChecks::PreCallValidateGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo, VkImageFormatProperties2 *pImageFormatProperties) const { // Can't wrap AHB-specific validation in a device extension check here, but no harm bool skip = ValidateGetPhysicalDeviceImageFormatProperties2ANDROID(pImageFormatInfo, pImageFormatProperties); + skip |= ValidateGetPhysicalDeviceImageFormatProperties2(pImageFormatInfo, pImageFormatProperties); return skip; } @@ -615,6 +635,7 @@ bool CoreChecks::PreCallValidateGetPhysicalDeviceImageFormatProperties2KHR(VkPhy VkImageFormatProperties2 *pImageFormatProperties) const { // Can't wrap AHB-specific validation in a device extension check here, but no harm bool skip = ValidateGetPhysicalDeviceImageFormatProperties2ANDROID(pImageFormatInfo, pImageFormatProperties); + skip |= ValidateGetPhysicalDeviceImageFormatProperties2(pImageFormatInfo, pImageFormatProperties); return skip; } diff --git a/layers/core_checks/cc_image.cpp b/layers/core_checks/cc_image.cpp index 2d43243b69d..9e2f4d6de99 100644 --- a/layers/core_checks/cc_image.cpp +++ b/layers/core_checks/cc_image.cpp @@ -90,6 +90,15 @@ bool CoreChecks::ValidateImageFormatFeatures(const VkImageCreateInfo *pCreateInf string_VkFormat(pCreateInfo->format), string_VkFormatFeatureFlags2(tiling_features).c_str()); } + if (((tiling_features & VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT) == 0) && + (pCreateInfo->usage & VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT)) { + skip |= + LogError(device, "VUID-VkImageCreateInfo-imageCreateFormatFeatures-09048", + "vkCreateImage(): usage cannot contain VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT because %s doesn't support " + "VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT based on imageCreateFormatFeatures (supported features: %s).", + string_VkFormat(pCreateInfo->format), string_VkFormatFeatureFlags2(tiling_features).c_str()); + } + return skip; } diff --git a/layers/core_checks/core_validation.h b/layers/core_checks/core_validation.h index c038db03529..c6a6fe7c02d 100644 --- a/layers/core_checks/core_validation.h +++ b/layers/core_checks/core_validation.h @@ -1493,6 +1493,8 @@ class CoreChecks : public ValidationStateTracker { VkMemoryRequirements2* pMemoryRequirements) const override; bool PreCallValidateGetImageMemoryRequirements2KHR(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const override; + bool ValidateGetPhysicalDeviceImageFormatProperties2(const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) const; bool PreCallValidateGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) const override;