xref: /aosp_15_r20/external/mesa3d/src/amd/addrlib/src/r800/ciaddrlib.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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