From: Frans Gu <frans...@amd.com>

Switch the tile index based on logic instead of hardcoded threshold
for different ASIC.
---
 src/amd/addrlib/r800/ciaddrlib.cpp | 68 +++++++++++---------------------------
 src/amd/addrlib/r800/ciaddrlib.h   |  2 --
 2 files changed, 19 insertions(+), 51 deletions(-)

diff --git a/src/amd/addrlib/r800/ciaddrlib.cpp 
b/src/amd/addrlib/r800/ciaddrlib.cpp
index 97ef3b6..64fa669 100644
--- a/src/amd/addrlib/r800/ciaddrlib.cpp
+++ b/src/amd/addrlib/r800/ciaddrlib.cpp
@@ -905,63 +905,20 @@ BOOL_32 CiAddrLib::HwlOverrideTileMode(
     {
         *pTileMode = tileMode;
         bOverrided = TRUE;
     }
 
     return bOverrided;
 }
 
 /**
 
***************************************************************************************************
-*   CiAddrLib::GetPrtSwitchP4Threshold
-*
-*   @brief
-*       Return the threshold of switching to P4_* instead of P16_* for PRT 
resources
-***************************************************************************************************
-*/
-UINT_32 CiAddrLib::GetPrtSwitchP4Threshold() const
-{
-    UINT_32 threshold;
-
-    switch (m_pipes)
-    {
-        case 8:
-            threshold = 32;
-            break;
-        case 16:
-            if (m_settings.isFiji)
-            {
-                threshold = 16;
-            }
-            else if (m_settings.isHawaii)
-            {
-                threshold = 8;
-            }
-            else
-            {
-                ///@todo add for possible new ASICs.
-                ADDR_ASSERT_ALWAYS();
-                threshold = 16;
-            }
-            break;
-        default:
-            ///@todo add for possible new ASICs.
-            ADDR_ASSERT_ALWAYS();
-            threshold = 32;
-            break;
-    }
-
-    return threshold;
-}
-
-/**
-***************************************************************************************************
 *   CiAddrLib::HwlSetupTileInfo
 *
 *   @brief
 *       Setup default value of tile info for SI
 
***************************************************************************************************
 */
 VOID CiAddrLib::HwlSetupTileInfo(
     AddrTileMode                        tileMode,       ///< [in] Tile mode
     ADDR_SURFACE_FLAGS                  flags,          ///< [in] Surface type 
flags
     UINT_32                             bpp,            ///< [in] Bits per 
pixel
@@ -1178,30 +1135,43 @@ VOID CiAddrLib::HwlSetupTileInfo(
                 default:
                     break;
             }
         }
 
         if (m_pipes >= 8)
         {
             ADDR_ASSERT((index + 1) < static_cast<INT_32>(m_noOfEntries));
             // Only do this when tile mode table is updated.
             if (((tileMode == ADDR_TM_PRT_TILED_THIN1) || (tileMode == 
ADDR_TM_PRT_TILED_THICK)) &&
-                (m_tileTable[index+1].mode == tileMode))
+                (m_tileTable[index + 1].mode == tileMode))
             {
-                UINT_32 bytesXSamples = bpp * numSamples / 8;
-                UINT_32 bytesXThickness = bpp * thickness / 8;
-                UINT_32 switchP4Threshold = GetPrtSwitchP4Threshold();
+                static const UINT_32 PrtTileBytes = 0x10000;
+                ADDR_TILEINFO tileInfo = {0};
+
+                HwlComputeMacroModeIndex(index, flags, bpp, numSamples, 
&tileInfo);
+
+                UINT_32 macroTileBytes = (bpp >> 3) * 64 * numSamples * 
thickness *
+                                         HwlGetPipes(&tileInfo) * 
tileInfo.banks *
+                                         tileInfo.bankWidth * 
tileInfo.bankHeight;
 
-                if ((bytesXSamples > switchP4Threshold) || (bytesXThickness > 
switchP4Threshold))
+                if (macroTileBytes != PrtTileBytes)
                 {
-                    // Pick next 4 pipe entry
+                    // Switching to next tile mode entry to make sure macro 
tile size is 64KB
                     index += 1;
+
+                    tileInfo.pipeConfig = m_tileTable[index].info.pipeConfig;
+
+                    macroTileBytes = (bpp >> 3) * 64 * numSamples * thickness *
+                                     HwlGetPipes(&tileInfo) * tileInfo.banks *
+                                     tileInfo.bankWidth * tileInfo.bankHeight;
+
+                    ADDR_ASSERT(macroTileBytes == PrtTileBytes);
                 }
             }
         }
     }
     else
     {
         // A pre-filled tile info is ready
         index = pOut->tileIndex;
         macroModeIndex = pOut->macroModeIndex;
 
diff --git a/src/amd/addrlib/r800/ciaddrlib.h b/src/amd/addrlib/r800/ciaddrlib.h
index 92d8468..92997a5 100644
--- a/src/amd/addrlib/r800/ciaddrlib.h
+++ b/src/amd/addrlib/r800/ciaddrlib.h
@@ -162,22 +162,20 @@ protected:
         UINT_32* pPitch, UINT_32 pitchAlign, UINT_32* pHeight, UINT_32 
heightAlign,
         UINT_32* pSlices, UINT_32 sliceAlign) const;
 
 private:
     VOID ReadGbTileMode(
         UINT_32 regValue, ADDR_TILECONFIG* pCfg) const;
 
     VOID ReadGbMacroTileCfg(
         UINT_32 regValue, ADDR_TILEINFO* pCfg) const;
 
-    UINT_32 GetPrtSwitchP4Threshold() const;
-
     BOOL_32 InitTileSettingTable(
         const UINT_32 *pSetting, UINT_32 noOfEntries);
 
     BOOL_32 InitMacroTileCfgTable(
         const UINT_32 *pSetting, UINT_32 noOfEntries);
 
     UINT_64 HwlComputeMetadataNibbleAddress(
         UINT_64 uncompressedDataByteAddress,
         UINT_64 dataBaseByteAddress,
         UINT_64 metadataBaseByteAddress,
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to