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

Reply via email to