From b5a39e47c8e27802beb605da6622cf6d53940c35 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 5 Oct 2017 16:18:09 +0100 Subject: [PATCH] Verify VkSamplerYcbcrConversionImageFormatPropertiesKHR is properly filled We currently have no checks on this value. VK-GL-CTS issue: 745 Affects: dEQP-VK.ycbcr.format.* Components: Vulkan Change-Id: Ifdad55f277380148d1939ba031a3c094b80c65fb --- .../modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp index 7f33a04..e55d634 100644 --- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp +++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp @@ -34,6 +34,8 @@ #include "vkQueryUtil.hpp" #include "vkMemUtil.hpp" #include "vkImageUtil.hpp" +#include "vkDeviceUtil.hpp" +#include "vkPlatform.hpp" #include "tcuTestLog.hpp" #include "tcuVectorUtil.hpp" @@ -70,6 +72,19 @@ using std::string; typedef de::SharedPtr AllocationSp; typedef de::SharedPtr > VkBufferSp; +Move createInstanceWithExtension (const PlatformInterface& vkp, deUint32 version, const char* extensionName) +{ + const vector instanceExts = enumerateInstanceExtensionProperties(vkp, DE_NULL); + vector enabledExts; + + if (!isExtensionSupported(instanceExts, RequiredExtension(extensionName))) + TCU_THROW(NotSupportedError, (string(extensionName) + " is not supported").c_str()); + + enabledExts.push_back(extensionName); + + return vk::createDefaultInstance(vkp, version, vector() /* layers */, enabledExts); +} + Move createTestImage (const DeviceInterface& vkd, VkDevice device, VkFormat format, @@ -367,6 +382,49 @@ tcu::TestStatus testFormat (Context& context, TestParameters params) MultiPlaneImageData imageData (format, size); + const VkPhysicalDeviceImageFormatInfo2 imageFormatInfo = + { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, + DE_NULL, + params.format, + VK_IMAGE_TYPE_2D, + params.tiling, + VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT, + params.flags, + }; + VkSamplerYcbcrConversionImageFormatProperties ycbcrProperties = + { + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, + DE_NULL, + 0, + }; + VkImageFormatProperties2 extProperties = + { + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, + &ycbcrProperties, + { + { + 0, // width + 0, // height + 0, // depth + }, + 0u, // maxMipLevels + 0u, // maxArrayLayers + 0, // sampleCounts + 0u, // maxResourceSize + }, + }; + VkResult propsResult; + const PlatformInterface& vkp = context.getPlatformInterface(); + const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); + const InstanceDriver vki (vkp, *instance); + + // Verify that a yuv image consumes at least one descriptor + propsResult = vki.getPhysicalDeviceImageFormatProperties2(context.getPhysicalDevice(), &imageFormatInfo, &extProperties); + + TCU_CHECK(propsResult == VK_SUCCESS); + TCU_CHECK(ycbcrProperties.combinedImageSamplerDescriptorCount >= 1); + // Prepare texture data fillGradient(&imageData, Vec4(0.0f), Vec4(1.0f)); -- 2.7.4