vulkan.h: Add bufferFeatures to VkFormatProperties, bug #14546
diff --git a/icd/intel/format.c b/icd/intel/format.c
index bbde68a..2ab09cb 100644
--- a/icd/intel/format.c
+++ b/icd/intel/format.c
@@ -649,25 +649,35 @@
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT : 0;
}
+// These format features flags are supported by buffers. Remaining flags
+// are supported by optimal/linear tiling images.
+static VkFlags bufferFormatsFlagMask = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
+ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
+ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
+ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
+
static void intel_format_get_props(const struct intel_gpu *gpu,
VkFormat format,
VkFormatProperties *props)
{
if (icd_format_is_undef(format)) {
- props->linearTilingFeatures =
- intel_format_get_raw_features(gpu, format);
+ props->linearTilingFeatures = intel_format_get_raw_features(gpu, format);
props->optimalTilingFeatures = 0;
+ props->bufferFeatures = 0;
} else if(icd_format_is_color(format)) {
- props->linearTilingFeatures =
- intel_format_get_color_features(gpu, format);
- props->optimalTilingFeatures = props->linearTilingFeatures;
+ VkFlags formatFlags = NULL;
+ formatFlags = intel_format_get_color_features(gpu, format);
+ props->linearTilingFeatures = formatFlags & ~bufferFormatsFlagMask;
+ props->optimalTilingFeatures = formatFlags & ~bufferFormatsFlagMask;
+ props->bufferFeatures = formatFlags & bufferFormatsFlagMask;
} else if(icd_format_is_ds(format)) {
- props->linearTilingFeatures = 0;
- props->optimalTilingFeatures =
- intel_format_get_ds_features(gpu, format);
+ props->linearTilingFeatures = 0;
+ props->optimalTilingFeatures = intel_format_get_ds_features(gpu, format);
+ props->bufferFeatures = 0;
} else {
- props->linearTilingFeatures = 0;
+ props->linearTilingFeatures = 0;
props->optimalTilingFeatures = 0;
+ props->bufferFeatures = 0;
}
}
@@ -693,4 +703,4 @@
VkImageFormatProperties* pImageFormatProperties)
{
return VK_ERROR_UNAVAILABLE;
-}
\ No newline at end of file
+}