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