From 0926b268fc9a73d0eb48a47a8604acde8ca811ef Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 3 Aug 2021 13:26:33 +0200 Subject: [PATCH] amd/addrlib: expose CMASK address equations to drivers on GFX10+ MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák Part-of: --- src/amd/addrlib/inc/addrinterface.h | 3 +++ src/amd/addrlib/src/gfx10/gfx10addrlib.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/amd/addrlib/inc/addrinterface.h b/src/amd/addrlib/inc/addrinterface.h index 3601a53..1b03548 100644 --- a/src/amd/addrlib/inc/addrinterface.h +++ b/src/amd/addrlib/inc/addrinterface.h @@ -3005,6 +3005,9 @@ typedef struct _ADDR2_COMPUTE_CMASK_INFO_OUTPUT * - rb_aligned */ struct gfx9_addr_meta_equation gfx9; + + /* This is chip-specific, it requires 64KB_Z_X. */ + UINT_16 *gfx10_bits; /* 68 2-byte elements */ } equation; } ADDR2_COMPUTE_CMASK_INFO_OUTPUT; diff --git a/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp b/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp index f2c6d6b..14ce04d 100644 --- a/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp +++ b/src/amd/addrlib/src/gfx10/gfx10addrlib.cpp @@ -369,6 +369,17 @@ ADDR_E_RETURNCODE Gfx10Lib::HwlComputeCmaskInfo( pOut->sliceSize = pOut->metaBlkNumPerSlice * metaBlkSize; pOut->cmaskBytes = pOut->sliceSize * pIn->numSlices; + + // Get the CMASK address equation (copied from CmaskAddrFromCoord) + const UINT_32 fmaskBpp = GetFmaskBpp(1, 1); + const UINT_32 fmaskElemLog2 = Log2(fmaskBpp >> 3); + const UINT_32 index = m_xmaskBaseIndex + fmaskElemLog2; + const UINT_8* patIdxTable = + (pIn->swizzleMode == ADDR_SW_VAR_Z_X) ? GFX10_CMASK_VAR_RBPLUS_PATIDX : + (m_settings.supportRbPlus ? GFX10_CMASK_64K_RBPLUS_PATIDX : GFX10_CMASK_64K_PATIDX); + + ADDR_C_ASSERT(sizeof(GFX10_CMASK_SW_PATTERN[patIdxTable[index]]) == 68 * 2); + pOut->equation.gfx10_bits = (UINT_16*)GFX10_CMASK_SW_PATTERN[patIdxTable[index]]; } return ret; -- 2.7.4