Do not require TRANSIENT usage support without other RT usages
authorPyry Haulos <phaulos@google.com>
Mon, 10 Oct 2016 21:42:53 +0000 (14:42 -0700)
committerPyry Haulos <phaulos@google.com>
Tue, 11 Oct 2016 16:05:49 +0000 (09:05 -0700)
Affects dEQP-VK.api.info.image_format_properties.*

See CTS issue #507 and spec issue #540

Change-Id: Ia3a741c1943eea034a27b9479a0a8b4cc0caa09c

external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp

index ee49082..3b6d4a1 100644 (file)
@@ -1694,14 +1694,22 @@ VkImageUsageFlags getValidImageUsageFlags (VkFormat, VkFormatFeatureFlags suppor
 
 bool isValidImageUsageFlagCombination (VkImageUsageFlags usage)
 {
-       if (usage & vk::VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
+       if ((usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) != 0)
        {
-               const VkImageUsageFlags         allowedFlags    = vk::VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
-                                                                                                       | vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
-                                                                                                       | vk::VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
-                                                                                                       | vk::VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
-               return (usage & ~allowedFlags) == 0;
+               const VkImageUsageFlags         allowedFlags    = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+                                                                                                       | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+                                                                                                       | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+                                                                                                       | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
+
+               // Only *_ATTACHMENT_BIT flags can be combined with TRANSIENT_ATTACHMENT_BIT
+               if ((usage & ~allowedFlags) != 0)
+                       return false;
+
+               // TRANSIENT_ATTACHMENT_BIT is not valid without COLOR_ or DEPTH_STENCIL_ATTACHMENT_BIT
+               if ((usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) == 0)
+                       return false;
        }
+
        return usage != 0;
 }