[Mesa-dev] [PATCH] radeon: align r600/700 fmask to 128 X blocks.

Dave Airlie airlied at gmail.com
Thu Jan 8 19:34:41 PST 2015

From: Dave Airlie <airlied at redhat.com>

After much searching and empricial testing, and reading of
things I've no justifcation for this fix, other than it really
appears this is what the hw is doing or close enough.

It makes sense that each entry in the FMASK corresponds to
an entry in the CMASKm and the CMASK is organised into 128x128
blocks, but I can't find anything in any of the docs/info from AMD.

But I've spent a lot of time on this, and this seems to be the
simplest fix, in that we don't over allocate things too much,
once this fix in place we can nuke the extra multiplier in mesa.

Signed-off-by: Dave Airlie <airlied at redhat.com>
 radeon/radeon_surface.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/radeon/radeon_surface.c b/radeon/radeon_surface.c
index 930017e..bd9ee6d 100644
--- a/radeon/radeon_surface.c
+++ b/radeon/radeon_surface.c
@@ -366,6 +366,8 @@ static int r6_surface_init_2d(struct radeon_surface_manager *surf_man,
     xalign = (surf_man->hw_info.group_bytes * surf_man->hw_info.num_banks) /
              (tilew * surf->bpe * surf->nsamples);
     xalign = MAX2(tilew * surf_man->hw_info.num_banks, xalign);
+    if (surf->flags & RADEON_SURF_FMASK)
+	xalign = MAX2(128, xalign);
     yalign = tilew * surf_man->hw_info.num_pipes;
     if (surf->flags & RADEON_SURF_SCANOUT) {
         xalign = MAX2((surf->bpe == 1) ? 64 : 32, xalign);

More information about the mesa-dev mailing list