[Mesa-dev] [RFC PATCH v1 09/30] anv: Refactor get_image_format_properties() - Reduce params

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Nov 7 15:40:48 UTC 2017


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 07/11/17 14:47, Chad Versace wrote:
> Replace parameters 'enum isl_format' and 'struct anv_format_plane' with
> new parameter 'const struct anv_format *'.
>
> The goal is to incrementally fix get_image_format_properties() to return
> a correct result.  Currently, it returns incorrect VkFormatFeatureFlags
> which the caller must clean up.
> ---
>   src/intel/vulkan/anv_formats.c | 32 +++++++++++++++++++++-----------
>   1 file changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
> index 3cc0673cbaf..151c1c9e066 100644
> --- a/src/intel/vulkan/anv_formats.c
> +++ b/src/intel/vulkan/anv_formats.c
> @@ -469,13 +469,12 @@ anv_get_format_plane(const struct gen_device_info *devinfo, VkFormat vk_format,
>   static VkFormatFeatureFlags
>   get_image_format_properties(const struct gen_device_info *devinfo,
>                               VkFormat vk_format,
> -                            enum isl_format base_isl_format,
> -                            struct anv_format_plane plane_format,
> +                            const struct anv_format *anv_format,
>                               VkImageTiling vk_tiling)
>   {
>      VkFormatFeatureFlags flags = 0;
>   
> -   if (plane_format.isl_format == ISL_FORMAT_UNSUPPORTED)
> +   if (anv_format == NULL)
>         return 0;
>   
>      const VkImageAspectFlags aspects = vk_format_aspects(vk_format);
> @@ -497,6 +496,22 @@ get_image_format_properties(const struct gen_device_info *devinfo,
>         return flags;
>      }
>   
> +   const struct anv_format_plane plane_format =
> +      anv_get_format_plane(devinfo, vk_format, VK_IMAGE_ASPECT_COLOR_BIT,
> +                           vk_tiling);
> +
> +   if (plane_format.isl_format == ISL_FORMAT_UNSUPPORTED)
> +      return 0;
> +
> +   struct anv_format_plane base_plane_format = plane_format;
> +   if (vk_tiling == VK_IMAGE_TILING_OPTIMAL) {
> +      base_plane_format = anv_get_format_plane(devinfo, vk_format,
> +                                               VK_IMAGE_ASPECT_COLOR_BIT,
> +                                               VK_IMAGE_TILING_LINEAR);
> +   }
> +
> +   enum isl_format base_isl_format = base_plane_format.isl_format;
> +
>      /* ASTC textures must be in Y-tiled memory */
>      if (vk_tiling == VK_IMAGE_TILING_LINEAR &&
>          isl_format_get_layout(plane_format.isl_format)->txc == ISL_TXC_ASTC)
> @@ -593,20 +608,15 @@ anv_physical_device_get_format_properties(struct anv_physical_device *physical_d
>      if (format == NULL) {
>         /* Nothing to do here */
>      } else {
> -      struct anv_format_plane linear_fmt, tiled_fmt;
> +      struct anv_format_plane linear_fmt;
>         linear_fmt = anv_get_format_plane(&physical_device->info, vk_format,
>                                           VK_IMAGE_ASPECT_COLOR_BIT,
>                                           VK_IMAGE_TILING_LINEAR);
> -      tiled_fmt = anv_get_format_plane(&physical_device->info, vk_format,
> -                                       VK_IMAGE_ASPECT_COLOR_BIT,
> -                                       VK_IMAGE_TILING_OPTIMAL);
>   
>         linear = get_image_format_properties(&physical_device->info, vk_format,
> -                                           linear_fmt.isl_format, linear_fmt,
> -                                           VK_IMAGE_TILING_LINEAR);
> +                                           format, VK_IMAGE_TILING_LINEAR);
>         tiled = get_image_format_properties(&physical_device->info, vk_format,
> -                                          linear_fmt.isl_format, tiled_fmt,
> -                                          VK_IMAGE_TILING_OPTIMAL);
> +                                          format, VK_IMAGE_TILING_OPTIMAL);
>   
>         /* XXX: We handle 3-channel formats by switching them out for RGBX or
>          * RGBA formats behind-the-scenes.  This works fine for textures




More information about the mesa-dev mailing list