Intel ANV: Feature flags for VK_FORMAT_G8B8G8R8_422_UNORM should include YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT?
With a mesa driver (info below) on Intel, the Vulkan validation layers were saying I wasn't respecting VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT or maybe VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT for VK_FORMAT_G8B8G8R8_422_UNORM. I was using VK_FILTER_NEAREST for VkSamplerYcbcrConversionCreateInfo::chromaFilter
and VK_FILTER_LINEAR for the VkSampler min and mag filter (I assume those control luma filtering?). That worked, but to avoid potentially doing something undefined, I made a change to check the bitwise-OR of the linearTilingFeatures and optimalTilingFeatures returned from vkGetPhysicalDeviceFormatProperties. Both VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT are absent for VK_FORMAT_G8B8G8R8_422_UNORM, in which case I think using VK_FITLER_NEAREST for both chroma and luma would be the only combination allowed. However, the resulting quality is worse than when I was using linear filtering for luma.
If I'm not misunderstanding the spec, since is seemed to work on Intel, is it possible the driver should be returning more VK_FORMAT_FEATURE_* flags for YCbCr formats?
mesa info:
Vendor: 'Intel'
ID: 0x5912
Type: 0x1
Name: 'Intel(R) HD Graphics 630 (KBL GT2)'
GPU chip: Kaby Lake (Gen9.5)
GPU type: Integrated
Driver Name: 'Intel open-source Mesa driver'
Driver Version: 0x5003004
Driver Info: 'Mesa 20.3.4'
API Version: 1.2.145