From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/amd/addrlib/addrinterface.h | 2 ++ src/amd/addrlib/core/addrlib1.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/src/amd/addrlib/addrinterface.h b/src/amd/addrlib/addrinterface.h index 8506a45..d2d6d94 100644 --- a/src/amd/addrlib/addrinterface.h +++ b/src/amd/addrlib/addrinterface.h @@ -899,20 +899,22 @@ typedef struct _ADDR_COMPUTE_HTILE_INFO_OUTPUT UINT_32 pitch; ///< Pitch in pixels of depth buffer represented in this /// HTile buffer. This might be larger than original depth /// buffer pitch when called with an unaligned pitch. UINT_32 height; ///< Height in pixels, as above UINT_64 htileBytes; ///< Size of HTILE buffer, in bytes UINT_32 baseAlign; ///< Base alignment UINT_32 bpp; ///< Bits per pixel for HTILE is how many bits for an 8x8 block! UINT_32 macroWidth; ///< Macro width in pixels, actually squared cache shape UINT_32 macroHeight; ///< Macro height in pixels UINT_64 sliceSize; ///< Slice size, in bytes. + BOOL_32 sliceInterleaved; ///< Flag to indicate if different slice's htile is interleaved + /// Compute engine clear can't be used if htile is interleaved } ADDR_COMPUTE_HTILE_INFO_OUTPUT; /** **************************************************************************************************** * AddrComputeHtileInfo * * @brief * Compute Htile pitch, height, base alignment and size in bytes **************************************************************************************************** */ diff --git a/src/amd/addrlib/core/addrlib1.cpp b/src/amd/addrlib/core/addrlib1.cpp index fb33145..809bca2 100644 --- a/src/amd/addrlib/core/addrlib1.cpp +++ b/src/amd/addrlib/core/addrlib1.cpp @@ -1288,20 +1288,36 @@ ADDR_E_RETURNCODE Lib::ComputeHtileInfo( isWidth8, isHeight8, pIn->pTileInfo, &pOut->pitch, &pOut->height, &pOut->htileBytes, &pOut->macroWidth, &pOut->macroHeight, &pOut->sliceSize, &pOut->baseAlign); + + if (pIn->flags.tcCompatible && (pIn->numSlices > 1)) + { + pOut->sliceSize = pIn->pitch * pIn->height * 4 / (8 * 8); + + const UINT_32 align = HwlGetPipes(pIn->pTileInfo) * pIn->pTileInfo->banks * m_pipeInterleaveBytes; + + if ((pOut->sliceSize % align) == 0) + { + pOut->sliceInterleaved = FALSE; + } + else + { + pOut->sliceInterleaved = TRUE; + } + } } } return returnCode; } /** **************************************************************************************************** * Lib::ComputeCmaskInfo * -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev