2
************************************************************************************************************************
4
* Copyright (C) 2007-2022 Advanced Micro Devices, Inc. All rights reserved.
6
* Permission is hereby granted, free of charge, to any person obtaining a
7
* copy of this software and associated documentation files (the "Software"),
8
* to deal in the Software without restriction, including without limitation
9
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
* and/or sell copies of the Software, and to permit persons to whom the
11
* Software is furnished to do so, subject to the following conditions:
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
* OTHER DEALINGS IN THE SOFTWARE
24
***********************************************************************************************************************/
27
************************************************************************************************************************
28
* @file gfx10addrlib.h
29
* @brief Contains the Gfx10Lib class definition.
30
************************************************************************************************************************
33
#ifndef __GFX10_ADDR_LIB_H__
34
#define __GFX10_ADDR_LIB_H__
38
#include "gfx10SwizzlePattern.h"
46
************************************************************************************************************************
47
* @brief GFX10 specific settings structure.
48
************************************************************************************************************************
50
struct Gfx10ChipSettings
54
UINT_32 reserved1 : 32;
56
// Misc configuration bits
57
UINT_32 isDcn20 : 1; // If using DCN2.0
58
UINT_32 supportRbPlus : 1;
59
UINT_32 dsMipmapHtileFix : 1;
60
UINT_32 dccUnsup3DSwDis : 1;
62
UINT_32 reserved2 : 26;
67
************************************************************************************************************************
68
* @brief GFX10 data surface type.
69
************************************************************************************************************************
74
Gfx10DataDepthStencil,
78
const UINT_32 Gfx10LinearSwModeMask = (1u << ADDR_SW_LINEAR);
80
const UINT_32 Gfx10Blk256BSwModeMask = (1u << ADDR_SW_256B_S) |
81
(1u << ADDR_SW_256B_D);
83
const UINT_32 Gfx10Blk4KBSwModeMask = (1u << ADDR_SW_4KB_S) |
84
(1u << ADDR_SW_4KB_D) |
85
(1u << ADDR_SW_4KB_S_X) |
86
(1u << ADDR_SW_4KB_D_X);
88
const UINT_32 Gfx10Blk64KBSwModeMask = (1u << ADDR_SW_64KB_S) |
89
(1u << ADDR_SW_64KB_D) |
90
(1u << ADDR_SW_64KB_S_T) |
91
(1u << ADDR_SW_64KB_D_T) |
92
(1u << ADDR_SW_64KB_Z_X) |
93
(1u << ADDR_SW_64KB_S_X) |
94
(1u << ADDR_SW_64KB_D_X) |
95
(1u << ADDR_SW_64KB_R_X);
97
const UINT_32 Gfx10BlkVarSwModeMask = (1u << ADDR_SW_VAR_Z_X) |
98
(1u << ADDR_SW_VAR_R_X);
100
const UINT_32 Gfx10ZSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
101
(1u << ADDR_SW_VAR_Z_X);
103
const UINT_32 Gfx10StandardSwModeMask = (1u << ADDR_SW_256B_S) |
104
(1u << ADDR_SW_4KB_S) |
105
(1u << ADDR_SW_64KB_S) |
106
(1u << ADDR_SW_64KB_S_T) |
107
(1u << ADDR_SW_4KB_S_X) |
108
(1u << ADDR_SW_64KB_S_X);
110
const UINT_32 Gfx10DisplaySwModeMask = (1u << ADDR_SW_256B_D) |
111
(1u << ADDR_SW_4KB_D) |
112
(1u << ADDR_SW_64KB_D) |
113
(1u << ADDR_SW_64KB_D_T) |
114
(1u << ADDR_SW_4KB_D_X) |
115
(1u << ADDR_SW_64KB_D_X);
117
const UINT_32 Gfx10RenderSwModeMask = (1u << ADDR_SW_64KB_R_X) |
118
(1u << ADDR_SW_VAR_R_X);
120
const UINT_32 Gfx10XSwModeMask = (1u << ADDR_SW_4KB_S_X) |
121
(1u << ADDR_SW_4KB_D_X) |
122
(1u << ADDR_SW_64KB_Z_X) |
123
(1u << ADDR_SW_64KB_S_X) |
124
(1u << ADDR_SW_64KB_D_X) |
125
(1u << ADDR_SW_64KB_R_X) |
126
Gfx10BlkVarSwModeMask;
128
const UINT_32 Gfx10TSwModeMask = (1u << ADDR_SW_64KB_S_T) |
129
(1u << ADDR_SW_64KB_D_T);
131
const UINT_32 Gfx10XorSwModeMask = Gfx10XSwModeMask |
134
const UINT_32 Gfx10Rsrc1dSwModeMask = Gfx10LinearSwModeMask |
135
Gfx10RenderSwModeMask |
138
const UINT_32 Gfx10Rsrc2dSwModeMask = Gfx10LinearSwModeMask |
139
Gfx10Blk256BSwModeMask |
140
Gfx10Blk4KBSwModeMask |
141
Gfx10Blk64KBSwModeMask |
142
Gfx10BlkVarSwModeMask;
144
const UINT_32 Gfx10Rsrc3dSwModeMask = (1u << ADDR_SW_LINEAR) |
145
(1u << ADDR_SW_4KB_S) |
146
(1u << ADDR_SW_64KB_S) |
147
(1u << ADDR_SW_64KB_S_T) |
148
(1u << ADDR_SW_4KB_S_X) |
149
(1u << ADDR_SW_64KB_Z_X) |
150
(1u << ADDR_SW_64KB_S_X) |
151
(1u << ADDR_SW_64KB_D_X) |
152
(1u << ADDR_SW_64KB_R_X) |
153
Gfx10BlkVarSwModeMask;
155
const UINT_32 Gfx10Rsrc2dPrtSwModeMask = (Gfx10Blk4KBSwModeMask | Gfx10Blk64KBSwModeMask) & ~Gfx10XSwModeMask;
157
const UINT_32 Gfx10Rsrc3dPrtSwModeMask = Gfx10Rsrc2dPrtSwModeMask & ~Gfx10DisplaySwModeMask;
159
const UINT_32 Gfx10Rsrc3dThin64KBSwModeMask = (1u << ADDR_SW_64KB_Z_X) |
160
(1u << ADDR_SW_64KB_R_X);
162
const UINT_32 Gfx10Rsrc3dThinSwModeMask = Gfx10Rsrc3dThin64KBSwModeMask | Gfx10BlkVarSwModeMask;
164
const UINT_32 Gfx10Rsrc3dThickSwModeMask = Gfx10Rsrc3dSwModeMask & ~(Gfx10Rsrc3dThinSwModeMask | Gfx10LinearSwModeMask);
166
const UINT_32 Gfx10Rsrc3dThick4KBSwModeMask = Gfx10Rsrc3dThickSwModeMask & Gfx10Blk4KBSwModeMask;
168
const UINT_32 Gfx10Rsrc3dThick64KBSwModeMask = Gfx10Rsrc3dThickSwModeMask & Gfx10Blk64KBSwModeMask;
170
const UINT_32 Gfx10MsaaSwModeMask = Gfx10ZSwModeMask |
171
Gfx10RenderSwModeMask;
173
const UINT_32 Dcn20NonBpp64SwModeMask = (1u << ADDR_SW_LINEAR) |
174
(1u << ADDR_SW_4KB_S) |
175
(1u << ADDR_SW_64KB_S) |
176
(1u << ADDR_SW_64KB_S_T) |
177
(1u << ADDR_SW_4KB_S_X) |
178
(1u << ADDR_SW_64KB_S_X) |
179
(1u << ADDR_SW_64KB_R_X);
181
const UINT_32 Dcn20Bpp64SwModeMask = (1u << ADDR_SW_4KB_D) |
182
(1u << ADDR_SW_64KB_D) |
183
(1u << ADDR_SW_64KB_D_T) |
184
(1u << ADDR_SW_4KB_D_X) |
185
(1u << ADDR_SW_64KB_D_X) |
186
Dcn20NonBpp64SwModeMask;
188
const UINT_32 Dcn21NonBpp64SwModeMask = (1u << ADDR_SW_LINEAR) |
189
(1u << ADDR_SW_64KB_S) |
190
(1u << ADDR_SW_64KB_S_T) |
191
(1u << ADDR_SW_64KB_S_X) |
192
(1u << ADDR_SW_64KB_R_X);
194
const UINT_32 Dcn21Bpp64SwModeMask = (1u << ADDR_SW_64KB_D) |
195
(1u << ADDR_SW_64KB_D_T) |
196
(1u << ADDR_SW_64KB_D_X) |
197
Dcn21NonBpp64SwModeMask;
200
************************************************************************************************************************
201
* @brief This class is the GFX10 specific address library
203
************************************************************************************************************************
205
class Gfx10Lib : public Lib
208
/// Creates Gfx10Lib object
209
static Addr::Lib* CreateObj(const Client* pClient)
211
VOID* pMem = Object::ClientAlloc(sizeof(Gfx10Lib), pClient);
212
return (pMem != NULL) ? new (pMem) Gfx10Lib(pClient) : NULL;
216
Gfx10Lib(const Client* pClient);
219
virtual BOOL_32 HwlIsStandardSwizzle(
220
AddrResourceType resourceType,
221
AddrSwizzleMode swizzleMode) const
223
return m_swizzleModeTable[swizzleMode].isStd;
226
virtual BOOL_32 HwlIsDisplaySwizzle(
227
AddrResourceType resourceType,
228
AddrSwizzleMode swizzleMode) const
230
return m_swizzleModeTable[swizzleMode].isDisp;
233
virtual BOOL_32 HwlIsThin(
234
AddrResourceType resourceType,
235
AddrSwizzleMode swizzleMode) const
237
return ((IsTex1d(resourceType) == TRUE) ||
238
(IsTex2d(resourceType) == TRUE) ||
239
((IsTex3d(resourceType) == TRUE) &&
240
(m_swizzleModeTable[swizzleMode].isStd == FALSE) &&
241
(m_swizzleModeTable[swizzleMode].isDisp == FALSE)));
244
virtual BOOL_32 HwlIsThick(
245
AddrResourceType resourceType,
246
AddrSwizzleMode swizzleMode) const
248
return ((IsTex3d(resourceType) == TRUE) &&
249
(m_swizzleModeTable[swizzleMode].isStd || m_swizzleModeTable[swizzleMode].isDisp));
252
virtual ADDR_E_RETURNCODE HwlComputeHtileInfo(
253
const ADDR2_COMPUTE_HTILE_INFO_INPUT* pIn,
254
ADDR2_COMPUTE_HTILE_INFO_OUTPUT* pOut) const;
256
virtual ADDR_E_RETURNCODE HwlComputeCmaskInfo(
257
const ADDR2_COMPUTE_CMASK_INFO_INPUT* pIn,
258
ADDR2_COMPUTE_CMASK_INFO_OUTPUT* pOut) const;
260
virtual ADDR_E_RETURNCODE HwlComputeDccInfo(
261
const ADDR2_COMPUTE_DCCINFO_INPUT* pIn,
262
ADDR2_COMPUTE_DCCINFO_OUTPUT* pOut) const;
264
virtual ADDR_E_RETURNCODE HwlComputeCmaskAddrFromCoord(
265
const ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_INPUT* pIn,
266
ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT* pOut);
268
virtual ADDR_E_RETURNCODE HwlComputeHtileAddrFromCoord(
269
const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn,
270
ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT* pOut);
272
virtual ADDR_E_RETURNCODE HwlComputeHtileCoordFromAddr(
273
const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT* pIn,
274
ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT* pOut);
276
virtual ADDR_E_RETURNCODE HwlSupportComputeDccAddrFromCoord(
277
const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn);
279
virtual VOID HwlComputeDccAddrFromCoord(
280
const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT* pIn,
281
ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT* pOut);
283
virtual UINT_32 HwlGetEquationIndex(
284
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
285
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
287
virtual UINT_32 HwlGetEquationTableInfo(const ADDR_EQUATION** ppEquationTable) const
289
*ppEquationTable = m_equationTable;
291
return m_numEquations;
294
virtual ADDR_E_RETURNCODE HwlComputePipeBankXor(
295
const ADDR2_COMPUTE_PIPEBANKXOR_INPUT* pIn,
296
ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT* pOut) const;
298
virtual ADDR_E_RETURNCODE HwlComputeSlicePipeBankXor(
299
const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT* pIn,
300
ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT* pOut) const;
302
virtual ADDR_E_RETURNCODE HwlComputeSubResourceOffsetForSwizzlePattern(
303
const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT* pIn,
304
ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT* pOut) const;
306
virtual ADDR_E_RETURNCODE HwlComputeNonBlockCompressedView(
307
const ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_INPUT* pIn,
308
ADDR2_COMPUTE_NONBLOCKCOMPRESSEDVIEW_OUTPUT* pOut) const;
310
virtual ADDR_E_RETURNCODE HwlGetPreferredSurfaceSetting(
311
const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
312
ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT* pOut) const;
314
virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoSanityCheck(
315
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
317
virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoTiled(
318
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
319
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
321
virtual ADDR_E_RETURNCODE HwlComputeSurfaceInfoLinear(
322
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
323
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
325
virtual ADDR_E_RETURNCODE HwlComputeSurfaceAddrFromCoordTiled(
326
const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
327
ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
329
virtual UINT_32 HwlComputeMaxBaseAlignments() const;
331
virtual UINT_32 HwlComputeMaxMetaBaseAlignments() const;
333
virtual BOOL_32 HwlInitGlobalParams(const ADDR_CREATE_INPUT* pCreateIn);
335
virtual ChipFamily HwlConvertChipFamily(UINT_32 uChipFamily, UINT_32 uChipRevision);
338
// Initialize equation table
339
VOID InitEquationTable();
341
ADDR_E_RETURNCODE ComputeSurfaceInfoMacroTiled(
342
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
343
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
345
ADDR_E_RETURNCODE ComputeSurfaceInfoMicroTiled(
346
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
347
ADDR2_COMPUTE_SURFACE_INFO_OUTPUT* pOut) const;
349
ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMacroTiled(
350
const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
351
ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
353
ADDR_E_RETURNCODE ComputeSurfaceAddrFromCoordMicroTiled(
354
const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
355
ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut) const;
357
UINT_32 ComputeOffsetFromSwizzlePattern(
358
const UINT_64* pPattern,
365
UINT_32 ComputeOffsetFromEquation(
366
const ADDR_EQUATION* pEq,
371
ADDR_E_RETURNCODE ComputeStereoInfo(
372
const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn,
374
UINT_32* pRightXor) const;
376
static void GetMipSize(
383
UINT_32* pMipDepth = NULL)
385
*pMipWidth = ShiftCeil(Max(mip0Width, 1u), mipId);
386
*pMipHeight = ShiftCeil(Max(mip0Height, 1u), mipId);
388
if (pMipDepth != NULL)
390
*pMipDepth = ShiftCeil(Max(mip0Depth, 1u), mipId);
394
const ADDR_SW_PATINFO* GetSwizzlePatternInfo(
395
AddrSwizzleMode swizzleMode,
396
AddrResourceType resourceType,
398
UINT_32 numFrag) const;
400
VOID GetSwizzlePatternFromPatternInfo(
401
const ADDR_SW_PATINFO* pPatInfo,
402
ADDR_BIT_SETTING (&pSwizzle)[20]) const
405
GFX10_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx],
406
sizeof(GFX10_SW_PATTERN_NIBBLE01[pPatInfo->nibble01Idx]));
409
GFX10_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx],
410
sizeof(GFX10_SW_PATTERN_NIBBLE2[pPatInfo->nibble2Idx]));
412
memcpy(&pSwizzle[12],
413
GFX10_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx],
414
sizeof(GFX10_SW_PATTERN_NIBBLE3[pPatInfo->nibble3Idx]));
416
memcpy(&pSwizzle[16],
417
GFX10_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx],
418
sizeof(GFX10_SW_PATTERN_NIBBLE4[pPatInfo->nibble4Idx]));
421
VOID ConvertSwizzlePatternToEquation(
423
AddrResourceType rsrcType,
424
AddrSwizzleMode swMode,
425
const ADDR_SW_PATINFO* pPatInfo,
426
ADDR_EQUATION* pEquation) const;
428
static INT_32 GetMetaElementSizeLog2(Gfx10DataType dataType);
430
static INT_32 GetMetaCacheSizeLog2(Gfx10DataType dataType);
432
void GetBlk256SizeLog2(
433
AddrResourceType resourceType,
434
AddrSwizzleMode swizzleMode,
436
UINT_32 numSamplesLog2,
437
Dim3d* pBlock) const;
439
void GetCompressedBlockSizeLog2(
440
Gfx10DataType dataType,
441
AddrResourceType resourceType,
442
AddrSwizzleMode swizzleMode,
444
UINT_32 numSamplesLog2,
445
Dim3d* pBlock) const;
447
INT_32 GetMetaOverlapLog2(
448
Gfx10DataType dataType,
449
AddrResourceType resourceType,
450
AddrSwizzleMode swizzleMode,
452
UINT_32 numSamplesLog2) const;
454
INT_32 Get3DMetaOverlapLog2(
455
AddrResourceType resourceType,
456
AddrSwizzleMode swizzleMode,
457
UINT_32 elemLog2) const;
459
UINT_32 GetMetaBlkSize(
460
Gfx10DataType dataType,
461
AddrResourceType resourceType,
462
AddrSwizzleMode swizzleMode,
464
UINT_32 numSamplesLog2,
466
Dim3d* pBlock) const;
468
INT_32 GetPipeRotateAmount(
469
AddrResourceType resourceType,
470
AddrSwizzleMode swizzleMode) const;
472
INT_32 GetEffectiveNumPipes() const
474
return ((m_settings.supportRbPlus == FALSE) ||
475
((m_numSaLog2 + 1) >= m_pipesLog2)) ? m_pipesLog2 : m_numSaLog2 + 1;
479
AddrResourceType resourceType,
480
AddrSwizzleMode swizzleMode) const
482
const BOOL_32 isRtopt = IsRtOptSwizzle(swizzleMode);
483
const BOOL_32 isZ = IsZOrderSwizzle(swizzleMode);
484
const BOOL_32 isDisplay = IsDisplaySwizzle(swizzleMode);
486
return (IsTex2d(resourceType) && (isRtopt || isZ)) ||
487
(IsTex3d(resourceType) && isDisplay);
491
UINT_32 GetValidDisplaySwizzleModes(UINT_32 bpp) const;
493
BOOL_32 IsValidDisplaySwizzleMode(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
495
UINT_32 GetMaxNumMipsInTail(UINT_32 blockSizeLog2, BOOL_32 isThin) const;
497
static ADDR2_BLOCK_SET GetAllowedBlockSet(ADDR2_SWMODE_SET allowedSwModeSet, AddrResourceType rsrcType)
499
ADDR2_BLOCK_SET allowedBlockSet = {};
501
allowedBlockSet.micro = (allowedSwModeSet.value & Gfx10Blk256BSwModeMask) ? TRUE : FALSE;
502
allowedBlockSet.linear = (allowedSwModeSet.value & Gfx10LinearSwModeMask) ? TRUE : FALSE;
503
allowedBlockSet.var = (allowedSwModeSet.value & Gfx10BlkVarSwModeMask) ? TRUE : FALSE;
505
if (rsrcType == ADDR_RSRC_TEX_3D)
507
allowedBlockSet.macroThick4KB = (allowedSwModeSet.value & Gfx10Rsrc3dThick4KBSwModeMask) ? TRUE : FALSE;
508
allowedBlockSet.macroThin64KB = (allowedSwModeSet.value & Gfx10Rsrc3dThin64KBSwModeMask) ? TRUE : FALSE;
509
allowedBlockSet.macroThick64KB = (allowedSwModeSet.value & Gfx10Rsrc3dThick64KBSwModeMask) ? TRUE : FALSE;
513
allowedBlockSet.macroThin4KB = (allowedSwModeSet.value & Gfx10Blk4KBSwModeMask) ? TRUE : FALSE;
514
allowedBlockSet.macroThin64KB = (allowedSwModeSet.value & Gfx10Blk64KBSwModeMask) ? TRUE : FALSE;
517
return allowedBlockSet;
520
static ADDR2_SWTYPE_SET GetAllowedSwSet(ADDR2_SWMODE_SET allowedSwModeSet)
522
ADDR2_SWTYPE_SET allowedSwSet = {};
524
allowedSwSet.sw_Z = (allowedSwModeSet.value & Gfx10ZSwModeMask) ? TRUE : FALSE;
525
allowedSwSet.sw_S = (allowedSwModeSet.value & Gfx10StandardSwModeMask) ? TRUE : FALSE;
526
allowedSwSet.sw_D = (allowedSwModeSet.value & Gfx10DisplaySwModeMask) ? TRUE : FALSE;
527
allowedSwSet.sw_R = (allowedSwModeSet.value & Gfx10RenderSwModeMask) ? TRUE : FALSE;
534
UINT_32 maxNumMipsInTail,
537
UINT_32 numMipsToTheEnd) const
539
BOOL_32 inTail = ((mipWidth <= mipTailDim.w) &&
540
(mipHeight <= mipTailDim.h) &&
541
(numMipsToTheEnd <= maxNumMipsInTail));
546
UINT_32 GetBankXorBits(UINT_32 blockBits) const
548
return (blockBits > m_pipeInterleaveLog2 + m_pipesLog2 + ColumnBits) ?
549
Min(blockBits - m_pipeInterleaveLog2 - m_pipesLog2 - ColumnBits, BankBits) : 0;
552
BOOL_32 ValidateNonSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
553
BOOL_32 ValidateSwModeParams(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
555
static const UINT_32 ColumnBits = 2;
556
static const UINT_32 BankBits = 4;
557
static const UINT_32 UnalignedDccType = 3;
559
static const Dim3d Block256_3d[MaxNumOfBpp];
560
static const Dim3d Block64K_Log2_3d[MaxNumOfBpp];
561
static const Dim3d Block4K_Log2_3d[MaxNumOfBpp];
563
static const SwizzleModeFlags SwizzleModeTable[ADDR_SW_MAX_TYPE];
565
// Number of packers log2
566
UINT_32 m_numPkrLog2;
567
// Number of shader array log2
570
Gfx10ChipSettings m_settings;
572
UINT_32 m_colorBaseIndex;
573
UINT_32 m_xmaskBaseIndex;
574
UINT_32 m_dccBaseIndex;