From 48bf5d0800ef394879a5a229ac2ae5a15a4c75e5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Wed, 20 Jul 2016 10:51:50 +0200 Subject: [PATCH] amdgpu/addrlib: Fix the issue that tcCompatible HTILE slice size is not calculated correctly --- 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 8506a45ae90..d2d6d94698e 100644 --- a/src/amd/addrlib/addrinterface.h +++ b/src/amd/addrlib/addrinterface.h @@ -906,6 +906,8 @@ typedef struct _ADDR_COMPUTE_HTILE_INFO_OUTPUT 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; /** diff --git a/src/amd/addrlib/core/addrlib1.cpp b/src/amd/addrlib/core/addrlib1.cpp index fb33145f88d..809bca23914 100644 --- a/src/amd/addrlib/core/addrlib1.cpp +++ b/src/amd/addrlib/core/addrlib1.cpp @@ -1295,6 +1295,22 @@ ADDR_E_RETURNCODE Lib::ComputeHtileInfo( &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; + } + } } } -- 2.30.2