Mesa (master): amd/common: Add total alignment calculation.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 5 13:43:29 UTC 2020


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

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sun May 24 14:23:24 2020 +0200

amd/common: Add total alignment calculation.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5194>

---

 src/amd/common/ac_surface.c | 5 +++++
 src/amd/common/ac_surface.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index 8203a7f0426..cbbd86093e7 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -1871,22 +1871,26 @@ int ac_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *info,
 
 	/* Determine the memory layout of multiple allocations in one buffer. */
 	surf->total_size = surf->surf_size;
+	surf->alignment = surf->surf_alignment;
 
 	if (surf->htile_size) {
 		surf->htile_offset = align64(surf->total_size, surf->htile_alignment);
 		surf->total_size = surf->htile_offset + surf->htile_size;
+		surf->alignment = MAX2(surf->alignment, surf->htile_alignment);
 	}
 
 	if (surf->fmask_size) {
 		assert(config->info.samples >= 2);
 		surf->fmask_offset = align64(surf->total_size, surf->fmask_alignment);
 		surf->total_size = surf->fmask_offset + surf->fmask_size;
+		surf->alignment = MAX2(surf->alignment, surf->fmask_alignment);
 	}
 
 	/* Single-sample CMASK is in a separate buffer. */
 	if (surf->cmask_size && config->info.samples >= 2) {
 		surf->cmask_offset = align64(surf->total_size, surf->cmask_alignment);
 		surf->total_size = surf->cmask_offset + surf->cmask_size;
+		surf->alignment = MAX2(surf->alignment, surf->cmask_alignment);
 	}
 
 	if (surf->dcc_size &&
@@ -1918,6 +1922,7 @@ int ac_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *info,
 
 		surf->dcc_offset = align64(surf->total_size, surf->dcc_alignment);
 		surf->total_size = surf->dcc_offset + surf->dcc_size;
+		surf->alignment = MAX2(surf->alignment, surf->dcc_alignment);
 	}
 
 	return 0;
diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h
index 161a54c9888..22858206e46 100644
--- a/src/amd/common/ac_surface.h
+++ b/src/amd/common/ac_surface.h
@@ -247,6 +247,7 @@ struct radeon_surf {
     uint64_t                    display_dcc_offset;
     uint64_t                    dcc_retile_map_offset;
     uint64_t                    total_size;
+    uint32_t                    alignment;
 
     union {
         /* Return values for GFX8 and older.



More information about the mesa-commit mailing list