diff options
author | Chad Versace <chad@kiwitree.net> | 2020-08-05 10:16:19 -0700 |
---|---|---|
committer | Chad Versace <chad@kiwitree.net> | 2020-11-17 10:36:45 -0800 |
commit | 51eefbaae6d8d70a5774627e33f2dd7f81b34c99 (patch) | |
tree | a854b8cb36c2d870d24630ca84b8286a453a3ab5 /src/intel/vulkan | |
parent | 1f39b3e48da34b2401a385fc4de4145610e75da2 (diff) |
anv/image: Fill drmFormatModifierTilingFeatures (v2)
Fill VkDrmFormatModifierPropertiesEXT::drmFormatModifierTilingFeatures
with anv_get_image_format_features().
anv_formats.c:get_wsi_format_modifier_properties_list() incorrectly left
it uninitialized.
v2: Increment drmFormatModifierPlaneCount if modifier support aux.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> (v2)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> (v2)
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r-- | src/intel/vulkan/anv_formats.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 987b6ae6fcd..ac810c8a69d 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -841,24 +841,30 @@ get_wsi_format_modifier_properties_list(const struct anv_physical_device *physic }; for (uint32_t i = 0; i < ARRAY_SIZE(modifiers); i++) { - const struct isl_drm_modifier_info *mod_info = + const struct isl_drm_modifier_info *isl_mod_info = isl_drm_modifier_get_info(modifiers[i]); - if (!isl_drm_modifier_get_score(devinfo, mod_info->modifier)) + if (!isl_mod_info) continue; - if (mod_info->aux_usage == ISL_AUX_USAGE_CCS_E && - !isl_format_supports_ccs_e(&physical_device->info, - anv_format->planes[0].isl_format)) + VkFormatFeatureFlags features = + anv_get_image_format_features(devinfo, vk_format, anv_format, + VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, + isl_mod_info); + if (!features) continue; - vk_outarray_append(&out, mod_props) { - mod_props->drmFormatModifier = modifiers[i]; - if (isl_drm_modifier_has_aux(modifiers[i])) - mod_props->drmFormatModifierPlaneCount = 2; - else - mod_props->drmFormatModifierPlaneCount = anv_format->n_planes; - } + uint32_t planes = anv_format->n_planes; + if (isl_mod_info->aux_usage != ISL_AUX_USAGE_NONE) + ++planes; + + vk_outarray_append(&out, out_props) { + *out_props = (VkDrmFormatModifierPropertiesEXT) { + .drmFormatModifier = isl_mod_info->modifier, + .drmFormatModifierPlaneCount = planes, + .drmFormatModifierTilingFeatures = features, + }; + }; } } |