From: Marcin Rogucki Date: Mon, 9 Oct 2017 13:56:44 +0000 (+0200) Subject: dEQP-VK.ycbcr.* tests throw NotSupported incorrectly X-Git-Tag: upstream/1.3.5~2565^2~6^2~79 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ee015701bdeed93cf55f91f5af91cdc61bb7fcb;p=platform%2Fupstream%2FVK-GL-CTS.git dEQP-VK.ycbcr.* tests throw NotSupported incorrectly Generic way of checking samplerYcbcrConversion support added to DefaultDevice and Context. Used in dEQP-VK.ycbcr.* tests group in checkImageSupport() function. Component: Vulkan VK-GL-CTS issue: 755 Affects: dEQP-VK.ycbcr.* Change-Id: I0774a476f7ed94351c00387bc2e75d9c09492970 --- diff --git a/external/vulkancts/modules/vulkan/vktTestCase.cpp b/external/vulkancts/modules/vulkan/vktTestCase.cpp index ed71e93..08cd185 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.cpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.cpp @@ -266,35 +266,31 @@ Move createDefaultDevice (const InstanceInterface& vki, bool isPhysicalDeviceFeatures2Supported (const deUint32 version, const vector& instanceExtensions) { - return isInstanceExtensionSupported(version, instanceExtensions, "VK_KHR_get_physical_device_properties"); + return isInstanceExtensionSupported(version, instanceExtensions, "VK_KHR_get_physical_device_properties2"); } -struct DeviceFeatures +class DeviceFeatures { +public: VkPhysicalDeviceFeatures2 coreFeatures; VkPhysicalDeviceSamplerYcbcrConversionFeatures samplerYCbCrConversionFeatures; DeviceFeatures (const InstanceInterface& vki, const deUint32 apiVersion, - VkPhysicalDevice physicalDevice, + const VkPhysicalDevice& physicalDevice, const vector& instanceExtensions, const vector& deviceExtensions) { - void** curExtPoint = &coreFeatures.pNext; - deMemset(&coreFeatures, 0, sizeof(coreFeatures)); deMemset(&samplerYCbCrConversionFeatures, 0, sizeof(samplerYCbCrConversionFeatures)); coreFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - samplerYCbCrConversionFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR; + samplerYCbCrConversionFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES; if (isPhysicalDeviceFeatures2Supported(apiVersion, instanceExtensions)) { if (de::contains(deviceExtensions.begin(), deviceExtensions.end(), "VK_KHR_sampler_ycbcr_conversion")) - { - *curExtPoint = &samplerYCbCrConversionFeatures; - curExtPoint = &samplerYCbCrConversionFeatures.pNext; - } + coreFeatures.pNext = &samplerYCbCrConversionFeatures; vki.getPhysicalDeviceFeatures2(physicalDevice, &coreFeatures); } @@ -311,30 +307,30 @@ struct DeviceFeatures class DefaultDevice { public: - DefaultDevice (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine); - ~DefaultDevice (void); + DefaultDevice (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine); + ~DefaultDevice (void); - VkInstance getInstance (void) const { return *m_instance; } - const InstanceInterface& getInstanceInterface (void) const { return m_instanceInterface; } - deUint32 getInstanceVersion (void) const { return m_instanceVersion; } - const vector& getInstanceExtensions (void) const { return m_instanceExtensions; } + VkInstance getInstance (void) const { return *m_instance; } + const InstanceInterface& getInstanceInterface (void) const { return m_instanceInterface; } + deUint32 getInstanceVersion (void) const { return m_instanceVersion; } + const vector& getInstanceExtensions (void) const { return m_instanceExtensions; } - VkPhysicalDevice getPhysicalDevice (void) const { return m_physicalDevice; } - deUint32 getDeviceVersion (void) const { return m_deviceVersion; } - const VkPhysicalDeviceFeatures& getDeviceFeatures (void) const { return m_deviceFeatures; } - const VkPhysicalDeviceFeatures2& getDeviceFeatures2 (void) const { return m_deviceFeatures2; } - VkDevice getDevice (void) const { return *m_device; } - const DeviceInterface& getDeviceInterface (void) const { return m_deviceInterface; } - const VkPhysicalDeviceProperties& getDeviceProperties (void) const { return m_deviceProperties; } - const vector& getDeviceExtensions (void) const { return m_deviceExtensions; } + VkPhysicalDevice getPhysicalDevice (void) const { return m_physicalDevice; } + deUint32 getDeviceVersion (void) const { return m_deviceVersion; } + const VkPhysicalDeviceFeatures& getDeviceFeatures (void) const { return m_deviceFeatures.coreFeatures.features; } + const VkPhysicalDeviceFeatures2& getDeviceFeatures2 (void) const { return m_deviceFeatures.coreFeatures; } + const VkPhysicalDeviceSamplerYcbcrConversionFeatures& getSamplerYCbCrConversionFeatures (void) const { return m_deviceFeatures.samplerYCbCrConversionFeatures; } + VkDevice getDevice (void) const { return *m_device; } + const DeviceInterface& getDeviceInterface (void) const { return m_deviceInterface; } + const VkPhysicalDeviceProperties& getDeviceProperties (void) const { return m_deviceProperties; } + const vector& getDeviceExtensions (void) const { return m_deviceExtensions; } - deUint32 getUsedApiVersion (void) const { return m_usedApiVersion; } + deUint32 getUsedApiVersion (void) const { return m_usedApiVersion; } - deUint32 getUniversalQueueFamilyIndex (void) const { return m_universalQueueFamilyIndex; } - VkQueue getUniversalQueue (void) const; + deUint32 getUniversalQueueFamilyIndex (void) const { return m_universalQueueFamilyIndex; } + VkQueue getUniversalQueue (void) const; private: - static VkPhysicalDeviceFeatures filterDefaultDeviceFeatures (const VkPhysicalDeviceFeatures& deviceFeatures); const deUint32 m_instanceVersion; const vector m_instanceExtensions; @@ -347,10 +343,10 @@ private: const deUint32 m_usedApiVersion; const deUint32 m_universalQueueFamilyIndex; - const VkPhysicalDeviceFeatures m_deviceFeatures; - const VkPhysicalDeviceFeatures2 m_deviceFeatures2; const VkPhysicalDeviceProperties m_deviceProperties; + const vector m_deviceExtensions; + const DeviceFeatures m_deviceFeatures; const Unique m_device; const DeviceDriver m_deviceInterface; @@ -366,11 +362,10 @@ DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::Co , m_deviceVersion (getPhysicalDeviceProperties(m_instanceInterface, m_physicalDevice).apiVersion) , m_usedApiVersion (deMin32(m_instanceVersion, m_deviceVersion)) , m_universalQueueFamilyIndex (findQueueFamilyIndexWithCaps(m_instanceInterface, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT|VK_QUEUE_COMPUTE_BIT)) - , m_deviceFeatures (filterDefaultDeviceFeatures(getPhysicalDeviceFeatures(m_instanceInterface, m_physicalDevice))) - , m_deviceFeatures2 (getPhysicalDeviceFeatures2(m_instanceInterface, m_physicalDevice)) , m_deviceProperties (getPhysicalDeviceProperties(m_instanceInterface, m_physicalDevice)) , m_deviceExtensions (addCoreDeviceExtensions(filterExtensions(enumerateDeviceExtensionProperties(m_instanceInterface, m_physicalDevice, DE_NULL)), m_deviceVersion)) - , m_device (createDefaultDevice(m_instanceInterface, m_physicalDevice, m_deviceVersion, m_universalQueueFamilyIndex, m_deviceFeatures2, m_deviceExtensions, cmdLine)) + , m_deviceFeatures (m_instanceInterface, m_deviceVersion, m_physicalDevice, m_instanceExtensions, m_deviceExtensions) + , m_device (createDefaultDevice(m_instanceInterface, m_physicalDevice, m_deviceVersion, m_universalQueueFamilyIndex, getDeviceFeatures2(), m_deviceExtensions, cmdLine)) , m_deviceInterface (m_instanceInterface, *m_device) { } @@ -384,16 +379,6 @@ VkQueue DefaultDevice::getUniversalQueue (void) const return getDeviceQueue(m_deviceInterface, *m_device, m_universalQueueFamilyIndex, 0); } -VkPhysicalDeviceFeatures DefaultDevice::filterDefaultDeviceFeatures (const VkPhysicalDeviceFeatures& deviceFeatures) -{ - VkPhysicalDeviceFeatures enabledDeviceFeatures = deviceFeatures; - - // Disable robustness by default, as it has an impact on performance on some HW. - enabledDeviceFeatures.robustBufferAccess = false; - - return enabledDeviceFeatures; -} - // Allocator utilities vk::Allocator* createAllocator (DefaultDevice* device) @@ -429,6 +414,9 @@ vk::VkPhysicalDevice Context::getPhysicalDevice (void) const { return m_d deUint32 Context::getDeviceVersion (void) const { return m_device->getDeviceVersion(); } const vk::VkPhysicalDeviceFeatures& Context::getDeviceFeatures (void) const { return m_device->getDeviceFeatures(); } const vk::VkPhysicalDeviceFeatures2& Context::getDeviceFeatures2 (void) const { return m_device->getDeviceFeatures2(); } +const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures& + Context::getSamplerYCbCrConversionFeatures + (void) const { return m_device->getSamplerYCbCrConversionFeatures(); } const vk::VkPhysicalDeviceProperties& Context::getDeviceProperties (void) const { return m_device->getDeviceProperties(); } const vector& Context::getDeviceExtensions (void) const { return m_device->getDeviceExtensions(); } vk::VkDevice Context::getDevice (void) const { return m_device->getDevice(); } diff --git a/external/vulkancts/modules/vulkan/vktTestCase.hpp b/external/vulkancts/modules/vulkan/vktTestCase.hpp index a7e1507..7d5c46c 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.hpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.hpp @@ -67,6 +67,9 @@ public: deUint32 getDeviceVersion (void) const; const vk::VkPhysicalDeviceFeatures& getDeviceFeatures (void) const; const vk::VkPhysicalDeviceFeatures2& getDeviceFeatures2 (void) const; + const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures& + getSamplerYCbCrConversionFeatures + (void) const; const vk::VkPhysicalDeviceProperties& getDeviceProperties (void) const; const std::vector& getDeviceExtensions (void) const; vk::VkDevice getDevice (void) const; diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp index 1c6f17d..c230969 100644 --- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp +++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp @@ -196,8 +196,9 @@ void readStagingBuffers (MultiPlaneImageData* imageData, void checkImageSupport (Context& context, VkFormat format, VkImageCreateFlags createFlags, VkImageTiling tiling) { - const bool disjoint = (createFlags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0; - vector reqExts; + const bool disjoint = (createFlags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0; + const VkPhysicalDeviceSamplerYcbcrConversionFeatures features = context.getSamplerYCbCrConversionFeatures(); + vector reqExts; if (!isCoreDeviceExtension(context.getUsedApiVersion(), "VK_KHR_sampler_ycbcr_conversion")) reqExts.push_back("VK_KHR_sampler_ycbcr_conversion"); @@ -216,28 +217,9 @@ void checkImageSupport (Context& context, VkFormat format, VkImageCreateFlags cr TCU_THROW(NotSupportedError, (*extIter + " is not supported").c_str()); } + if (features.samplerYcbcrConversion == VK_FALSE) { - vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures ycbcrFeature = - { - vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, - DE_NULL, - VK_FALSE - }; - - vk::VkPhysicalDeviceFeatures features; - deMemset(&features, 0, sizeof(vk::VkPhysicalDeviceFeatures)); - - vk::VkPhysicalDeviceFeatures2 featuresExt = - { - vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, - &ycbcrFeature, - features - }; - - context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &featuresExt); - - if (ycbcrFeature.samplerYcbcrConversion == VK_FALSE) - TCU_THROW(NotSupportedError, "samplerYcbcrConversion is not supported"); + TCU_THROW(NotSupportedError, "samplerYcbcrConversion is not supported"); } {