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