Mesa (main): ac/surface: Add ac_modifier_max_extent

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 11 12:24:32 UTC 2021


Module: Mesa
Branch: main
Commit: 9cffe1b9ea342463306a94c2c7d08beb883b7a14
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9cffe1b9ea342463306a94c2c7d08beb883b7a14

Author: Joshua Ashton <joshua at froggi.es>
Date:   Sun Sep 26 18:44:07 2021 +0100

ac/surface: Add ac_modifier_max_extent

Currently, we aren't checking if the modifier supports the extent of the image.

DCN only works with !64B && 128B on extents < 4K.

Signed-off-by: Joshua Ashton <joshua at froggi.es>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13056>

---

 src/amd/common/ac_surface.c | 22 ++++++++++++++++++++++
 src/amd/common/ac_surface.h |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index 669c07c7ce5..bbcef821e62 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -1481,6 +1481,28 @@ static bool gfx10_DCN_requires_independent_64B_blocks(const struct radeon_info *
    return config->info.width > 2560 || config->info.height > 2560;
 }
 
+void ac_modifier_max_extent(const struct radeon_info *info,
+                            uint64_t modifier, uint32_t *width, uint32_t *height)
+{
+   if (ac_modifier_has_dcc(modifier)) {
+      bool independent_64B_blocks = AMD_FMT_MOD_GET(DCC_INDEPENDENT_64B, modifier);
+
+      if (info->chip_class >= GFX10 && !independent_64B_blocks) {
+         /* For 4K, DCN requires INDEPENDENT_64B_BLOCKS = 1 and MAX_COMPRESSED_BLOCK_SIZE = 64B. */
+         *width = 2560;
+         *height = 2560;
+      } else {
+         /* DCC is not supported on surfaces above resolutions af 5760. */
+         *width = 5760;
+         *height = 5760;
+      }
+   } else {
+      /* Non-dcc modifiers */
+      *width = 16384;
+      *height = 16384;
+   }
+}
+
 static bool is_dcc_supported_by_DCN(const struct radeon_info *info,
                                     const struct ac_surf_config *config,
                                     const struct radeon_surf *surf, bool rb_aligned,
diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h
index 81e8ad2ca76..3f69b34991f 100644
--- a/src/amd/common/ac_surface.h
+++ b/src/amd/common/ac_surface.h
@@ -455,6 +455,8 @@ bool ac_get_supported_modifiers(const struct radeon_info *info,
 bool ac_modifier_has_dcc(uint64_t modifier);
 bool ac_modifier_has_dcc_retile(uint64_t modifier);
 bool ac_modifier_supports_dcc_image_stores(uint64_t modifier);
+void ac_modifier_max_extent(const struct radeon_info *info,
+                            uint64_t modifier, uint32_t *width, uint32_t *height);
 
 unsigned ac_surface_get_nplanes(const struct radeon_surf *surf);
 uint64_t ac_surface_get_plane_offset(enum chip_class chip_class,



More information about the mesa-commit mailing list