Fix image requirements according to its usage
authormichal_jakubek <michal.jakubek@mobica.com>
Mon, 25 Oct 2021 07:39:15 +0000 (09:39 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 29 Oct 2021 17:56:18 +0000 (17:56 +0000)
VK-GL-CTS issue: 3090

Components: Vulkan

Affects:
dEQP-VK.sparse_resources.shader_intrinsics.*

Change-Id: If6c8e55be75fd3a9a170c7d0d413dc658d40adfa

external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.cpp

index e02753c..a492fef 100755 (executable)
@@ -711,6 +711,20 @@ tcu::TestStatus SparseShaderIntrinsicsInstanceBase::iterate (void)
                imageTexelsInfo.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
        }
 
+       {
+               VkImageFormatProperties imageFormatProperties;
+               if (instance.getPhysicalDeviceImageFormatProperties(physicalDevice,
+                       imageTexelsInfo.format,
+                       imageTexelsInfo.imageType,
+                       imageTexelsInfo.tiling,
+                       imageTexelsInfo.usage,
+                       imageTexelsInfo.flags,
+                       &imageFormatProperties) == VK_ERROR_FORMAT_NOT_SUPPORTED)
+               {
+                       TCU_THROW(NotSupportedError, "Image format not supported for its usage ");
+               }
+       }
+
        const Unique<VkImage>                   imageTexels                     (createImage(deviceInterface, getDevice(), &imageTexelsInfo));
        const de::UniquePtr<Allocation> imageTexelsAlloc        (bindImage(deviceInterface, getDevice(), getAllocator(), *imageTexels, MemoryRequirement::Any));
 
@@ -718,6 +732,20 @@ tcu::TestStatus SparseShaderIntrinsicsInstanceBase::iterate (void)
        imageResidencyInfo                      = imageTexelsInfo;
        imageResidencyInfo.format       = mapTextureFormat(m_residencyFormat);
 
+       {
+               VkImageFormatProperties imageFormatProperties;
+               if (instance.getPhysicalDeviceImageFormatProperties(physicalDevice,
+                       imageResidencyInfo.format,
+                       imageResidencyInfo.imageType,
+                       imageResidencyInfo.tiling,
+                       imageResidencyInfo.usage,
+                       imageResidencyInfo.flags,
+                       &imageFormatProperties) == VK_ERROR_FORMAT_NOT_SUPPORTED)
+               {
+                       TCU_THROW(NotSupportedError, "Image format not supported for its usage ");
+               }
+       }
+
        const Unique<VkImage>                   imageResidency          (createImage(deviceInterface, getDevice(), &imageResidencyInfo));
        const de::UniquePtr<Allocation> imageResidencyAlloc     (bindImage(deviceInterface, getDevice(), getAllocator(), *imageResidency, MemoryRequirement::Any));