Add StorageImageExtendedFormats cap check
authorAlexander Galazin <alexander.galazin@arm.com>
Fri, 6 Oct 2017 20:07:30 +0000 (22:07 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Sat, 7 Oct 2017 15:47:51 +0000 (11:47 -0400)
dEQP-VK.image.texel_view_compatible.compute.* didn't check
for shaderStorageImageExtendedFormats

Component: Vulkan

VK-GL-CTS issue: 753

Affects:
dEQP-VK.image.texel_view_compatible.compute.*

Change-Id: I957329a66d2f4bedb950a597a702ec29680418de

external/vulkancts/modules/vulkan/image/vktImageCompressionTranscodingSupport.cpp
external/vulkancts/modules/vulkan/image/vktImageLoadStoreUtil.cpp
external/vulkancts/modules/vulkan/image/vktImageLoadStoreUtil.hpp
external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp

index 1c87442..6ba834e 100644 (file)
@@ -22,6 +22,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktImageCompressionTranscodingSupport.hpp"
+#include "vktImageLoadStoreUtil.hpp"
 
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
@@ -2603,6 +2604,11 @@ TestInstance* TexelViewCompatibleCase::createInstance (Context& context) const
                if (deInRange32(m_parameters.formatCompressed, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK) &&
                        !physicalDeviceFeatures.textureCompressionASTC_LDR)
                        TCU_THROW(NotSupportedError, "textureCompressionASTC_LDR not supported");
+
+               if ((m_parameters.uncompressedImageUsage & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) &&
+                       isStorageImageExtendedFormat(m_parameters.formatUncompressed) &&
+                       !physicalDeviceFeatures.shaderStorageImageExtendedFormats)
+                       TCU_THROW(NotSupportedError, "Storage view format requires shaderStorageImageExtended");
        }
 
        switch (m_parameters.shader)
index 4d5a027..69dd601 100644 (file)
@@ -110,5 +110,39 @@ VkDeviceSize getOptimalUniformBufferChunkSize (const InstanceInterface& vki, con
                return alignment;
 }
 
+bool isStorageImageExtendedFormat (const vk::VkFormat format)
+{
+       switch (format)
+       {
+               case VK_FORMAT_R32G32_SFLOAT:
+               case VK_FORMAT_R32G32_SINT:
+               case VK_FORMAT_R32G32_UINT:
+               case VK_FORMAT_R16G16B16A16_UNORM:
+               case VK_FORMAT_R16G16B16A16_SNORM:
+               case VK_FORMAT_R16G16_SFLOAT:
+               case VK_FORMAT_R16G16_UNORM:
+               case VK_FORMAT_R16G16_SNORM:
+               case VK_FORMAT_R16G16_SINT:
+               case VK_FORMAT_R16G16_UINT:
+               case VK_FORMAT_R16_SFLOAT:
+               case VK_FORMAT_R16_UNORM:
+               case VK_FORMAT_R16_SNORM:
+               case VK_FORMAT_R16_SINT:
+               case VK_FORMAT_R16_UINT:
+               case VK_FORMAT_R8G8_UNORM:
+               case VK_FORMAT_R8G8_SNORM:
+               case VK_FORMAT_R8G8_SINT:
+               case VK_FORMAT_R8G8_UINT:
+               case VK_FORMAT_R8_UNORM:
+               case VK_FORMAT_R8_SNORM:
+               case VK_FORMAT_R8_SINT:
+               case VK_FORMAT_R8_UINT:
+                       return true;
+
+               default:
+                       return false;
+       }
+}
+
 } // image
 } // vkt
index a25a00d..9b32f9b 100644 (file)
@@ -66,6 +66,7 @@ float                                 computeStoreColorScale                          (const vk::VkFormat format, const tcu::IVec3
 ImageType                              getImageTypeForSingleLayer                      (const ImageType imageType);
 vk::VkImageCreateInfo  makeImageCreateInfo                                     (const Texture& texture, const vk::VkFormat format, const vk::VkImageUsageFlags usage, const vk::VkImageCreateFlags flags);
 vk::VkDeviceSize               getOptimalUniformBufferChunkSize        (const vk::InstanceInterface& vki, const vk::VkPhysicalDevice physDevice, vk::VkDeviceSize minimumRequiredChunkSizeBytes);
+bool                                   isStorageImageExtendedFormat            (const vk::VkFormat format);
 
 } // image
 } // vkt
index 0586b15..02fb2f0 100644 (file)
@@ -22,6 +22,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktImageMutableTests.hpp"
+#include "vktImageLoadStoreUtil.hpp"
 #include "vktTestCaseUtil.hpp"
 #include "vktImageTexture.hpp"
 
@@ -1635,40 +1636,6 @@ void UploadDownloadExecutor::copyImageToBuffer(VkImage                           sourceImage,
                0u, DE_NULL, 1u, &bufferBarrier, 0u, DE_NULL);
 }
 
-bool isStorageImageExtendedFormat (const VkFormat format)
-{
-       switch (format)
-       {
-               case VK_FORMAT_R32G32_SFLOAT:
-               case VK_FORMAT_R32G32_SINT:
-               case VK_FORMAT_R32G32_UINT:
-               case VK_FORMAT_R16G16B16A16_UNORM:
-               case VK_FORMAT_R16G16B16A16_SNORM:
-               case VK_FORMAT_R16G16_SFLOAT:
-               case VK_FORMAT_R16G16_UNORM:
-               case VK_FORMAT_R16G16_SNORM:
-               case VK_FORMAT_R16G16_SINT:
-               case VK_FORMAT_R16G16_UINT:
-               case VK_FORMAT_R16_SFLOAT:
-               case VK_FORMAT_R16_UNORM:
-               case VK_FORMAT_R16_SNORM:
-               case VK_FORMAT_R16_SINT:
-               case VK_FORMAT_R16_UINT:
-               case VK_FORMAT_R8G8_UNORM:
-               case VK_FORMAT_R8G8_SNORM:
-               case VK_FORMAT_R8G8_SINT:
-               case VK_FORMAT_R8G8_UINT:
-               case VK_FORMAT_R8_UNORM:
-               case VK_FORMAT_R8_SNORM:
-               case VK_FORMAT_R8_SINT:
-               case VK_FORMAT_R8_UINT:
-                       return true;
-
-               default:
-                       return false;
-       }
-}
-
 tcu::TestStatus testMutable (Context& context, const CaseDef caseDef)
 {
        const DeviceInterface&                  vk                      = context.getDeviceInterface();