anv: switch to use VkFormatFeatureFlags2KHR internally
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13198>
This commit is contained in:
parent
35315c68a5
commit
0f8efc2b08
|
@ -167,6 +167,12 @@ android_format_from_vk(unsigned vk_format)
|
|||
}
|
||||
}
|
||||
|
||||
static VkFormatFeatureFlags
|
||||
features2_to_features(VkFormatFeatureFlags2KHR features2)
|
||||
{
|
||||
return features2 & VK_ALL_FORMAT_FEATURE_FLAG_BITS;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
get_ahw_buffer_format_properties(
|
||||
VkDevice device_h,
|
||||
|
@ -207,9 +213,10 @@ get_ahw_buffer_format_properties(
|
|||
if (desc.usage & AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER)
|
||||
tiling = VK_IMAGE_TILING_LINEAR;
|
||||
|
||||
p->formatFeatures =
|
||||
anv_get_image_format_features(&device->info, p->format, anv_format,
|
||||
tiling, NULL);
|
||||
VkFormatFeatureFlags2KHR features2 =
|
||||
anv_get_image_format_features2(&device->info, p->format, anv_format,
|
||||
tiling, NULL);
|
||||
p->formatFeatures = features2_to_features(features2);
|
||||
|
||||
/* "Images can be created with an external format even if the Android hardware
|
||||
* buffer has a format which has an equivalent Vulkan format to enable
|
||||
|
|
|
@ -544,14 +544,14 @@ anv_get_format_aspect(const struct intel_device_info *devinfo,
|
|||
|
||||
// Format capabilities
|
||||
|
||||
VkFormatFeatureFlags
|
||||
anv_get_image_format_features(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format,
|
||||
VkImageTiling vk_tiling,
|
||||
const struct isl_drm_modifier_info *isl_mod_info)
|
||||
VkFormatFeatureFlags2KHR
|
||||
anv_get_image_format_features2(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format,
|
||||
VkImageTiling vk_tiling,
|
||||
const struct isl_drm_modifier_info *isl_mod_info)
|
||||
{
|
||||
VkFormatFeatureFlags flags = 0;
|
||||
VkFormatFeatureFlags2KHR flags = 0;
|
||||
|
||||
if (anv_format == NULL)
|
||||
return 0;
|
||||
|
@ -566,18 +566,18 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
vk_tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)
|
||||
return 0;
|
||||
|
||||
flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
|
||||
VK_FORMAT_FEATURE_BLIT_SRC_BIT |
|
||||
VK_FORMAT_FEATURE_BLIT_DST_BIT |
|
||||
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
|
||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR;
|
||||
|
||||
if (aspects & VK_IMAGE_ASPECT_DEPTH_BIT)
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR;
|
||||
|
||||
if ((aspects & VK_IMAGE_ASPECT_DEPTH_BIT) && devinfo->ver >= 9)
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
@ -605,13 +605,13 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
return 0;
|
||||
|
||||
if (isl_format_supports_sampling(devinfo, plane_format.isl_format)) {
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR;
|
||||
|
||||
if (devinfo->ver >= 9)
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR;
|
||||
|
||||
if (isl_format_supports_filtering(devinfo, plane_format.isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR;
|
||||
}
|
||||
|
||||
/* We can render to swizzled formats. However, if the alpha channel is
|
||||
|
@ -620,31 +620,31 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
*/
|
||||
if (isl_format_supports_rendering(devinfo, plane_format.isl_format) &&
|
||||
plane_format.swizzle.a == ISL_CHANNEL_SELECT_ALPHA) {
|
||||
flags |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR;
|
||||
|
||||
if (isl_format_supports_alpha_blending(devinfo, plane_format.isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR;
|
||||
}
|
||||
|
||||
/* Load/store is determined based on base format. This prevents RGB
|
||||
* formats from showing up as load/store capable.
|
||||
*/
|
||||
if (isl_format_supports_typed_writes(devinfo, base_isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
|
||||
if (base_isl_format == ISL_FORMAT_R32_SINT ||
|
||||
base_isl_format == ISL_FORMAT_R32_UINT ||
|
||||
base_isl_format == ISL_FORMAT_R32_FLOAT)
|
||||
flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR;
|
||||
|
||||
if (flags) {
|
||||
flags |= VK_FORMAT_FEATURE_BLIT_SRC_BIT |
|
||||
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
|
||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR;
|
||||
|
||||
/* Blit destination requires rendering support. */
|
||||
if (isl_format_supports_rendering(devinfo, plane_format.isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
}
|
||||
|
||||
/* XXX: We handle 3-channel formats by switching them out for RGBX or
|
||||
|
@ -658,8 +658,8 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
base_isl_format != ISL_FORMAT_UNSUPPORTED &&
|
||||
!util_is_power_of_two_or_zero(isl_format_layouts[base_isl_format].bpb) &&
|
||||
isl_format_rgb_to_rgbx(base_isl_format) == ISL_FORMAT_UNSUPPORTED) {
|
||||
flags &= ~VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR;
|
||||
}
|
||||
|
||||
if (anv_format->can_ycbcr) {
|
||||
|
@ -671,11 +671,11 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
* sampler. The failures show a slightly out of range values on the
|
||||
* bottom left of the sampled image.
|
||||
*/
|
||||
flags |= VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR;
|
||||
} else {
|
||||
flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT |
|
||||
VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT |
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR;
|
||||
}
|
||||
|
||||
/* We can support cosited chroma locations when handle planes with our
|
||||
|
@ -684,20 +684,20 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
for (unsigned p = 0; p < anv_format->n_planes; p++) {
|
||||
if (anv_format->planes[p].denominator_scales[0] > 1 ||
|
||||
anv_format->planes[p].denominator_scales[1] > 1) {
|
||||
flags |= VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (anv_format->n_planes > 1)
|
||||
flags |= VK_FORMAT_FEATURE_DISJOINT_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR;
|
||||
|
||||
const VkFormatFeatureFlags disallowed_ycbcr_image_features =
|
||||
VK_FORMAT_FEATURE_BLIT_SRC_BIT |
|
||||
VK_FORMAT_FEATURE_BLIT_DST_BIT |
|
||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
|
||||
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
const VkFormatFeatureFlags2KHR disallowed_ycbcr_image_features =
|
||||
VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
|
||||
flags &= ~disallowed_ycbcr_image_features;
|
||||
}
|
||||
|
@ -748,7 +748,7 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
|
||||
if (anv_format->n_planes > 1) {
|
||||
/* For simplicity, keep DISJOINT disabled for multi-planar format. */
|
||||
flags &= ~VK_FORMAT_FEATURE_DISJOINT_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR;
|
||||
|
||||
/* VK_ANDROID_external_memory_android_hardware_buffer in Virtio-GPU
|
||||
* Venus driver layers on top of VK_EXT_image_drm_format_modifier of
|
||||
|
@ -779,26 +779,26 @@ anv_get_image_format_features(const struct intel_device_info *devinfo,
|
|||
* eglCreateImage, we require that the dma_buf for the primary surface
|
||||
* and the dma_buf for its aux surface refer to the same bo.
|
||||
*/
|
||||
flags &= ~VK_FORMAT_FEATURE_DISJOINT_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR;
|
||||
|
||||
/* When the hardware accesses a storage image, it bypasses the aux
|
||||
* surface. We could support storage access on images with aux
|
||||
* modifiers by resolving the aux surface prior to the storage access.
|
||||
*/
|
||||
flags &= ~VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR;
|
||||
flags &= ~VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static VkFormatFeatureFlags
|
||||
get_buffer_format_features(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format)
|
||||
static VkFormatFeatureFlags2KHR
|
||||
get_buffer_format_features2(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format)
|
||||
{
|
||||
VkFormatFeatureFlags flags = 0;
|
||||
VkFormatFeatureFlags2KHR flags = 0;
|
||||
|
||||
if (anv_format == NULL)
|
||||
return 0;
|
||||
|
@ -819,20 +819,26 @@ get_buffer_format_features(const struct intel_device_info *devinfo,
|
|||
|
||||
if (isl_format_supports_sampling(devinfo, isl_format) &&
|
||||
!isl_format_is_compressed(isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR;
|
||||
|
||||
if (isl_format_supports_vertex_fetch(devinfo, isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR;
|
||||
|
||||
if (isl_is_storage_image_format(isl_format))
|
||||
flags |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR;
|
||||
|
||||
if (isl_format == ISL_FORMAT_R32_SINT || isl_format == ISL_FORMAT_R32_UINT)
|
||||
flags |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
||||
flags |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static VkFormatFeatureFlags
|
||||
features2_to_features(VkFormatFeatureFlags2KHR features2)
|
||||
{
|
||||
return features2 & VK_ALL_FORMAT_FEATURE_FLAG_BITS;
|
||||
}
|
||||
|
||||
static void
|
||||
get_drm_format_modifier_properties_list(const struct anv_physical_device *physical_device,
|
||||
VkFormat vk_format,
|
||||
|
@ -845,10 +851,11 @@ get_drm_format_modifier_properties_list(const struct anv_physical_device *physic
|
|||
&list->drmFormatModifierCount);
|
||||
|
||||
isl_drm_modifier_info_for_each(isl_mod_info) {
|
||||
VkFormatFeatureFlags features =
|
||||
anv_get_image_format_features(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
|
||||
isl_mod_info);
|
||||
VkFormatFeatureFlags2KHR features2 =
|
||||
anv_get_image_format_features2(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT,
|
||||
isl_mod_info);
|
||||
VkFormatFeatureFlags features = features2_to_features(features2);
|
||||
if (!features)
|
||||
continue;
|
||||
|
||||
|
@ -877,15 +884,17 @@ void anv_GetPhysicalDeviceFormatProperties2(
|
|||
|
||||
assert(pFormatProperties->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2);
|
||||
|
||||
VkFormatFeatureFlags2KHR linear2, optimal2, buffer2;
|
||||
linear2 = anv_get_image_format_features2(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_LINEAR, NULL);
|
||||
optimal2 = anv_get_image_format_features2(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_OPTIMAL, NULL);
|
||||
buffer2 = get_buffer_format_features2(devinfo, vk_format, anv_format);
|
||||
|
||||
pFormatProperties->formatProperties = (VkFormatProperties) {
|
||||
.linearTilingFeatures =
|
||||
anv_get_image_format_features(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_LINEAR, NULL),
|
||||
.optimalTilingFeatures =
|
||||
anv_get_image_format_features(devinfo, vk_format, anv_format,
|
||||
VK_IMAGE_TILING_OPTIMAL, NULL),
|
||||
.bufferFeatures =
|
||||
get_buffer_format_features(devinfo, vk_format, anv_format),
|
||||
.linearTilingFeatures = features2_to_features(linear2),
|
||||
.optimalTilingFeatures = features2_to_features(optimal2),
|
||||
.bufferFeatures = features2_to_features(buffer2),
|
||||
};
|
||||
|
||||
vk_foreach_struct(ext, pFormatProperties->pNext) {
|
||||
|
@ -909,7 +918,7 @@ anv_get_image_format_properties(
|
|||
VkImageFormatProperties *pImageFormatProperties,
|
||||
VkSamplerYcbcrConversionImageFormatProperties *pYcbcrImageFormatProperties)
|
||||
{
|
||||
VkFormatFeatureFlags format_feature_flags;
|
||||
VkFormatFeatureFlags2KHR format_feature_flags;
|
||||
VkExtent3D maxExtent;
|
||||
uint32_t maxMipLevels;
|
||||
uint32_t maxArraySize;
|
||||
|
@ -933,9 +942,9 @@ anv_get_image_format_properties(
|
|||
}
|
||||
|
||||
assert(format->vk_format == info->format);
|
||||
format_feature_flags = anv_get_image_format_features(devinfo, info->format,
|
||||
format, info->tiling,
|
||||
isl_mod_info);
|
||||
format_feature_flags = anv_get_image_format_features2(devinfo, info->format,
|
||||
format, info->tiling,
|
||||
isl_mod_info);
|
||||
|
||||
/* Remove the VkFormatFeatureFlags that are incompatible with any declared
|
||||
* image view format. (Removals are more likely to occur when a DRM format
|
||||
|
@ -945,11 +954,11 @@ anv_get_image_format_properties(
|
|||
for (uint32_t i = 0; i < format_list_info->viewFormatCount; ++i) {
|
||||
VkFormat vk_view_format = format_list_info->pViewFormats[i];
|
||||
const struct anv_format *anv_view_format = anv_get_format(vk_view_format);
|
||||
VkFormatFeatureFlags view_format_features =
|
||||
anv_get_image_format_features(devinfo, vk_view_format,
|
||||
anv_view_format,
|
||||
info->tiling,
|
||||
isl_mod_info);
|
||||
VkFormatFeatureFlags2KHR view_format_features =
|
||||
anv_get_image_format_features2(devinfo, vk_view_format,
|
||||
anv_view_format,
|
||||
info->tiling,
|
||||
isl_mod_info);
|
||||
format_feature_flags &= view_format_features;
|
||||
}
|
||||
}
|
||||
|
@ -1032,8 +1041,8 @@ anv_get_image_format_properties(
|
|||
|
||||
if (info->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_STORAGE_BIT)) {
|
||||
sampleCounts = isl_device_get_sample_counts(&physical_device->isl_dev);
|
||||
|
@ -1042,33 +1051,33 @@ anv_get_image_format_properties(
|
|||
if (info->usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT)) {
|
||||
/* Accept transfers on anything we can sample from or renderer to. */
|
||||
if (!(format_feature_flags & (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT))) {
|
||||
if (!(format_feature_flags & (VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR |
|
||||
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_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;
|
||||
}
|
||||
}
|
||||
|
@ -1078,11 +1087,11 @@ anv_get_image_format_properties(
|
|||
*
|
||||
* If format is a multi-planar format, and if imageCreateFormatFeatures
|
||||
* (as defined in Image Creation Limits) does not contain
|
||||
* VK_FORMAT_FEATURE_DISJOINT_BIT, then flags must not contain
|
||||
* VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR, then flags must not contain
|
||||
* VK_IMAGE_CREATE_DISJOINT_BIT.
|
||||
*/
|
||||
if (format->n_planes > 1 &&
|
||||
!(format_feature_flags & VK_FORMAT_FEATURE_DISJOINT_BIT)) {
|
||||
!(format_feature_flags & VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR)) {
|
||||
goto unsupported;
|
||||
}
|
||||
|
||||
|
|
|
@ -4437,12 +4437,12 @@ anv_rasterization_aa_mode(VkPolygonMode raster_mode,
|
|||
return false;
|
||||
}
|
||||
|
||||
VkFormatFeatureFlags
|
||||
anv_get_image_format_features(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format,
|
||||
VkImageTiling vk_tiling,
|
||||
const struct isl_drm_modifier_info *isl_mod_info);
|
||||
VkFormatFeatureFlags2KHR
|
||||
anv_get_image_format_features2(const struct intel_device_info *devinfo,
|
||||
VkFormat vk_format,
|
||||
const struct anv_format *anv_format,
|
||||
VkImageTiling vk_tiling,
|
||||
const struct isl_drm_modifier_info *isl_mod_info);
|
||||
|
||||
void anv_fill_buffer_surface_state(struct anv_device *device,
|
||||
struct anv_state state,
|
||||
|
|
Loading…
Reference in New Issue