radv: switch to VK_FORMAT_FEATURE_2_XXX/VkFormatProperties3KHR
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13194>
This commit is contained in:
parent
cd4a52b52c
commit
5dee0d9da9
|
@ -36,6 +36,7 @@
|
|||
#include "util/format_srgb.h"
|
||||
#include "util/half_float.h"
|
||||
#include "vulkan/util/vk_format.h"
|
||||
#include "vulkan/util/vk_enum_defines.h"
|
||||
|
||||
uint32_t
|
||||
radv_translate_buffer_dataformat(const struct util_format_description *desc, int first_non_void)
|
||||
|
@ -605,9 +606,9 @@ radv_is_filter_minmax_format_supported(VkFormat format)
|
|||
/* From the Vulkan spec 1.1.71:
|
||||
*
|
||||
* "The following formats must support the
|
||||
* VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
|
||||
* VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR feature with
|
||||
* VK_IMAGE_TILING_OPTIMAL, if they support
|
||||
* VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT."
|
||||
* VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR."
|
||||
*/
|
||||
/* TODO: enable more formats. */
|
||||
switch (format) {
|
||||
|
@ -640,9 +641,9 @@ radv_device_supports_etc(struct radv_physical_device *physical_device)
|
|||
|
||||
static void
|
||||
radv_physical_device_get_format_properties(struct radv_physical_device *physical_device,
|
||||
VkFormat format, VkFormatProperties *out_properties)
|
||||
VkFormat format, VkFormatProperties3KHR *out_properties)
|
||||
{
|
||||
VkFormatFeatureFlags linear = 0, tiled = 0, buffer = 0;
|
||||
VkFormatFeatureFlags2KHR linear = 0, tiled = 0, buffer = 0;
|
||||
const struct util_format_description *desc = vk_format_description(format);
|
||||
bool blendable;
|
||||
bool scaled = false;
|
||||
|
@ -663,14 +664,15 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
}
|
||||
|
||||
if (vk_format_get_plane_count(format) > 1 || desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
|
||||
uint32_t tiling = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT |
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
|
||||
VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT |
|
||||
VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT;
|
||||
uint64_t tiling = VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR;
|
||||
|
||||
/* The subsampled formats have no support for linear filters. */
|
||||
if (desc->layout != UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
|
||||
tiling |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT;
|
||||
tiling |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR;
|
||||
}
|
||||
|
||||
/* Fails for unknown reasons with linear tiling & subsampled formats. */
|
||||
|
@ -682,35 +684,35 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
}
|
||||
|
||||
if (radv_is_storage_image_format_supported(physical_device, format)) {
|
||||
tiled |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
linear |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
}
|
||||
|
||||
if (radv_is_buffer_format_supported(format, &scaled)) {
|
||||
if (format != VK_FORMAT_R64_UINT && format != VK_FORMAT_R64_SINT) {
|
||||
buffer |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
|
||||
buffer |= VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR;
|
||||
if (!scaled)
|
||||
buffer |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT;
|
||||
buffer |= VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR;
|
||||
}
|
||||
buffer |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
|
||||
buffer |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR;
|
||||
}
|
||||
|
||||
if (vk_format_is_depth_or_stencil(format)) {
|
||||
if (radv_is_zs_format_supported(format)) {
|
||||
tiled |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR | VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR;
|
||||
|
||||
if (radv_is_filter_minmax_format_supported(format))
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR;
|
||||
|
||||
if (vk_format_has_depth(format))
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR;
|
||||
|
||||
/* Don't support blitting surfaces with depth/stencil. */
|
||||
if (vk_format_has_depth(format) && vk_format_has_stencil(format))
|
||||
tiled &= ~VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
tiled &= ~VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
|
||||
/* Don't support linear depth surfaces */
|
||||
linear = 0;
|
||||
|
@ -718,33 +720,33 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
} else {
|
||||
bool linear_sampling;
|
||||
if (radv_is_sampler_format_supported(format, &linear_sampling)) {
|
||||
linear |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR | VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR | VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR;
|
||||
|
||||
if (radv_is_filter_minmax_format_supported(format))
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR;
|
||||
|
||||
if (linear_sampling) {
|
||||
linear |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR;
|
||||
}
|
||||
|
||||
/* Don't support blitting for R32G32B32 formats. */
|
||||
if (format == VK_FORMAT_R32G32B32_SFLOAT || format == VK_FORMAT_R32G32B32_UINT ||
|
||||
format == VK_FORMAT_R32G32B32_SINT) {
|
||||
linear &= ~VK_FORMAT_FEATURE_BLIT_SRC_BIT;
|
||||
linear &= ~VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR;
|
||||
}
|
||||
}
|
||||
if (radv_is_colorbuffer_format_supported(physical_device, format, &blendable)) {
|
||||
linear |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR | VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR | VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
if (blendable) {
|
||||
linear |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR;
|
||||
}
|
||||
}
|
||||
if (tiled && !scaled) {
|
||||
tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR;
|
||||
}
|
||||
|
||||
/* Tiled formatting does not support NPOT pixel sizes */
|
||||
|
@ -753,13 +755,13 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
}
|
||||
|
||||
if (linear && !scaled) {
|
||||
linear |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR;
|
||||
}
|
||||
|
||||
if (radv_is_atomic_format_supported(format)) {
|
||||
buffer |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
||||
linear |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
tiled |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
buffer |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR;
|
||||
linear |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR;
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
|
@ -770,7 +772,7 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
case VK_FORMAT_A2R10G10B10_SINT_PACK32:
|
||||
case VK_FORMAT_A2B10G10R10_SINT_PACK32:
|
||||
buffer &=
|
||||
~(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT);
|
||||
~(VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR | VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR);
|
||||
linear = 0;
|
||||
tiled = 0;
|
||||
break;
|
||||
|
@ -788,7 +790,7 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
case VK_FORMAT_R16G16_SNORM:
|
||||
case VK_FORMAT_R16G16B16A16_SNORM:
|
||||
case VK_FORMAT_R16G16B16A16_UNORM:
|
||||
buffer |= VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR;
|
||||
buffer |= VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -799,13 +801,13 @@ radv_physical_device_get_format_properties(struct radv_physical_device *physical
|
|||
|
||||
/* From the Vulkan spec 1.2.163:
|
||||
*
|
||||
* "VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must be supported for the
|
||||
* "VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must be supported for the
|
||||
* following formats if the attachmentFragmentShadingRate feature is supported:"
|
||||
*
|
||||
* - VK_FORMAT_R8_UINT
|
||||
*/
|
||||
if (format == VK_FORMAT_R8_UINT) {
|
||||
tiled |= VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
|
||||
tiled |= VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
|
||||
}
|
||||
|
||||
out_properties->linearTilingFeatures = linear;
|
||||
|
@ -1123,11 +1125,11 @@ static const struct ac_modifier_options radv_modifier_options = {
|
|||
.dcc_retile = true,
|
||||
};
|
||||
|
||||
static VkFormatFeatureFlags
|
||||
static VkFormatFeatureFlags2KHR
|
||||
radv_get_modifier_flags(struct radv_physical_device *dev, VkFormat format, uint64_t modifier,
|
||||
const VkFormatProperties *props)
|
||||
const VkFormatProperties3KHR *props)
|
||||
{
|
||||
VkFormatFeatureFlags features;
|
||||
VkFormatFeatureFlags2KHR features;
|
||||
|
||||
if (vk_format_is_compressed(format) || vk_format_is_depth_or_stencil(format))
|
||||
return 0;
|
||||
|
@ -1142,7 +1144,7 @@ radv_get_modifier_flags(struct radv_physical_device *dev, VkFormat format, uint6
|
|||
* do not support DCC image stores.
|
||||
*/
|
||||
if (!ac_modifier_supports_dcc_image_stores(modifier) || radv_is_atomic_format_supported(format))
|
||||
features &= ~VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
features &= ~VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
|
||||
if (dev->instance->debug_flags & (RADV_DEBUG_NO_DCC | RADV_DEBUG_NO_DISPLAY_DCC))
|
||||
return 0;
|
||||
|
@ -1151,6 +1153,12 @@ radv_get_modifier_flags(struct radv_physical_device *dev, VkFormat format, uint6
|
|||
return features;
|
||||
}
|
||||
|
||||
static VkFormatFeatureFlags
|
||||
features2_to_features(VkFormatFeatureFlags2KHR features2)
|
||||
{
|
||||
return features2 & VK_ALL_FORMAT_FEATURE_FLAG_BITS;
|
||||
}
|
||||
|
||||
static void
|
||||
radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format,
|
||||
VkFormatProperties2 *pFormatProperties)
|
||||
|
@ -1187,8 +1195,9 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
|
|||
|
||||
mod_list->drmFormatModifierCount = 0;
|
||||
for (unsigned i = 0; i < mod_count; ++i) {
|
||||
VkFormatFeatureFlags features =
|
||||
radv_get_modifier_flags(dev, format, mods[i], &pFormatProperties->formatProperties);
|
||||
VkFormatProperties3KHR format_props;
|
||||
VkFormatFeatureFlags2KHR features =
|
||||
radv_get_modifier_flags(dev, format, mods[i], &format_props);
|
||||
unsigned planes = vk_format_get_plane_count(format);
|
||||
if (planes == 1) {
|
||||
if (ac_modifier_has_dcc_retile(mods[i]))
|
||||
|
@ -1197,6 +1206,13 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
|
|||
planes = 2;
|
||||
}
|
||||
|
||||
pFormatProperties->formatProperties.linearTilingFeatures =
|
||||
features2_to_features(format_props.linearTilingFeatures);
|
||||
pFormatProperties->formatProperties.optimalTilingFeatures =
|
||||
features2_to_features(format_props.optimalTilingFeatures);
|
||||
pFormatProperties->formatProperties.bufferFeatures =
|
||||
features2_to_features(format_props.bufferFeatures);
|
||||
|
||||
if (!features)
|
||||
continue;
|
||||
|
||||
|
@ -1205,7 +1221,7 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
|
|||
mod_list->pDrmFormatModifierProperties[mod_list->drmFormatModifierCount]
|
||||
.drmFormatModifierPlaneCount = planes;
|
||||
mod_list->pDrmFormatModifierProperties[mod_list->drmFormatModifierCount]
|
||||
.drmFormatModifierTilingFeatures = features;
|
||||
.drmFormatModifierTilingFeatures = features2_to_features(features);
|
||||
|
||||
++mod_list->drmFormatModifierCount;
|
||||
}
|
||||
|
@ -1295,9 +1311,16 @@ radv_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkForma
|
|||
VkFormatProperties2 *pFormatProperties)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_physical_device, physical_device, physicalDevice);
|
||||
VkFormatProperties3KHR format_props;
|
||||
|
||||
radv_physical_device_get_format_properties(physical_device, format,
|
||||
&pFormatProperties->formatProperties);
|
||||
radv_physical_device_get_format_properties(physical_device, format, &format_props);
|
||||
|
||||
pFormatProperties->formatProperties.linearTilingFeatures =
|
||||
features2_to_features(format_props.linearTilingFeatures);
|
||||
pFormatProperties->formatProperties.optimalTilingFeatures =
|
||||
features2_to_features(format_props.optimalTilingFeatures);
|
||||
pFormatProperties->formatProperties.bufferFeatures =
|
||||
features2_to_features(format_props.bufferFeatures);
|
||||
|
||||
radv_list_drm_format_modifiers(physical_device, format, pFormatProperties);
|
||||
}
|
||||
|
@ -1308,8 +1331,8 @@ radv_get_image_format_properties(struct radv_physical_device *physical_device,
|
|||
VkImageFormatProperties *pImageFormatProperties)
|
||||
|
||||
{
|
||||
VkFormatProperties format_props;
|
||||
VkFormatFeatureFlags format_feature_flags;
|
||||
VkFormatProperties3KHR format_props;
|
||||
VkFormatFeatureFlags2KHR format_feature_flags;
|
||||
VkExtent3D maxExtent;
|
||||
uint32_t maxMipLevels;
|
||||
uint32_t maxArraySize;
|
||||
|
@ -1378,8 +1401,8 @@ radv_get_image_format_properties(struct radv_physical_device *physical_device,
|
|||
}
|
||||
|
||||
if (tiling == VK_IMAGE_TILING_OPTIMAL && info->type == VK_IMAGE_TYPE_2D &&
|
||||
(format_feature_flags & (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) &&
|
||||
(format_feature_flags & (VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR)) &&
|
||||
!(info->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) &&
|
||||
!(info->usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
|
||||
sampleCounts |= VK_SAMPLE_COUNT_2_BIT | VK_SAMPLE_COUNT_4_BIT | VK_SAMPLE_COUNT_8_BIT;
|
||||
|
@ -1403,49 +1426,49 @@ radv_get_image_format_properties(struct radv_physical_device *physical_device,
|
|||
vk_format_get_blocksizebits(format) == 128 && vk_format_is_compressed(format) &&
|
||||
(info->flags & VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT) &&
|
||||
((info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) ||
|
||||
(info->usage & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT))) {
|
||||
(info->usage & VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR))) {
|
||||
goto unsupported;
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_SAMPLED_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_STORAGE_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_TRANSFER_SRC_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_TRANSFER_DST_BIT)) {
|
||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) {
|
||||
if (!(format_feature_flags & (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT))) {
|
||||
if (!(format_feature_flags & (VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR))) {
|
||||
goto unsupported;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue