2 * Copyright © 2007-2018 Advanced Micro Devices, Inc.
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
15 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
17 * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 * USE OR OTHER DEALINGS IN THE SOFTWARE.
22 * The above copyright notice and this permission notice (including the
23 * next paragraph) shall be included in all copies or substantial portions
28 ************************************************************************************************************************
30 * @brief Contgfx9ns the Gfx9Lib class definition.
31 ************************************************************************************************************************
34 #ifndef __GFX9_ADDR_LIB_H__
35 #define __GFX9_ADDR_LIB_H__
46 ************************************************************************************************************************
47 * @brief GFX9 specific settings structure.
48 ************************************************************************************************************************
50 struct Gfx9ChipSettings
54 // Asic/Generation name
55 UINT_32 isArcticIsland
: 1;
60 UINT_32 reserved0
: 27;
62 // Display engine IP version name
66 // Misc configuration bits
67 UINT_32 metaBaseAlignFix
: 1;
68 UINT_32 depthPipeXorDisable
: 1;
69 UINT_32 htileAlignFix
: 1;
70 UINT_32 applyAliasFix
: 1;
71 UINT_32 htileCacheRbConflict
: 1;
72 UINT_32 reserved2
: 27;
77 ************************************************************************************************************************
78 * @brief GFX9 data surface type.
79 ************************************************************************************************************************
88 const UINT_32 Gfx9LinearSwModeMask
= (1u << ADDR_SW_LINEAR
);
90 const UINT_32 Gfx9Blk256BSwModeMask
= (1u << ADDR_SW_256B_S
) |
91 (1u << ADDR_SW_256B_D
) |
92 (1u << ADDR_SW_256B_R
);
94 const UINT_32 Gfx9Blk4KBSwModeMask
= (1u << ADDR_SW_4KB_Z
) |
95 (1u << ADDR_SW_4KB_S
) |
96 (1u << ADDR_SW_4KB_D
) |
97 (1u << ADDR_SW_4KB_R
) |
98 (1u << ADDR_SW_4KB_Z_X
) |
99 (1u << ADDR_SW_4KB_S_X
) |
100 (1u << ADDR_SW_4KB_D_X
) |
101 (1u << ADDR_SW_4KB_R_X
);
103 const UINT_32 Gfx9Blk64KBSwModeMask
= (1u << ADDR_SW_64KB_Z
) |
104 (1u << ADDR_SW_64KB_S
) |
105 (1u << ADDR_SW_64KB_D
) |
106 (1u << ADDR_SW_64KB_R
) |
107 (1u << ADDR_SW_64KB_Z_T
) |
108 (1u << ADDR_SW_64KB_S_T
) |
109 (1u << ADDR_SW_64KB_D_T
) |
110 (1u << ADDR_SW_64KB_R_T
) |
111 (1u << ADDR_SW_64KB_Z_X
) |
112 (1u << ADDR_SW_64KB_S_X
) |
113 (1u << ADDR_SW_64KB_D_X
) |
114 (1u << ADDR_SW_64KB_R_X
);
116 const UINT_32 Gfx9BlkVarSwModeMask
= (1u << ADDR_SW_VAR_Z
) |
117 (1u << ADDR_SW_VAR_S
) |
118 (1u << ADDR_SW_VAR_D
) |
119 (1u << ADDR_SW_VAR_R
) |
120 (1u << ADDR_SW_VAR_Z_X
) |
121 (1u << ADDR_SW_VAR_S_X
) |
122 (1u << ADDR_SW_VAR_D_X
) |
123 (1u << ADDR_SW_VAR_R_X
);
125 const UINT_32 Gfx9ZSwModeMask
= (1u << ADDR_SW_4KB_Z
) |
126 (1u << ADDR_SW_64KB_Z
) |
127 (1u << ADDR_SW_VAR_Z
) |
128 (1u << ADDR_SW_64KB_Z_T
) |
129 (1u << ADDR_SW_4KB_Z_X
) |
130 (1u << ADDR_SW_64KB_Z_X
) |
131 (1u << ADDR_SW_VAR_Z_X
);
133 const UINT_32 Gfx9StandardSwModeMask
= (1u << ADDR_SW_256B_S
) |
134 (1u << ADDR_SW_4KB_S
) |
135 (1u << ADDR_SW_64KB_S
) |
136 (1u << ADDR_SW_VAR_S
) |
137 (1u << ADDR_SW_64KB_S_T
) |
138 (1u << ADDR_SW_4KB_S_X
) |
139 (1u << ADDR_SW_64KB_S_X
) |
140 (1u << ADDR_SW_VAR_S_X
);
142 const UINT_32 Gfx9DisplaySwModeMask
= (1u << ADDR_SW_256B_D
) |
143 (1u << ADDR_SW_4KB_D
) |
144 (1u << ADDR_SW_64KB_D
) |
145 (1u << ADDR_SW_VAR_D
) |
146 (1u << ADDR_SW_64KB_D_T
) |
147 (1u << ADDR_SW_4KB_D_X
) |
148 (1u << ADDR_SW_64KB_D_X
) |
149 (1u << ADDR_SW_VAR_D_X
);
151 const UINT_32 Gfx9RotateSwModeMask
= (1u << ADDR_SW_256B_R
) |
152 (1u << ADDR_SW_4KB_R
) |
153 (1u << ADDR_SW_64KB_R
) |
154 (1u << ADDR_SW_VAR_R
) |
155 (1u << ADDR_SW_64KB_R_T
) |
156 (1u << ADDR_SW_4KB_R_X
) |
157 (1u << ADDR_SW_64KB_R_X
) |
158 (1u << ADDR_SW_VAR_R_X
);
160 const UINT_32 Gfx9XSwModeMask
= (1u << ADDR_SW_4KB_Z_X
) |
161 (1u << ADDR_SW_4KB_S_X
) |
162 (1u << ADDR_SW_4KB_D_X
) |
163 (1u << ADDR_SW_4KB_R_X
) |
164 (1u << ADDR_SW_64KB_Z_X
) |
165 (1u << ADDR_SW_64KB_S_X
) |
166 (1u << ADDR_SW_64KB_D_X
) |
167 (1u << ADDR_SW_64KB_R_X
) |
168 (1u << ADDR_SW_VAR_Z_X
) |
169 (1u << ADDR_SW_VAR_S_X
) |
170 (1u << ADDR_SW_VAR_D_X
) |
171 (1u << ADDR_SW_VAR_R_X
);
173 const UINT_32 Gfx9TSwModeMask
= (1u << ADDR_SW_64KB_Z_T
) |
174 (1u << ADDR_SW_64KB_S_T
) |
175 (1u << ADDR_SW_64KB_D_T
) |
176 (1u << ADDR_SW_64KB_R_T
);
178 const UINT_32 Gfx9XorSwModeMask
= Gfx9XSwModeMask
|
181 const UINT_32 Gfx9AllSwModeMask
= Gfx9LinearSwModeMask
|
183 Gfx9StandardSwModeMask
|
184 Gfx9DisplaySwModeMask
|
185 Gfx9RotateSwModeMask
;
187 const UINT_32 Gfx9Rsrc1dSwModeMask
= Gfx9LinearSwModeMask
;
189 const UINT_32 Gfx9Rsrc2dSwModeMask
= Gfx9AllSwModeMask
;
191 const UINT_32 Gfx9Rsrc3dSwModeMask
= Gfx9AllSwModeMask
& ~Gfx9Blk256BSwModeMask
& ~Gfx9RotateSwModeMask
;
193 const UINT_32 Gfx9Rsrc2dPrtSwModeMask
= (Gfx9Blk4KBSwModeMask
| Gfx9Blk64KBSwModeMask
) & ~Gfx9XSwModeMask
;
195 const UINT_32 Gfx9Rsrc3dPrtSwModeMask
= Gfx9Rsrc2dPrtSwModeMask
& ~Gfx9RotateSwModeMask
& ~Gfx9DisplaySwModeMask
;
197 const UINT_32 Gfx9Rsrc3dThinSwModeMask
= Gfx9DisplaySwModeMask
& ~Gfx9Blk256BSwModeMask
;
199 const UINT_32 Gfx9MsaaSwModeMask
= Gfx9AllSwModeMask
& ~Gfx9Blk256BSwModeMask
& ~Gfx9LinearSwModeMask
;
201 const UINT_32 Dce12NonBpp32SwModeMask
= (1u << ADDR_SW_LINEAR
) |
202 (1u << ADDR_SW_4KB_D
) |
203 (1u << ADDR_SW_4KB_R
) |
204 (1u << ADDR_SW_64KB_D
) |
205 (1u << ADDR_SW_64KB_R
) |
206 (1u << ADDR_SW_VAR_D
) |
207 (1u << ADDR_SW_VAR_R
) |
208 (1u << ADDR_SW_4KB_D_X
) |
209 (1u << ADDR_SW_4KB_R_X
) |
210 (1u << ADDR_SW_64KB_D_X
) |
211 (1u << ADDR_SW_64KB_R_X
) |
212 (1u << ADDR_SW_VAR_D_X
) |
213 (1u << ADDR_SW_VAR_R_X
);
215 const UINT_32 Dce12Bpp32SwModeMask
= (1u << ADDR_SW_256B_D
) |
216 (1u << ADDR_SW_256B_R
) |
217 Dce12NonBpp32SwModeMask
;
219 const UINT_32 Dcn1NonBpp64SwModeMask
= (1u << ADDR_SW_LINEAR
) |
220 (1u << ADDR_SW_4KB_S
) |
221 (1u << ADDR_SW_64KB_S
) |
222 (1u << ADDR_SW_VAR_S
) |
223 (1u << ADDR_SW_64KB_S_T
) |
224 (1u << ADDR_SW_4KB_S_X
) |
225 (1u << ADDR_SW_64KB_S_X
) |
226 (1u << ADDR_SW_VAR_S_X
);
228 const UINT_32 Dcn1Bpp64SwModeMask
= (1u << ADDR_SW_4KB_D
) |
229 (1u << ADDR_SW_64KB_D
) |
230 (1u << ADDR_SW_VAR_D
) |
231 (1u << ADDR_SW_64KB_D_T
) |
232 (1u << ADDR_SW_4KB_D_X
) |
233 (1u << ADDR_SW_64KB_D_X
) |
234 (1u << ADDR_SW_VAR_D_X
) |
235 Dcn1NonBpp64SwModeMask
;
238 ************************************************************************************************************************
239 * @brief GFX9 meta equation parameters
240 ************************************************************************************************************************
245 UINT_32 elementBytesLog2
;
246 UINT_32 numSamplesLog2
;
247 ADDR2_META_FLAGS metaFlag
;
248 Gfx9DataType dataSurfaceType
;
249 AddrSwizzleMode swizzleMode
;
250 AddrResourceType resourceType
;
251 UINT_32 metaBlkWidthLog2
;
252 UINT_32 metaBlkHeightLog2
;
253 UINT_32 metaBlkDepthLog2
;
254 UINT_32 compBlkWidthLog2
;
255 UINT_32 compBlkHeightLog2
;
256 UINT_32 compBlkDepthLog2
;
260 ************************************************************************************************************************
261 * @brief This class is the GFX9 specific address library
263 ************************************************************************************************************************
265 class Gfx9Lib
: public Lib
268 /// Creates Gfx9Lib object
269 static Addr::Lib
* CreateObj(const Client
* pClient
)
271 VOID
* pMem
= Object::ClientAlloc(sizeof(Gfx9Lib
), pClient
);
272 return (pMem
!= NULL
) ? new (pMem
) Gfx9Lib(pClient
) : NULL
;
275 virtual BOOL_32
IsValidDisplaySwizzleMode(
276 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const;
279 Gfx9Lib(const Client
* pClient
);
282 virtual BOOL_32
HwlIsStandardSwizzle(
283 AddrResourceType resourceType
,
284 AddrSwizzleMode swizzleMode
) const
286 return m_swizzleModeTable
[swizzleMode
].isStd
||
287 (IsTex3d(resourceType
) && m_swizzleModeTable
[swizzleMode
].isDisp
);
290 virtual BOOL_32
HwlIsDisplaySwizzle(
291 AddrResourceType resourceType
,
292 AddrSwizzleMode swizzleMode
) const
294 return IsTex2d(resourceType
) && m_swizzleModeTable
[swizzleMode
].isDisp
;
297 virtual BOOL_32
HwlIsThin(
298 AddrResourceType resourceType
,
299 AddrSwizzleMode swizzleMode
) const
301 return ((IsTex2d(resourceType
) == TRUE
) ||
302 ((IsTex3d(resourceType
) == TRUE
) &&
303 (m_swizzleModeTable
[swizzleMode
].isZ
== FALSE
) &&
304 (m_swizzleModeTable
[swizzleMode
].isStd
== FALSE
)));
307 virtual BOOL_32
HwlIsThick(
308 AddrResourceType resourceType
,
309 AddrSwizzleMode swizzleMode
) const
311 return (IsTex3d(resourceType
) &&
312 (m_swizzleModeTable
[swizzleMode
].isZ
|| m_swizzleModeTable
[swizzleMode
].isStd
));
315 virtual ADDR_E_RETURNCODE
HwlComputeHtileInfo(
316 const ADDR2_COMPUTE_HTILE_INFO_INPUT
* pIn
,
317 ADDR2_COMPUTE_HTILE_INFO_OUTPUT
* pOut
) const;
319 virtual ADDR_E_RETURNCODE
HwlComputeCmaskInfo(
320 const ADDR2_COMPUTE_CMASK_INFO_INPUT
* pIn
,
321 ADDR2_COMPUTE_CMASK_INFO_OUTPUT
* pOut
) const;
323 virtual ADDR_E_RETURNCODE
HwlComputeDccInfo(
324 const ADDR2_COMPUTE_DCCINFO_INPUT
* pIn
,
325 ADDR2_COMPUTE_DCCINFO_OUTPUT
* pOut
) const;
327 virtual ADDR_E_RETURNCODE
HwlComputeCmaskAddrFromCoord(
328 const ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
* pIn
,
329 ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
* pOut
);
331 virtual ADDR_E_RETURNCODE
HwlComputeHtileAddrFromCoord(
332 const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
* pIn
,
333 ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
* pOut
);
335 virtual ADDR_E_RETURNCODE
HwlComputeHtileCoordFromAddr(
336 const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT
* pIn
,
337 ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
* pOut
);
339 virtual ADDR_E_RETURNCODE
HwlComputeDccAddrFromCoord(
340 const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT
* pIn
,
341 ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT
* pOut
);
343 virtual UINT_32
HwlGetEquationIndex(
344 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
345 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
347 virtual ADDR_E_RETURNCODE
HwlComputeBlock256Equation(
348 AddrResourceType rsrcType
,
349 AddrSwizzleMode swMode
,
350 UINT_32 elementBytesLog2
,
351 ADDR_EQUATION
* pEquation
) const;
353 virtual ADDR_E_RETURNCODE
HwlComputeThinEquation(
354 AddrResourceType rsrcType
,
355 AddrSwizzleMode swMode
,
356 UINT_32 elementBytesLog2
,
357 ADDR_EQUATION
* pEquation
) const;
359 virtual ADDR_E_RETURNCODE
HwlComputeThickEquation(
360 AddrResourceType rsrcType
,
361 AddrSwizzleMode swMode
,
362 UINT_32 elementBytesLog2
,
363 ADDR_EQUATION
* pEquation
) const;
365 // Get equation table pointer and number of equations
366 virtual UINT_32
HwlGetEquationTableInfo(const ADDR_EQUATION
** ppEquationTable
) const
368 *ppEquationTable
= m_equationTable
;
370 return m_numEquations
;
373 virtual BOOL_32
IsEquationSupported(
374 AddrResourceType rsrcType
,
375 AddrSwizzleMode swMode
,
376 UINT_32 elementBytesLog2
) const;
378 UINT_32
ComputeSurfaceBaseAlignTiled(AddrSwizzleMode swizzleMode
) const
382 if (IsXor(swizzleMode
))
384 baseAlign
= GetBlockSize(swizzleMode
);
394 virtual ADDR_E_RETURNCODE
HwlComputePipeBankXor(
395 const ADDR2_COMPUTE_PIPEBANKXOR_INPUT
* pIn
,
396 ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT
* pOut
) const;
398 virtual ADDR_E_RETURNCODE
HwlComputeSlicePipeBankXor(
399 const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT
* pIn
,
400 ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT
* pOut
) const;
402 virtual ADDR_E_RETURNCODE
HwlComputeSubResourceOffsetForSwizzlePattern(
403 const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT
* pIn
,
404 ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT
* pOut
) const;
406 virtual ADDR_E_RETURNCODE
HwlGetPreferredSurfaceSetting(
407 const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT
* pIn
,
408 ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT
* pOut
) const;
410 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfoSanityCheck(
411 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const;
413 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfoTiled(
414 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
415 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
417 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfoLinear(
418 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
419 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
421 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceAddrFromCoordTiled(
422 const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
,
423 ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
425 // Initialize equation table
426 VOID
InitEquationTable();
428 ADDR_E_RETURNCODE
ComputeStereoInfo(
429 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
430 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
,
431 UINT_32
* pHeightAlign
) const;
433 UINT_32
GetMipChainInfo(
434 AddrResourceType resourceType
,
435 AddrSwizzleMode swizzleMode
,
444 ADDR2_MIP_INFO
* pMipInfo
) const;
446 VOID
GetMetaMiptailInfo(
447 ADDR2_META_MIP_INFO
* pInfo
,
449 UINT_32 numMipInTail
,
450 Dim3d
* pMetaBlkDim
) const;
452 Dim3d
GetMipStartPos(
453 AddrResourceType resourceType
,
454 AddrSwizzleMode swizzleMode
,
462 UINT_32 log2ElementBytes
,
463 UINT_32
* pMipTailBytesOffset
) const;
465 AddrMajorMode
GetMajorMode(
466 AddrResourceType resourceType
,
467 AddrSwizzleMode swizzleMode
,
468 UINT_32 mip0WidthInBlk
,
469 UINT_32 mip0HeightInBlk
,
470 UINT_32 mip0DepthInBlk
) const
472 BOOL_32 yMajor
= (mip0WidthInBlk
< mip0HeightInBlk
);
473 BOOL_32 xMajor
= (yMajor
== FALSE
);
475 if (IsThick(resourceType
, swizzleMode
))
477 yMajor
= yMajor
&& (mip0HeightInBlk
>= mip0DepthInBlk
);
478 xMajor
= xMajor
&& (mip0WidthInBlk
>= mip0DepthInBlk
);
481 AddrMajorMode majorMode
;
484 majorMode
= ADDR_MAJOR_X
;
488 majorMode
= ADDR_MAJOR_Y
;
492 majorMode
= ADDR_MAJOR_Z
;
498 Dim3d
GetDccCompressBlk(
499 AddrResourceType resourceType
,
500 AddrSwizzleMode swizzleMode
,
503 UINT_32 index
= Log2(bpp
>> 3);
504 Dim3d compressBlkDim
;
506 if (IsThin(resourceType
, swizzleMode
))
508 compressBlkDim
.w
= Block256_2d
[index
].w
;
509 compressBlkDim
.h
= Block256_2d
[index
].h
;
510 compressBlkDim
.d
= 1;
512 else if (IsStandardSwizzle(resourceType
, swizzleMode
))
514 compressBlkDim
= Block256_3dS
[index
];
518 compressBlkDim
= Block256_3dZ
[index
];
521 return compressBlkDim
;
524 static const UINT_32 MaxSeLog2
= 3;
525 static const UINT_32 MaxRbPerSeLog2
= 2;
527 static const Dim3d Block256_3dS
[MaxNumOfBpp
];
528 static const Dim3d Block256_3dZ
[MaxNumOfBpp
];
530 static const UINT_32 MipTailOffset256B
[];
532 static const SwizzleModeFlags SwizzleModeTable
[ADDR_SW_MAX_TYPE
];
534 // Max number of swizzle mode supported for equation
535 static const UINT_32 MaxSwMode
= 32;
536 // Max number of resource type (2D/3D) supported for equation
537 static const UINT_32 MaxRsrcType
= 2;
538 // Max number of bpp (8bpp/16bpp/32bpp/64bpp/128bpp)
539 static const UINT_32 MaxElementBytesLog2
= 5;
540 // Almost all swizzle mode + resource type support equation
541 static const UINT_32 EquationTableSize
= MaxElementBytesLog2
* MaxSwMode
* MaxRsrcType
;
543 ADDR_EQUATION m_equationTable
[EquationTableSize
];
545 // Number of equation entries in the table
546 UINT_32 m_numEquations
;
547 // Equation lookup table according to bpp and tile index
548 UINT_32 m_equationLookupTable
[MaxRsrcType
][MaxSwMode
][MaxElementBytesLog2
];
550 static const UINT_32 MaxCachedMetaEq
= 2;
553 virtual UINT_32
HwlComputeMaxBaseAlignments() const;
555 virtual UINT_32
HwlComputeMaxMetaBaseAlignments() const;
557 virtual BOOL_32
HwlInitGlobalParams(const ADDR_CREATE_INPUT
* pCreateIn
);
559 VOID
GetRbEquation(CoordEq
* pRbEq
, UINT_32 rbPerSeLog2
, UINT_32 seLog2
) const;
561 VOID
GetDataEquation(CoordEq
* pDataEq
, Gfx9DataType dataSurfaceType
,
562 AddrSwizzleMode swizzleMode
, AddrResourceType resourceType
,
563 UINT_32 elementBytesLog2
, UINT_32 numSamplesLog2
) const;
565 VOID
GetPipeEquation(CoordEq
* pPipeEq
, CoordEq
* pDataEq
,
566 UINT_32 pipeInterleaveLog2
, UINT_32 numPipesLog2
,
567 UINT_32 numSamplesLog2
, Gfx9DataType dataSurfaceType
,
568 AddrSwizzleMode swizzleMode
, AddrResourceType resourceType
) const;
570 VOID
GenMetaEquation(CoordEq
* pMetaEq
, UINT_32 maxMip
,
571 UINT_32 elementBytesLog2
, UINT_32 numSamplesLog2
,
572 ADDR2_META_FLAGS metaFlag
, Gfx9DataType dataSurfaceType
,
573 AddrSwizzleMode swizzleMode
, AddrResourceType resourceType
,
574 UINT_32 metaBlkWidthLog2
, UINT_32 metaBlkHeightLog2
,
575 UINT_32 metaBlkDepthLog2
, UINT_32 compBlkWidthLog2
,
576 UINT_32 compBlkHeightLog2
, UINT_32 compBlkDepthLog2
) const;
578 const CoordEq
* GetMetaEquation(const MetaEqParams
& metaEqParams
);
580 virtual ChipFamily
HwlConvertChipFamily(UINT_32 uChipFamily
, UINT_32 uChipRevision
);
582 VOID
GetMetaMipInfo(UINT_32 numMipLevels
, Dim3d
* pMetaBlkDim
,
583 BOOL_32 dataThick
, ADDR2_META_MIP_INFO
* pInfo
,
584 UINT_32 mip0Width
, UINT_32 mip0Height
, UINT_32 mip0Depth
,
585 UINT_32
* pNumMetaBlkX
, UINT_32
* pNumMetaBlkY
, UINT_32
* pNumMetaBlkZ
) const;
587 ADDR_E_RETURNCODE
ComputeSurfaceLinearPadding(
588 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
589 UINT_32
* pMipmap0PaddedWidth
,
590 UINT_32
* pSlice0PaddedHeight
,
591 ADDR2_MIP_INFO
* pMipInfo
= NULL
) const;
593 static ADDR2_BLOCK_SET
GetAllowedBlockSet(ADDR2_SWMODE_SET allowedSwModeSet
)
595 ADDR2_BLOCK_SET allowedBlockSet
= {};
597 allowedBlockSet
.micro
= (allowedSwModeSet
.value
& Gfx9Blk256BSwModeMask
) ? TRUE
: FALSE
;
598 allowedBlockSet
.macro4KB
= (allowedSwModeSet
.value
& Gfx9Blk4KBSwModeMask
) ? TRUE
: FALSE
;
599 allowedBlockSet
.macro64KB
= (allowedSwModeSet
.value
& Gfx9Blk64KBSwModeMask
) ? TRUE
: FALSE
;
600 allowedBlockSet
.var
= (allowedSwModeSet
.value
& Gfx9BlkVarSwModeMask
) ? TRUE
: FALSE
;
601 allowedBlockSet
.linear
= (allowedSwModeSet
.value
& Gfx9LinearSwModeMask
) ? TRUE
: FALSE
;
603 return allowedBlockSet
;
606 static ADDR2_SWTYPE_SET
GetAllowedSwSet(ADDR2_SWMODE_SET allowedSwModeSet
)
608 ADDR2_SWTYPE_SET allowedSwSet
= {};
610 allowedSwSet
.sw_Z
= (allowedSwModeSet
.value
& Gfx9ZSwModeMask
) ? TRUE
: FALSE
;
611 allowedSwSet
.sw_S
= (allowedSwModeSet
.value
& Gfx9StandardSwModeMask
) ? TRUE
: FALSE
;
612 allowedSwSet
.sw_D
= (allowedSwModeSet
.value
& Gfx9DisplaySwModeMask
) ? TRUE
: FALSE
;
613 allowedSwSet
.sw_R
= (allowedSwModeSet
.value
& Gfx9RotateSwModeMask
) ? TRUE
: FALSE
;
618 Gfx9ChipSettings m_settings
;
620 CoordEq m_cachedMetaEq
[MaxCachedMetaEq
];
621 MetaEqParams m_cachedMetaEqKey
[MaxCachedMetaEq
];
622 UINT_32 m_metaEqOverrideIndex
;