Mesa (master): anv: Refactor get_image_format_properties() - Reduce params

Chad Versace chadversary at kemper.freedesktop.org
Fri Nov 10 00:03:57 UTC 2017


Module: Mesa
Branch: master
Commit: 6394e4a38077783f189f99322dbc1f5f2006f878
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6394e4a38077783f189f99322dbc1f5f2006f878

Author: Chad Versace <chadversary at chromium.org>
Date:   Fri Nov  3 12:20:21 2017 -0700

anv: Refactor get_image_format_properties() - Reduce params

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.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 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 3cc0673cba..151c1c9e06 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-commit mailing list