return tcu::TestStatus::pass("Querying deviceGroup peer memory features succeeded");
}
-// \todo [2016-01-22 pyry] Optimize by doing format -> flags mapping instead
-
VkFormatFeatureFlags getRequiredOptimalTilingFeatures (VkFormat format)
{
- static const VkFormat s_requiredSampledImageBlitSrcFormats[] =
- {
- VK_FORMAT_B4G4R4A4_UNORM_PACK16,
- VK_FORMAT_R5G6B5_UNORM_PACK16,
- VK_FORMAT_A1R5G5B5_UNORM_PACK16,
- VK_FORMAT_R8_UNORM,
- VK_FORMAT_R8_SNORM,
- VK_FORMAT_R8_UINT,
- VK_FORMAT_R8_SINT,
- VK_FORMAT_R8G8_UNORM,
- VK_FORMAT_R8G8_SNORM,
- VK_FORMAT_R8G8_UINT,
- VK_FORMAT_R8G8_SINT,
- VK_FORMAT_R8G8B8A8_UNORM,
- VK_FORMAT_R8G8B8A8_SNORM,
- VK_FORMAT_R8G8B8A8_UINT,
- VK_FORMAT_R8G8B8A8_SINT,
- VK_FORMAT_R8G8B8A8_SRGB,
- VK_FORMAT_B8G8R8A8_UNORM,
- VK_FORMAT_B8G8R8A8_SRGB,
- VK_FORMAT_A8B8G8R8_UNORM_PACK32,
- VK_FORMAT_A8B8G8R8_SNORM_PACK32,
- VK_FORMAT_A8B8G8R8_UINT_PACK32,
- VK_FORMAT_A8B8G8R8_SINT_PACK32,
- VK_FORMAT_A8B8G8R8_SRGB_PACK32,
- VK_FORMAT_A2B10G10R10_UNORM_PACK32,
- VK_FORMAT_A2B10G10R10_UINT_PACK32,
- VK_FORMAT_R16_UINT,
- VK_FORMAT_R16_SINT,
- VK_FORMAT_R16_SFLOAT,
- VK_FORMAT_R16G16_UINT,
- VK_FORMAT_R16G16_SINT,
- VK_FORMAT_R16G16_SFLOAT,
- VK_FORMAT_R16G16B16A16_UINT,
- VK_FORMAT_R16G16B16A16_SINT,
- VK_FORMAT_R16G16B16A16_SFLOAT,
- VK_FORMAT_R32_UINT,
- VK_FORMAT_R32_SINT,
- VK_FORMAT_R32_SFLOAT,
- VK_FORMAT_R32G32_UINT,
- VK_FORMAT_R32G32_SINT,
- VK_FORMAT_R32G32_SFLOAT,
- VK_FORMAT_R32G32B32A32_UINT,
- VK_FORMAT_R32G32B32A32_SINT,
- VK_FORMAT_R32G32B32A32_SFLOAT,
- VK_FORMAT_B10G11R11_UFLOAT_PACK32,
- VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
- VK_FORMAT_D16_UNORM,
- VK_FORMAT_D32_SFLOAT
- };
- static const VkFormat s_requiredSampledImageFilterLinearFormats[] =
- {
- VK_FORMAT_B4G4R4A4_UNORM_PACK16,
- VK_FORMAT_R5G6B5_UNORM_PACK16,
- VK_FORMAT_A1R5G5B5_UNORM_PACK16,
- VK_FORMAT_R8_UNORM,
- VK_FORMAT_R8_SNORM,
- VK_FORMAT_R8G8_UNORM,
- VK_FORMAT_R8G8_SNORM,
- VK_FORMAT_R8G8B8A8_UNORM,
- VK_FORMAT_R8G8B8A8_SNORM,
- VK_FORMAT_R8G8B8A8_SRGB,
- VK_FORMAT_B8G8R8A8_UNORM,
- VK_FORMAT_B8G8R8A8_SRGB,
- VK_FORMAT_A8B8G8R8_UNORM_PACK32,
- VK_FORMAT_A8B8G8R8_SNORM_PACK32,
- VK_FORMAT_A8B8G8R8_SRGB_PACK32,
- VK_FORMAT_A2B10G10R10_UNORM_PACK32,
- VK_FORMAT_R16_SFLOAT,
- VK_FORMAT_R16G16_SFLOAT,
- VK_FORMAT_R16G16B16A16_SFLOAT,
- VK_FORMAT_B10G11R11_UFLOAT_PACK32,
- VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
- };
- static const VkFormat s_requiredStorageImageFormats[] =
- {
- VK_FORMAT_R8G8B8A8_UNORM,
- VK_FORMAT_R8G8B8A8_SNORM,
- VK_FORMAT_R8G8B8A8_UINT,
- VK_FORMAT_R8G8B8A8_SINT,
- VK_FORMAT_R16G16B16A16_UINT,
- VK_FORMAT_R16G16B16A16_SINT,
- VK_FORMAT_R16G16B16A16_SFLOAT,
- VK_FORMAT_R32_UINT,
- VK_FORMAT_R32_SINT,
- VK_FORMAT_R32_SFLOAT,
- VK_FORMAT_R32G32_UINT,
- VK_FORMAT_R32G32_SINT,
- VK_FORMAT_R32G32_SFLOAT,
- VK_FORMAT_R32G32B32A32_UINT,
- VK_FORMAT_R32G32B32A32_SINT,
- VK_FORMAT_R32G32B32A32_SFLOAT
- };
- static const VkFormat s_requiredStorageImageAtomicFormats[] =
- {
- VK_FORMAT_R32_UINT,
- VK_FORMAT_R32_SINT
- };
- static const VkFormat s_requiredColorAttachmentBlitDstFormats[] =
- {
- VK_FORMAT_R5G6B5_UNORM_PACK16,
- VK_FORMAT_A1R5G5B5_UNORM_PACK16,
- VK_FORMAT_R8_UNORM,
- VK_FORMAT_R8_UINT,
- VK_FORMAT_R8_SINT,
- VK_FORMAT_R8G8_UNORM,
- VK_FORMAT_R8G8_UINT,
- VK_FORMAT_R8G8_SINT,
- VK_FORMAT_R8G8B8A8_UNORM,
- VK_FORMAT_R8G8B8A8_UINT,
- VK_FORMAT_R8G8B8A8_SINT,
- VK_FORMAT_R8G8B8A8_SRGB,
- VK_FORMAT_B8G8R8A8_UNORM,
- VK_FORMAT_B8G8R8A8_SRGB,
- VK_FORMAT_A8B8G8R8_UNORM_PACK32,
- VK_FORMAT_A8B8G8R8_UINT_PACK32,
- VK_FORMAT_A8B8G8R8_SINT_PACK32,
- VK_FORMAT_A8B8G8R8_SRGB_PACK32,
- VK_FORMAT_A2B10G10R10_UNORM_PACK32,
- VK_FORMAT_A2B10G10R10_UINT_PACK32,
- VK_FORMAT_R16_UINT,
- VK_FORMAT_R16_SINT,
- VK_FORMAT_R16_SFLOAT,
- VK_FORMAT_R16G16_UINT,
- VK_FORMAT_R16G16_SINT,
- VK_FORMAT_R16G16_SFLOAT,
- VK_FORMAT_R16G16B16A16_UINT,
- VK_FORMAT_R16G16B16A16_SINT,
- VK_FORMAT_R16G16B16A16_SFLOAT,
- VK_FORMAT_R32_UINT,
- VK_FORMAT_R32_SINT,
- VK_FORMAT_R32_SFLOAT,
- VK_FORMAT_R32G32_UINT,
- VK_FORMAT_R32G32_SINT,
- VK_FORMAT_R32G32_SFLOAT,
- VK_FORMAT_R32G32B32A32_UINT,
- VK_FORMAT_R32G32B32A32_SINT,
- VK_FORMAT_R32G32B32A32_SFLOAT
- };
- static const VkFormat s_requiredColorAttachmentBlendFormats[] =
+ struct Formatpair
{
- VK_FORMAT_R5G6B5_UNORM_PACK16,
- VK_FORMAT_A1R5G5B5_UNORM_PACK16,
- VK_FORMAT_R8_UNORM,
- VK_FORMAT_R8G8_UNORM,
- VK_FORMAT_R8G8B8A8_UNORM,
- VK_FORMAT_R8G8B8A8_SRGB,
- VK_FORMAT_B8G8R8A8_UNORM,
- VK_FORMAT_B8G8R8A8_SRGB,
- VK_FORMAT_A8B8G8R8_UNORM_PACK32,
- VK_FORMAT_A8B8G8R8_SRGB_PACK32,
- VK_FORMAT_A2B10G10R10_UNORM_PACK32,
- VK_FORMAT_R16_SFLOAT,
- VK_FORMAT_R16G16_SFLOAT,
- VK_FORMAT_R16G16B16A16_SFLOAT
- };
- static const VkFormat s_requiredDepthStencilAttachmentFormats[] =
- {
- VK_FORMAT_D16_UNORM
+ VkFormat format;
+ VkFormatFeatureFlags flags;
};
- VkFormatFeatureFlags flags = (VkFormatFeatureFlags)0;
-
- if (de::contains(DE_ARRAY_BEGIN(s_requiredSampledImageBlitSrcFormats), DE_ARRAY_END(s_requiredSampledImageBlitSrcFormats), format))
- flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT|VK_FORMAT_FEATURE_BLIT_SRC_BIT;
-
- if (de::contains(DE_ARRAY_BEGIN(s_requiredSampledImageFilterLinearFormats), DE_ARRAY_END(s_requiredSampledImageFilterLinearFormats), format))
- flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
-
- if (de::contains(DE_ARRAY_BEGIN(s_requiredStorageImageFormats), DE_ARRAY_END(s_requiredStorageImageFormats), format))
- flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
-
- if (de::contains(DE_ARRAY_BEGIN(s_requiredStorageImageAtomicFormats), DE_ARRAY_END(s_requiredStorageImageAtomicFormats), format))
- flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
-
- if (de::contains(DE_ARRAY_BEGIN(s_requiredColorAttachmentBlitDstFormats), DE_ARRAY_END(s_requiredColorAttachmentBlitDstFormats), format))
- flags |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_BLIT_DST_BIT;
+ enum
+ {
+ SAIM = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
+ BLSR = VK_FORMAT_FEATURE_BLIT_SRC_BIT,
+ SIFL = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
+ COAT = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
+ BLDS = VK_FORMAT_FEATURE_BLIT_DST_BIT,
+ CABL = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,
+ STIM = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,
+ STIA = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,
+ DSAT = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+ };
- if (de::contains(DE_ARRAY_BEGIN(s_requiredColorAttachmentBlendFormats), DE_ARRAY_END(s_requiredColorAttachmentBlendFormats), format))
- flags |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
+ static const Formatpair formatflags[] =
+ {
+ { VK_FORMAT_B4G4R4A4_UNORM_PACK16, SAIM | BLSR | SIFL },
+ { VK_FORMAT_R5G6B5_UNORM_PACK16, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_A1R5G5B5_UNORM_PACK16, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_R8_UNORM, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_R8_SNORM, SAIM | BLSR | SIFL },
+ { VK_FORMAT_R8_UINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R8_SINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R8G8_UNORM, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_R8G8_SNORM, SAIM | BLSR | SIFL },
+ { VK_FORMAT_R8G8_UINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R8G8_SINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R8G8B8A8_UNORM, SAIM | BLSR | COAT | BLDS | SIFL | STIM | CABL },
+ { VK_FORMAT_R8G8B8A8_SNORM, SAIM | BLSR | SIFL | STIM },
+ { VK_FORMAT_R8G8B8A8_UINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R8G8B8A8_SINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R8G8B8A8_SRGB, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_B8G8R8A8_UNORM, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_B8G8R8A8_SRGB, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_A8B8G8R8_UNORM_PACK32, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_A8B8G8R8_SNORM_PACK32, SAIM | BLSR | SIFL },
+ { VK_FORMAT_A8B8G8R8_UINT_PACK32, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_A8B8G8R8_SINT_PACK32, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_A8B8G8R8_SRGB_PACK32, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_A2B10G10R10_UNORM_PACK32, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_A2B10G10R10_UINT_PACK32, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R16_UINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R16_SINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R16_SFLOAT, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_R16G16_UINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R16G16_SINT, SAIM | BLSR | COAT | BLDS },
+ { VK_FORMAT_R16G16_SFLOAT, SAIM | BLSR | COAT | BLDS | SIFL | CABL },
+ { VK_FORMAT_R16G16B16A16_UINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R16G16B16A16_SINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R16G16B16A16_SFLOAT, SAIM | BLSR | COAT | BLDS | SIFL | STIM | CABL },
+ { VK_FORMAT_R32_UINT, SAIM | BLSR | COAT | BLDS | STIM | STIA },
+ { VK_FORMAT_R32_SINT, SAIM | BLSR | COAT | BLDS | STIM | STIA },
+ { VK_FORMAT_R32_SFLOAT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32_UINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32_SINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32_SFLOAT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32B32A32_UINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32B32A32_SINT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_R32G32B32A32_SFLOAT, SAIM | BLSR | COAT | BLDS | STIM },
+ { VK_FORMAT_B10G11R11_UFLOAT_PACK32, SAIM | BLSR | SIFL },
+ { VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, SAIM | BLSR | SIFL },
+ { VK_FORMAT_D16_UNORM, SAIM | BLSR | DSAT },
+ { VK_FORMAT_D32_SFLOAT, SAIM | BLSR }
+ };
- if (de::contains(DE_ARRAY_BEGIN(s_requiredDepthStencilAttachmentFormats), DE_ARRAY_END(s_requiredDepthStencilAttachmentFormats), format))
- flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
+ size_t formatpairs = sizeof(formatflags) / sizeof(Formatpair);
- return flags;
+ for (unsigned int i = 0; i < formatpairs; i++)
+ if (formatflags[i].format == format)
+ return formatflags[i].flags;
+ return 0;
}
VkFormatFeatureFlags getRequiredOptimalExtendedTilingFeatures (Context& context, VkFormat format, VkFormatFeatureFlags queriedFlags)