xref: /aosp_15_r20/external/mesa3d/src/amd/addrlib/src/gfx11/gfx11addrlib.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  gfx11addrlib.h
12 * @brief Contains the Gfx11Lib class definition.
13 ************************************************************************************************************************
14 */
15 
16 #ifndef __GFX11_ADDR_LIB_H__
17 #define __GFX11_ADDR_LIB_H__
18 
19 #include "addrlib2.h"
20 #include "coord.h"
21 #include "gfx11SwizzlePattern.h"
22 
23 namespace Addr
24 {
25 namespace V2
26 {
27 
28 /**
29 ************************************************************************************************************************
30 * @brief GFX11 specific settings structure.
31 ************************************************************************************************************************
32 */
33 struct Gfx11ChipSettings
34 {
35     struct
36     {
37         UINT_32 isGfx1150           :  1;
38         UINT_32 isGfx1103           :  1;
39         UINT_32 reserved1           : 30;
40 
41         // Misc configuration bits
42         UINT_32 reserved2           : 32;
43     };
44 };
45 
46 /**
47 ************************************************************************************************************************
48 * @brief GFX11 data surface type.
49 ************************************************************************************************************************
50 */
51 enum Gfx11DataType
52 {
53     Gfx11DataColor,
54     Gfx11DataDepthStencil,
55 };
56 
57 const UINT_32 Gfx11LinearSwModeMask = (1u << ADDR_SW_LINEAR);
58 
59 const UINT_32 Gfx11Blk256BSwModeMask = (1u << ADDR_SW_256B_D);
60 
61 const UINT_32 Gfx11Blk4KBSwModeMask = (1u << ADDR_SW_4KB_S)   |
62                                       (1u << ADDR_SW_4KB_D)   |
63                                       (1u << ADDR_SW_4KB_S_X) |
64                                       (1u << ADDR_SW_4KB_D_X);
65 
66 const UINT_32 Gfx11Blk64KBSwModeMask = (1u << ADDR_SW_64KB_S)   |
67                                        (1u << ADDR_SW_64KB_D)   |
68                                        (1u << ADDR_SW_64KB_S_T) |
69                                        (1u << ADDR_SW_64KB_D_T) |
70                                        (1u << ADDR_SW_64KB_Z_X) |
71                                        (1u << ADDR_SW_64KB_S_X) |
72                                        (1u << ADDR_SW_64KB_D_X) |
73                                        (1u << ADDR_SW_64KB_R_X);
74 
75 const UINT_32 Gfx11Blk256KBSwModeMask = (1u << ADDR_SW_256KB_Z_X) |
76                                         (1u << ADDR_SW_256KB_S_X) |
77                                         (1u << ADDR_SW_256KB_D_X) |
78                                         (1u << ADDR_SW_256KB_R_X);
79 
80 const UINT_32 Gfx11ZSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
81                                  (1u << ADDR_SW_256KB_Z_X);
82 
83 const UINT_32 Gfx11StandardSwModeMask = (1u << ADDR_SW_4KB_S)    |
84                                         (1u << ADDR_SW_64KB_S)   |
85                                         (1u << ADDR_SW_64KB_S_T) |
86                                         (1u << ADDR_SW_4KB_S_X)  |
87                                         (1u << ADDR_SW_64KB_S_X) |
88                                         (1u << ADDR_SW_256KB_S_X);
89 
90 const UINT_32 Gfx11DisplaySwModeMask = (1u << ADDR_SW_256B_D)   |
91                                        (1u << ADDR_SW_4KB_D)    |
92                                        (1u << ADDR_SW_64KB_D)   |
93                                        (1u << ADDR_SW_64KB_D_T) |
94                                        (1u << ADDR_SW_4KB_D_X)  |
95                                        (1u << ADDR_SW_64KB_D_X) |
96                                        (1u << ADDR_SW_256KB_D_X);
97 
98 const UINT_32 Gfx11RenderSwModeMask = (1u << ADDR_SW_64KB_R_X) |
99                                       (1u << ADDR_SW_256KB_R_X);
100 
101 const UINT_32 Gfx11XSwModeMask = (1u << ADDR_SW_4KB_S_X)  |
102                                  (1u << ADDR_SW_4KB_D_X)  |
103                                  (1u << ADDR_SW_64KB_Z_X) |
104                                  (1u << ADDR_SW_64KB_S_X) |
105                                  (1u << ADDR_SW_64KB_D_X) |
106                                  (1u << ADDR_SW_64KB_R_X) |
107                                  Gfx11Blk256KBSwModeMask;
108 
109 const UINT_32 Gfx11TSwModeMask = (1u << ADDR_SW_64KB_S_T) |
110                                  (1u << ADDR_SW_64KB_D_T);
111 
112 const UINT_32 Gfx11XorSwModeMask = Gfx11XSwModeMask |
113                                    Gfx11TSwModeMask;
114 
115 const UINT_32 Gfx11Rsrc1dSwModeMask = (1u << ADDR_SW_LINEAR)   |
116                                       (1u << ADDR_SW_64KB_R_X) |
117                                       (1u << ADDR_SW_64KB_Z_X) ;
118 
119 const UINT_32 Gfx11Rsrc2dSwModeMask = Gfx11LinearSwModeMask  |
120                                       Gfx11DisplaySwModeMask |
121                                       Gfx11ZSwModeMask       |
122                                       Gfx11RenderSwModeMask;
123 
124 const UINT_32 Gfx11Rsrc3dSwModeMask = Gfx11LinearSwModeMask   |
125                                       Gfx11StandardSwModeMask |
126                                       Gfx11ZSwModeMask        |
127                                       Gfx11RenderSwModeMask   |
128                                       (1u << ADDR_SW_64KB_D_X);
129 
130 const UINT_32 Gfx11Rsrc2dPrtSwModeMask =
131     (Gfx11Blk4KBSwModeMask | Gfx11Blk64KBSwModeMask) & ~Gfx11XSwModeMask & Gfx11Rsrc2dSwModeMask;
132 
133 const UINT_32 Gfx11Rsrc3dPrtSwModeMask =
134     (Gfx11Blk4KBSwModeMask | Gfx11Blk64KBSwModeMask) & ~Gfx11XSwModeMask & Gfx11Rsrc3dSwModeMask;
135 
136 const UINT_32 Gfx11Rsrc3dThin64KBSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
137                                               (1u << ADDR_SW_64KB_R_X);
138 
139 const UINT_32 Gfx11Rsrc3dThin256KBSwModeMask = (1u << ADDR_SW_256KB_Z_X) |
140                                                (1u << ADDR_SW_256KB_R_X);
141 
142 const UINT_32 Gfx11Rsrc3dThinSwModeMask = Gfx11Rsrc3dThin64KBSwModeMask | Gfx11Rsrc3dThin256KBSwModeMask;
143 
144 const UINT_32 Gfx11Rsrc3dViewAs2dSwModeMask = Gfx11Rsrc3dThinSwModeMask | Gfx11LinearSwModeMask;
145 
146 const UINT_32 Gfx11Rsrc3dThickSwModeMask = Gfx11Rsrc3dSwModeMask & ~(Gfx11Rsrc3dThinSwModeMask | Gfx11LinearSwModeMask);
147 
148 const UINT_32 Gfx11Rsrc3dThick4KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk4KBSwModeMask;
149 
150 const UINT_32 Gfx11Rsrc3dThick64KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk64KBSwModeMask;
151 
152 const UINT_32 Gfx11Rsrc3dThick256KBSwModeMask = Gfx11Rsrc3dThickSwModeMask & Gfx11Blk256KBSwModeMask;
153 
154 const UINT_32 Gfx11MsaaSwModeMask = Gfx11ZSwModeMask |
155                                     Gfx11RenderSwModeMask;
156 
157 const UINT_32 Dcn32SwModeMask = (1u << ADDR_SW_LINEAR)    |
158                                 (1u << ADDR_SW_64KB_D)    |
159                                 (1u << ADDR_SW_64KB_D_T)  |
160                                 (1u << ADDR_SW_64KB_D_X)  |
161                                 (1u << ADDR_SW_64KB_R_X)  |
162                                 (1u << ADDR_SW_256KB_D_X) |
163                                 (1u << ADDR_SW_256KB_R_X);
164 
165 const UINT_32 Size256K     = 262144u;
166 const UINT_32 Log2Size256K = 18u;
167 
168 /**
169 ************************************************************************************************************************
170 * @brief This class is the GFX11 specific address library
171 *        function set.
172 ************************************************************************************************************************
173 */
174 class Gfx11Lib : public Lib
175 {
176 public:
177     /// Creates Gfx11Lib object
CreateObj(const Client * pClient)178     static Addr::Lib* CreateObj(const Client* pClient)
179     {
180         VOID* pMem = Object::ClientAlloc(sizeof(Gfx11Lib), pClient);
181         return (pMem != NULL) ? new (pMem) Gfx11Lib(pClient) : NULL;
182     }
183 
184 protected:
185     Gfx11Lib(const Client* pClient);
186     virtual ~Gfx11Lib();
187 
HwlIsStandardSwizzle(AddrResourceType resourceType,AddrSwizzleMode swizzleMode)188     virtual BOOL_32 HwlIsStandardSwizzle(
189         AddrResourceType resourceType,
190         AddrSwizzleMode  swizzleMode) const
191     {
192         return m_swizzleModeTable[swizzleMode].isStd;
193     }
194 
HwlIsDisplaySwizzle(AddrResourceType resourceType,AddrSwizzleMode swizzleMode)195     virtual BOOL_32 HwlIsDisplaySwizzle(
196         AddrResourceType resourceType,
197         AddrSwizzleMode  swizzleMode) const
198     {
199         return m_swizzleModeTable[swizzleMode].isDisp;
200     }
201 
HwlIsThin(AddrResourceType resourceType,AddrSwizzleMode swizzleMode)202     virtual BOOL_32 HwlIsThin(
203         AddrResourceType resourceType,
204         AddrSwizzleMode  swizzleMode) const
205     {
206         return ((IsTex1d(resourceType)  == TRUE) ||
207                 (IsTex2d(resourceType)  == TRUE) ||
208                 ((IsTex3d(resourceType) == TRUE)                  &&
209                  (m_swizzleModeTable[swizzleMode].isStd  == FALSE) &&
210                  (m_swizzleModeTable[swizzleMode].isDisp == FALSE)));
211     }
212 
HwlIsThick(AddrResourceType resourceType,AddrSwizzleMode swizzleMode)213     virtual BOOL_32 HwlIsThick(
214         AddrResourceType resourceType,
215         AddrSwizzleMode  swizzleMode) const
216     {
217         return ((IsTex3d(resourceType) == TRUE) &&
218                 (m_swizzleModeTable[swizzleMode].isStd || m_swizzleModeTable[swizzleMode].isDisp));
219     }
220 
221     virtual ADDR_E_RETURNCODE HwlComputeHtileInfo(
222         const ADDR2_COMPUTE_HTILE_INFO_INPUT* pIn,
223         ADDR2_COMPUTE_HTILE_INFO_OUTPUT*      pOut) const;
224 
225     virtual ADDR_E_RETURNCODE HwlComputeDccInfo(
226         const ADDR2_COMPUTE_DCCINFO_INPUT* pIn,
227         ADDR2_COMPUTE_DCCINFO_OUTPUT*      pOut) const;
228 
229     virtual ADDR_E_RETURNCODE HwlComputeHtileAddrFromCoord(
230         const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn,
231         ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT*      pOut);
232 
233     virtual ADDR_E_RETURNCODE HwlComputeHtileCoordFromAddr(
234         const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT* pIn,
235         ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT*      pOut);
236 
237     virtual ADDR_E_RETURNCODE HwlSupportComputeDccAddrFromCoord(
238         const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn);
239 
240     virtual VOID HwlComputeDccAddrFromCoord(
241         const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn,
242         ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT*      pOut);
243 
244     virtual UINT_32 HwlGetEquationIndex(
245         const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
246         ADDR2_COMPUTE_SURFACE_INFO_OUTPUT*      pOut) const;
247 
HwlGetEquationTableInfo(const ADDR_EQUATION ** ppEquationTable)248     virtual UINT_32 HwlGetEquationTableInfo(const ADDR_EQUATION** ppEquationTable) const
249     {
250         *ppEquationTable = m_equationTable;
251 
252         return m_numEquations;
253     }
254 
255     virtual ADDR_E_RETURNCODE HwlComputePipeBankXor(
256         const ADDR2_COMPUTE_PIPEBANKXOR_INPUT* pIn,
257         ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT*      pOut) const;
258 
259     virtual ADDR_E_RETURNCODE HwlComputeSlicePipeBankXor(
260         const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT* pIn,
261         ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT*      pOut) const;
262 
263     virtual ADDR_E_RETURNCODE HwlComputeSubResourceOffsetForSwizzlePattern(
264         const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT* pIn,
265         ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT*      pOut) const;
266 
267     virtual ADDR_E_RETURNCODE HwlComputeNonBlockCompressedView(
268         const ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_INPUT* pIn,
269         ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_OUTPUT*      pOut) const;
270 
271     virtual ADDR_E_RETURNCODE HwlGetPreferredSurfaceSetting(
272         const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
273         ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT*      pOut) const;
274 
275     virtual ADDR_E_RETURNCODE HwlGetPossibleSwizzleModes(
276         const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
277         ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT*      pOut) const;
278 
279     virtual ADDR_E_RETURNCODE HwlGetAllowedBlockSet(
280         ADDR2_SWMODE_SET allowedSwModeSet,
281         AddrResourceType rsrcType,
282         ADDR2_BLOCK_SET* pAllowedBlockSet) const;
283 
284     virtual ADDR_E_RETURNCODE HwlGetAllowedSwSet(
285         ADDR2_SWMODE_SET  allowedSwModeSet,
286         ADDR2_SWTYPE_SET* pAllowedSwSet) const;
287 
288     virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoSanityCheck(
289         const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
290 
291     virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoTiled(
292          const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
293          ADDR2_COMPUTE_SURFACE_INFO_OUTPUT*      pOut) const;
294 
295     virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoLinear(
296          const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
297          ADDR2_COMPUTE_SURFACE_INFO_OUTPUT*      pOut) const;
298 
299     virtual ADDR_E_RETURNCODE HwlComputeSurfaceAddrFromCoordTiled(
300         const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
301         ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT*      pOut) const;
302 
303     virtual UINT_32 HwlComputeMaxBaseAlignments() const;
304 
305     virtual UINT_32 HwlComputeMaxMetaBaseAlignments() const;
306 
307     virtual BOOL_32 HwlInitGlobalParams(const ADDR_CREATE_INPUT* pCreateIn);
308 
309     virtual ChipFamily HwlConvertChipFamily(UINT_32 uChipFamily, UINT_32 uChipRevision);
310 
311 private:
312     // Initialize equation table
313     VOID InitEquationTable();
314 
315     ADDR_E_RETURNCODE ComputeSurfaceInfoMacroTiled(
316          const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
317          ADDR2_COMPUTE_SURFACE_INFO_OUTPUT*      pOut) const;
318 
319     ADDR_E_RETURNCODE ComputeSurfaceInfoMicroTiled(
320          const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
321          ADDR2_COMPUTE_SURFACE_INFO_OUTPUT*      pOut) const;
322 
323     ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMacroTiled(
324         const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
325         ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT*      pOut) const;
326 
327     ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMicroTiled(
328         const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
329         ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT*      pOut) const;
330 
331     UINT_32 ComputeOffsetFromSwizzlePattern(
332         const UINT_64* pPattern,
333         UINT_32        numBits,
334         UINT_32        x,
335         UINT_32        y,
336         UINT_32        z,
337         UINT_32        s) const;
338 
339     UINT_32 ComputeOffsetFromEquation(
340         const ADDR_EQUATION* pEq,
341         UINT_32              x,
342         UINT_32              y,
343         UINT_32              z) const;
344 
345     ADDR_E_RETURNCODE ComputeStereoInfo(
346         const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
347         UINT_32*                                pAlignY,
348         UINT_32*                                pRightXor) const;
349 
350     static void GetMipSize(
351         UINT_32  mip0Width,
352         UINT_32  mip0Height,
353         UINT_32  mip0Depth,
354         UINT_32  mipId,
355         UINT_32* pMipWidth,
356         UINT_32* pMipHeight,
357         UINT_32* pMipDepth = NULL)
358     {
359         *pMipWidth  = ShiftCeil(Max(mip0Width, 1u),  mipId);
360         *pMipHeight = ShiftCeil(Max(mip0Height, 1u), mipId);
361 
362         if (pMipDepth != NULL)
363         {
364             *pMipDepth = ShiftCeil(Max(mip0Depth, 1u),  mipId);
365         }
366     }
367 
368     const ADDR_SW_PATINFO* GetSwizzlePatternInfo(
369         AddrSwizzleMode  swizzleMode,
370         AddrResourceType resourceType,
371         UINT_32          log2Elem,
372         UINT_32          numFrag) const;
373 
GetSwizzlePatternFromPatternInfo(const ADDR_SW_PATINFO * pPatInfo,ADDR_BIT_SETTING (& pSwizzle)[20])374     VOID GetSwizzlePatternFromPatternInfo(
375         const ADDR_SW_PATINFO* pPatInfo,
376         ADDR_BIT_SETTING       (&pSwizzle)[20]) const
377     {
378         memcpy(pSwizzle,
379                GFX11_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx],
380                sizeof(GFX11_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx]));
381 
382         memcpy(&pSwizzle[8],
383                GFX11_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx],
384                sizeof(GFX11_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx]));
385 
386         memcpy(&pSwizzle[12],
387                GFX11_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx],
388                sizeof(GFX11_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx]));
389 
390         memcpy(&pSwizzle[16],
391                GFX11_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx],
392                sizeof(GFX11_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx]));
393     }
394 
395     VOID ConvertSwizzlePatternToEquation(
396         UINT_32                elemLog2,
397         AddrResourceType       rsrcType,
398         AddrSwizzleMode        swMode,
399         const ADDR_SW_PATINFO* pPatInfo,
400         ADDR_EQUATION*         pEquation) const;
401 
402     static INT_32 GetMetaElementSizeLog2(Gfx11DataType dataType);
403 
404     static INT_32 GetMetaCacheSizeLog2(Gfx11DataType dataType);
405 
406     void GetBlk256SizeLog2(
407         AddrResourceType resourceType,
408         AddrSwizzleMode  swizzleMode,
409         UINT_32          elemLog2,
410         UINT_32          numSamplesLog2,
411         Dim3d*           pBlock) const;
412 
413     void GetCompressedBlockSizeLog2(
414         Gfx11DataType    dataType,
415         AddrResourceType resourceType,
416         AddrSwizzleMode  swizzleMode,
417         UINT_32          elemLog2,
418         UINT_32          numSamplesLog2,
419         Dim3d*           pBlock) const;
420 
421     INT_32 GetMetaOverlapLog2(
422         Gfx11DataType    dataType,
423         AddrResourceType resourceType,
424         AddrSwizzleMode  swizzleMode,
425         UINT_32          elemLog2,
426         UINT_32          numSamplesLog2) const;
427 
428     INT_32 Get3DMetaOverlapLog2(
429         AddrResourceType resourceType,
430         AddrSwizzleMode  swizzleMode,
431         UINT_32          elemLog2) const;
432 
433     UINT_32 GetMetaBlkSize(
434         Gfx11DataType    dataType,
435         AddrResourceType resourceType,
436         AddrSwizzleMode  swizzleMode,
437         UINT_32          elemLog2,
438         UINT_32          numSamplesLog2,
439         BOOL_32          pipeAlign,
440         Dim3d*           pBlock) const;
441 
442     INT_32 GetPipeRotateAmount(
443         AddrResourceType resourceType,
444         AddrSwizzleMode  swizzleMode) const;
445 
GetEffectiveNumPipes()446     INT_32 GetEffectiveNumPipes() const
447     {
448         return ((m_numSaLog2 + 1) >= m_pipesLog2) ? m_pipesLog2 : m_numSaLog2 + 1;
449     }
450 
IsRbAligned(AddrResourceType resourceType,AddrSwizzleMode swizzleMode)451     BOOL_32 IsRbAligned(
452         AddrResourceType resourceType,
453         AddrSwizzleMode  swizzleMode) const
454     {
455         const BOOL_32 isRtopt   = IsRtOptSwizzle(swizzleMode);
456         const BOOL_32 isZ       = IsZOrderSwizzle(swizzleMode);
457         const BOOL_32 isDisplay = IsDisplaySwizzle(swizzleMode);
458 
459         return (IsTex2d(resourceType) && (isRtopt || isZ)) ||
460                (IsTex3d(resourceType) && isDisplay);
461 
462     }
463 
464     UINT_32 GetValidDisplaySwizzleModes(UINT_32 bpp) const;
465 
466     BOOL_32 IsValidDisplaySwizzleMode(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
467 
468     UINT_32 GetMaxNumMipsInTail(UINT_32 blockSizeLog2, BOOL_32 isThin) const;
469 
IsInMipTail(Dim3d mipTailDim,UINT_32 maxNumMipsInTail,UINT_32 mipWidth,UINT_32 mipHeight,UINT_32 numMipsToTheEnd)470     BOOL_32 IsInMipTail(
471         Dim3d   mipTailDim,
472         UINT_32 maxNumMipsInTail,
473         UINT_32 mipWidth,
474         UINT_32 mipHeight,
475         UINT_32 numMipsToTheEnd) const
476     {
477         BOOL_32 inTail = ((mipWidth <= mipTailDim.w) &&
478                           (mipHeight <= mipTailDim.h) &&
479                           (numMipsToTheEnd <= maxNumMipsInTail));
480 
481         return inTail;
482     }
483 
GetBankXorBits(UINT_32 blockBits)484     UINT_32 GetBankXorBits(UINT_32 blockBits) const
485     {
486         return (blockBits > m_pipeInterleaveLog2 + m_pipesLog2 + ColumnBits) ?
487                Min(blockBits - m_pipeInterleaveLog2 - m_pipesLog2 - ColumnBits, BankBits) : 0;
488     }
489 
490     BOOL_32 ValidateNonSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
491     BOOL_32 ValidateSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
492 
IsBlock256kb(AddrSwizzleMode swizzleMode)493     BOOL_32 IsBlock256kb(AddrSwizzleMode swizzleMode) const { return IsBlockVariable(swizzleMode); }
494 
495     // TODO: figure out if there is any Column bits on GFX11...
496     static const UINT_32 ColumnBits       = 2;
497     static const UINT_32 BankBits         = 4;
498     static const UINT_32 UnalignedDccType = 3;
499 
500     static const Dim3d Block256_3d[MaxNumOfBpp];
501     static const Dim3d Block256K_Log2_3d[MaxNumOfBpp];
502     static const Dim3d Block64K_Log2_3d[MaxNumOfBpp];
503     static const Dim3d Block4K_Log2_3d[MaxNumOfBpp];
504 
505     static const SwizzleModeFlags SwizzleModeTable[ADDR_SW_MAX_TYPE];
506 
507     // Number of packers log2
508     UINT_32 m_numPkrLog2;
509     // Number of shader array log2
510     UINT_32 m_numSaLog2;
511 
512     Gfx11ChipSettings m_settings;
513 
514     UINT_32 m_colorBaseIndex;
515     UINT_32 m_htileBaseIndex;
516     UINT_32 m_dccBaseIndex;
517 };
518 
519 } // V2
520 } // Addr
521 
522 #endif
523 
524