1 /* 2 ************************************************************************************************************************ 3 * 4 * Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved. 5 * SPDX-License-Identifier: MIT 6 * 7 ***********************************************************************************************************************/ 8 9 /** 10 **************************************************************************************************** 11 * @file ciaddrlib.h 12 * @brief Contains the CiLib class definition. 13 **************************************************************************************************** 14 */ 15 16 #ifndef __CI_ADDR_LIB_H__ 17 #define __CI_ADDR_LIB_H__ 18 19 #include "addrlib1.h" 20 #include "siaddrlib.h" 21 22 namespace Addr 23 { 24 namespace V1 25 { 26 27 /** 28 **************************************************************************************************** 29 * @brief This class is the CI specific address library 30 * function set. 31 **************************************************************************************************** 32 */ 33 class CiLib : public SiLib 34 { 35 public: 36 /// Creates CiLib object CreateObj(const Client * pClient)37 static Addr::Lib* CreateObj(const Client* pClient) 38 { 39 VOID* pMem = Object::ClientAlloc(sizeof(CiLib), pClient); 40 return (pMem != NULL) ? new (pMem) CiLib(pClient) : NULL; 41 } 42 43 private: 44 CiLib(const Client* pClient); 45 virtual ~CiLib(); 46 47 protected: 48 49 // Hwl interface - defined in AddrLib1 50 virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfo( 51 const ADDR_COMPUTE_SURFACE_INFO_INPUT* pIn, 52 ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const; 53 54 virtual ADDR_E_RETURNCODE HwlComputeFmaskInfo( 55 const ADDR_COMPUTE_FMASK_INFO_INPUT* pIn, 56 ADDR_COMPUTE_FMASK_INFO_OUTPUT* pOut); 57 58 virtual ChipFamily HwlConvertChipFamily( 59 UINT_32 uChipFamily, UINT_32 uChipRevision); 60 61 virtual BOOL_32 HwlInitGlobalParams( 62 const ADDR_CREATE_INPUT* pCreateIn); 63 64 virtual ADDR_E_RETURNCODE HwlSetupTileCfg( 65 UINT_32 bpp, INT_32 index, INT_32 macroModeIndex, ADDR_TILEINFO* pInfo, 66 AddrTileMode* pMode = 0, AddrTileType* pType = 0) const; 67 68 virtual VOID HwlComputeTileDataWidthAndHeightLinear( 69 UINT_32* pMacroWidth, UINT_32* pMacroHeight, 70 UINT_32 bpp, ADDR_TILEINFO* pTileInfo) const; 71 72 virtual INT_32 HwlComputeMacroModeIndex( 73 INT_32 tileIndex, ADDR_SURFACE_FLAGS flags, UINT_32 bpp, UINT_32 numSamples, 74 ADDR_TILEINFO* pTileInfo, AddrTileMode* pTileMode = NULL, AddrTileType* pTileType = NULL 75 ) const; 76 77 // Sub-hwl interface - defined in EgBasedLib 78 virtual VOID HwlSetupTileInfo( 79 AddrTileMode tileMode, ADDR_SURFACE_FLAGS flags, 80 UINT_32 bpp, UINT_32 pitch, UINT_32 height, UINT_32 numSamples, 81 ADDR_TILEINFO* inputTileInfo, ADDR_TILEINFO* outputTileInfo, 82 AddrTileType inTileType, ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const; 83 84 virtual INT_32 HwlPostCheckTileIndex( 85 const ADDR_TILEINFO* pInfo, AddrTileMode mode, AddrTileType type, 86 INT curIndex = TileIndexInvalid) const; 87 88 virtual VOID HwlFmaskPreThunkSurfInfo( 89 const ADDR_COMPUTE_FMASK_INFO_INPUT* pFmaskIn, 90 const ADDR_COMPUTE_FMASK_INFO_OUTPUT* pFmaskOut, 91 ADDR_COMPUTE_SURFACE_INFO_INPUT* pSurfIn, 92 ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pSurfOut) const; 93 94 virtual VOID HwlFmaskPostThunkSurfInfo( 95 const ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pSurfOut, 96 ADDR_COMPUTE_FMASK_INFO_OUTPUT* pFmaskOut) const; 97 98 virtual AddrTileMode HwlDegradeThickTileMode( 99 AddrTileMode baseTileMode, UINT_32 numSlices, UINT_32* pBytesPerTile) const; 100 101 virtual VOID HwlOverrideTileMode(ADDR_COMPUTE_SURFACE_INFO_INPUT* pInOut) const; 102 103 virtual VOID HwlOptimizeTileMode(ADDR_COMPUTE_SURFACE_INFO_INPUT* pInOut) const; 104 105 virtual VOID HwlSelectTileMode(ADDR_COMPUTE_SURFACE_INFO_INPUT* pInOut) const; 106 107 /// Overwrite tile setting to PRT 108 virtual VOID HwlSetPrtTileMode(ADDR_COMPUTE_SURFACE_INFO_INPUT* pInOut) const; 109 110 virtual ADDR_E_RETURNCODE HwlComputeDccInfo( 111 const ADDR_COMPUTE_DCCINFO_INPUT* pIn, 112 ADDR_COMPUTE_DCCINFO_OUTPUT* pOut) const; 113 114 virtual ADDR_E_RETURNCODE HwlComputeCmaskAddrFromCoord( 115 const ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT* pIn, 116 ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT* pOut) const; 117 118 virtual ADDR_E_RETURNCODE HwlComputeHtileAddrFromCoord( 119 const ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn, 120 ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT* pOut) const; 121 122 virtual UINT_32 HwlComputeMaxBaseAlignments() const; 123 124 virtual UINT_32 HwlComputeMaxMetaBaseAlignments() const; 125 126 virtual VOID HwlPadDimensions( 127 AddrTileMode tileMode, UINT_32 bpp, ADDR_SURFACE_FLAGS flags, 128 UINT_32 numSamples, ADDR_TILEINFO* pTileInfo, UINT_32 mipLevel, 129 UINT_32* pPitch, UINT_32 *PitchAlign, UINT_32 height, UINT_32 heightAlign) const; 130 131 virtual VOID HwlComputeSurfaceAlignmentsMacroTiled( 132 AddrTileMode tileMode, UINT_32 bpp, ADDR_SURFACE_FLAGS flags, 133 UINT_32 mipLevel, UINT_32 numSamples, ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const; 134 135 private: 136 VOID ReadGbTileMode( 137 UINT_32 regValue, TileConfig* pCfg) const; 138 139 VOID ReadGbMacroTileCfg( 140 UINT_32 regValue, ADDR_TILEINFO* pCfg) const; 141 142 private: 143 BOOL_32 InitTileSettingTable( 144 const UINT_32 *pSetting, UINT_32 noOfEntries); 145 146 BOOL_32 InitMacroTileCfgTable( 147 const UINT_32 *pSetting, UINT_32 noOfEntries); 148 149 UINT_64 HwlComputeMetadataNibbleAddress( 150 UINT_64 uncompressedDataByteAddress, 151 UINT_64 dataBaseByteAddress, 152 UINT_64 metadataBaseByteAddress, 153 UINT_32 metadataBitSize, 154 UINT_32 elementBitSize, 155 UINT_32 blockByteSize, 156 UINT_32 pipeInterleaveBytes, 157 UINT_32 numOfPipes, 158 UINT_32 numOfBanks, 159 UINT_32 numOfSamplesPerSplit) const; 160 161 BOOL_32 DepthStencilTileCfgMatch( 162 const ADDR_COMPUTE_SURFACE_INFO_INPUT* pIn, 163 ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const; 164 165 BOOL_32 CheckTcCompatibility(const ADDR_TILEINFO* pTileInfo, UINT_32 bpp, AddrTileMode tileMode, 166 AddrTileType tileType, const ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const; 167 SupportDccAndTcCompatibility()168 BOOL_32 SupportDccAndTcCompatibility() const 169 { 170 return ((m_settings.isVolcanicIslands == TRUE) || (m_configFlags.forceDccAndTcCompat == TRUE)); 171 } 172 AltTilingEnabled()173 BOOL_32 AltTilingEnabled() const 174 { 175 return (m_configFlags.enableAltTiling == TRUE); 176 } 177 178 static const UINT_32 MacroTileTableSize = 16; 179 static const UINT_32 PrtMacroModeOffset = MacroTileTableSize / 2; 180 static const INT_32 MinDepth2DThinIndex = 0; 181 static const INT_32 MaxDepth2DThinIndex = 4; 182 static const INT_32 Depth1DThinIndex = 5; 183 184 ADDR_TILEINFO m_macroTileTable[MacroTileTableSize]; 185 UINT_32 m_noOfMacroEntries; 186 BOOL_32 m_allowNonDispThickModes; 187 }; 188 189 } // V1 190 } // Addr 191 192 #endif 193 194 195