2 * Copyright © 2017 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 Contains the Addr::V2::Lib class definition.
31 ************************************************************************************************************************
34 #ifndef __ADDR2_LIB2_H__
35 #define __ADDR2_LIB2_H__
45 ************************************************************************************************************************
46 * @brief Flags for SwizzleModeTable
47 ************************************************************************************************************************
49 struct SwizzleModeFlags
52 UINT_32 isLinear
: 1; // Linear
55 UINT_32 is256b
: 1; // Block size is 256B
56 UINT_32 is4kb
: 1; // Block size is 4KB
57 UINT_32 is64kb
: 1; // Block size is 64KB
58 UINT_32 isVar
: 1; // Block size is variable
60 UINT_32 isZ
: 1; // Z order swizzle mode
61 UINT_32 isStd
: 1; // Standard swizzle mode
62 UINT_32 isDisp
: 1; // Display swizzle mode
63 UINT_32 isRot
: 1; // Rotate swizzle mode
66 UINT_32 isXor
: 1; // XOR after swizzle if set
68 UINT_32 isT
: 1; // T mode
70 UINT_32 isRtOpt
: 1; // mode opt for render target
87 ************************************************************************************************************************
88 * @brief This class contains asic independent address lib functionalities
89 ************************************************************************************************************************
91 class Lib
: public Addr::Lib
104 ADDR_E_RETURNCODE
ComputeSurfaceInfo(
105 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
106 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
108 ADDR_E_RETURNCODE
ComputeSurfaceAddrFromCoord(
109 const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
,
110 ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
112 ADDR_E_RETURNCODE
ComputeSurfaceCoordFromAddr(
113 const ADDR2_COMPUTE_SURFACE_COORDFROMADDR_INPUT
* pIn
,
114 ADDR2_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
* pOut
) const;
117 ADDR_E_RETURNCODE
ComputeHtileInfo(
118 const ADDR2_COMPUTE_HTILE_INFO_INPUT
* pIn
,
119 ADDR2_COMPUTE_HTILE_INFO_OUTPUT
* pOut
) const;
121 ADDR_E_RETURNCODE
ComputeHtileAddrFromCoord(
122 const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
* pIn
,
123 ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
125 ADDR_E_RETURNCODE
ComputeHtileCoordFromAddr(
126 const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT
* pIn
,
127 ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
* pOut
) const;
130 ADDR_E_RETURNCODE
ComputeCmaskInfo(
131 const ADDR2_COMPUTE_CMASK_INFO_INPUT
* pIn
,
132 ADDR2_COMPUTE_CMASK_INFO_OUTPUT
* pOut
) const;
134 ADDR_E_RETURNCODE
ComputeCmaskAddrFromCoord(
135 const ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
* pIn
,
136 ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
* pOut
) const;
138 ADDR_E_RETURNCODE
ComputeCmaskCoordFromAddr(
139 const ADDR2_COMPUTE_CMASK_COORDFROMADDR_INPUT
* pIn
,
140 ADDR2_COMPUTE_CMASK_COORDFROMADDR_OUTPUT
* pOut
) const;
143 ADDR_E_RETURNCODE
ComputeFmaskInfo(
144 const ADDR2_COMPUTE_FMASK_INFO_INPUT
* pIn
,
145 ADDR2_COMPUTE_FMASK_INFO_OUTPUT
* pOut
);
147 ADDR_E_RETURNCODE
ComputeFmaskAddrFromCoord(
148 const ADDR2_COMPUTE_FMASK_ADDRFROMCOORD_INPUT
* pIn
,
149 ADDR2_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT
* pOut
) const;
151 ADDR_E_RETURNCODE
ComputeFmaskCoordFromAddr(
152 const ADDR2_COMPUTE_FMASK_COORDFROMADDR_INPUT
* pIn
,
153 ADDR2_COMPUTE_FMASK_COORDFROMADDR_OUTPUT
* pOut
) const;
156 ADDR_E_RETURNCODE
ComputeDccInfo(
157 const ADDR2_COMPUTE_DCCINFO_INPUT
* pIn
,
158 ADDR2_COMPUTE_DCCINFO_OUTPUT
* pOut
) const;
160 ADDR_E_RETURNCODE
ComputeDccAddrFromCoord(
161 const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT
* pIn
,
162 ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT
* pOut
) const;
165 ADDR_E_RETURNCODE
ComputePipeBankXor(
166 const ADDR2_COMPUTE_PIPEBANKXOR_INPUT
* pIn
,
167 ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT
* pOut
);
169 ADDR_E_RETURNCODE
ComputeSlicePipeBankXor(
170 const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT
* pIn
,
171 ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT
* pOut
);
173 ADDR_E_RETURNCODE
ComputeSubResourceOffsetForSwizzlePattern(
174 const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT
* pIn
,
175 ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT
* pOut
);
177 ADDR_E_RETURNCODE
Addr2GetPreferredSurfaceSetting(
178 const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT
* pIn
,
179 ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT
* pOut
) const;
181 virtual BOOL_32
IsValidDisplaySwizzleMode(
182 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const
184 ADDR_NOT_IMPLEMENTED();
185 return ADDR_NOTIMPLEMENTED
;
189 Lib(); // Constructor is protected
190 Lib(const Client
* pClient
);
192 static const UINT_32 MaxNumOfBpp
= 5;
194 static const Dim2d Block256_2d
[MaxNumOfBpp
];
195 static const Dim3d Block1K_3d
[MaxNumOfBpp
];
197 static const UINT_32 PrtAlignment
= 64 * 1024;
198 static const UINT_32 MaxMacroBits
= 20;
200 // Checking block size
201 BOOL_32
IsBlock256b(AddrSwizzleMode swizzleMode
) const
203 return m_swizzleModeTable
[swizzleMode
].is256b
;
206 BOOL_32
IsBlock4kb(AddrSwizzleMode swizzleMode
) const
208 return m_swizzleModeTable
[swizzleMode
].is4kb
;
211 BOOL_32
IsBlock64kb(AddrSwizzleMode swizzleMode
) const
213 return m_swizzleModeTable
[swizzleMode
].is64kb
;
216 BOOL_32
IsBlockVariable(AddrSwizzleMode swizzleMode
) const
218 return m_swizzleModeTable
[swizzleMode
].isVar
;
221 // Checking swizzle mode
222 BOOL_32
IsLinear(AddrSwizzleMode swizzleMode
) const
224 return m_swizzleModeTable
[swizzleMode
].isLinear
;
227 BOOL_32
IsRtOptSwizzle(AddrSwizzleMode swizzleMode
) const
229 return m_swizzleModeTable
[swizzleMode
].isRtOpt
;
232 BOOL_32
IsZOrderSwizzle(AddrSwizzleMode swizzleMode
) const
234 return m_swizzleModeTable
[swizzleMode
].isZ
;
237 BOOL_32
IsStandardSwizzle(AddrResourceType resourceType
, AddrSwizzleMode swizzleMode
) const
239 return HwlIsStandardSwizzle(resourceType
, swizzleMode
);
242 BOOL_32
IsDisplaySwizzle(AddrResourceType resourceType
, AddrSwizzleMode swizzleMode
) const
244 return HwlIsDisplaySwizzle(resourceType
, swizzleMode
);
247 BOOL_32
IsRotateSwizzle(AddrSwizzleMode swizzleMode
) const
249 return m_swizzleModeTable
[swizzleMode
].isRot
;
252 BOOL_32
IsXor(AddrSwizzleMode swizzleMode
) const
254 return m_swizzleModeTable
[swizzleMode
].isXor
;
257 BOOL_32
IsPrt(AddrSwizzleMode swizzleMode
) const
259 return m_swizzleModeTable
[swizzleMode
].isT
;
262 BOOL_32
IsNonPrtXor(AddrSwizzleMode swizzleMode
) const
264 return (IsXor(swizzleMode
) && (IsPrt(swizzleMode
) == FALSE
));
267 // Checking resource type
268 static BOOL_32
IsTex1d(AddrResourceType resourceType
)
270 return (resourceType
== ADDR_RSRC_TEX_1D
);
273 static BOOL_32
IsTex2d(AddrResourceType resourceType
)
275 return (resourceType
== ADDR_RSRC_TEX_2D
);
278 static BOOL_32
IsTex3d(AddrResourceType resourceType
)
280 return (resourceType
== ADDR_RSRC_TEX_3D
);
283 BOOL_32
IsThick(AddrResourceType resourceType
, AddrSwizzleMode swizzleMode
) const
285 return HwlIsThick(resourceType
, swizzleMode
);
288 BOOL_32
IsThin(AddrResourceType resourceType
, AddrSwizzleMode swizzleMode
) const
290 return HwlIsThin(resourceType
, swizzleMode
);
293 UINT_32
GetBlockSizeLog2(AddrSwizzleMode swizzleMode
) const
295 UINT_32 blockSizeLog2
= 0;
297 if (IsBlock256b(swizzleMode
) || IsLinear(swizzleMode
))
301 else if (IsBlock4kb(swizzleMode
))
305 else if (IsBlock64kb(swizzleMode
))
309 else if (IsBlockVariable(swizzleMode
))
311 blockSizeLog2
= m_blockVarSizeLog2
;
315 ADDR_ASSERT_ALWAYS();
318 return blockSizeLog2
;
321 UINT_32
GetBlockSize(AddrSwizzleMode swizzleMode
) const
323 return (1 << GetBlockSizeLog2(swizzleMode
));
326 static UINT_32
GetFmaskBpp(UINT_32 sample
, UINT_32 frag
)
328 sample
= (sample
== 0) ? 1 : sample
;
329 frag
= (frag
== 0) ? sample
: frag
;
331 UINT_32 fmaskBpp
= QLog2(frag
);
343 fmaskBpp
= Max(8u, fmaskBpp
* sample
);
348 virtual BOOL_32
HwlIsStandardSwizzle(
349 AddrResourceType resourceType
,
350 AddrSwizzleMode swizzleMode
) const
352 ADDR_NOT_IMPLEMENTED();
356 virtual BOOL_32
HwlIsDisplaySwizzle(
357 AddrResourceType resourceType
,
358 AddrSwizzleMode swizzleMode
) const
360 ADDR_NOT_IMPLEMENTED();
364 virtual BOOL_32
HwlIsThin(
365 AddrResourceType resourceType
,
366 AddrSwizzleMode swizzleMode
) const
368 ADDR_NOT_IMPLEMENTED();
372 virtual BOOL_32
HwlIsThick(
373 AddrResourceType resourceType
,
374 AddrSwizzleMode swizzleMode
) const
376 ADDR_NOT_IMPLEMENTED();
380 virtual ADDR_E_RETURNCODE
HwlComputeHtileInfo(
381 const ADDR2_COMPUTE_HTILE_INFO_INPUT
* pIn
,
382 ADDR2_COMPUTE_HTILE_INFO_OUTPUT
* pOut
) const
384 ADDR_NOT_IMPLEMENTED();
385 return ADDR_NOTSUPPORTED
;
388 virtual ADDR_E_RETURNCODE
HwlComputeCmaskInfo(
389 const ADDR2_COMPUTE_CMASK_INFO_INPUT
* pIn
,
390 ADDR2_COMPUTE_CMASK_INFO_OUTPUT
* pOut
) const
392 ADDR_NOT_IMPLEMENTED();
393 return ADDR_NOTSUPPORTED
;
396 virtual ADDR_E_RETURNCODE
HwlComputeDccInfo(
397 const ADDR2_COMPUTE_DCCINFO_INPUT
* pIn
,
398 ADDR2_COMPUTE_DCCINFO_OUTPUT
* pOut
) const
400 ADDR_NOT_IMPLEMENTED();
401 return ADDR_NOTSUPPORTED
;
404 virtual ADDR_E_RETURNCODE
HwlComputeDccAddrFromCoord(
405 const ADDR2_COMPUTE_DCC_ADDRFROMCOORD_INPUT
* pIn
,
406 ADDR2_COMPUTE_DCC_ADDRFROMCOORD_OUTPUT
* pOut
) const
408 ADDR_NOT_IMPLEMENTED();
409 return ADDR_NOTSUPPORTED
;
412 virtual ADDR_E_RETURNCODE
HwlComputeCmaskAddrFromCoord(
413 const ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
* pIn
,
414 ADDR2_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
* pOut
) const
416 ADDR_NOT_IMPLEMENTED();
417 return ADDR_NOTSUPPORTED
;
420 virtual ADDR_E_RETURNCODE
HwlComputeHtileAddrFromCoord(
421 const ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
* pIn
,
422 ADDR2_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
* pOut
) const
424 ADDR_NOT_IMPLEMENTED();
425 return ADDR_NOTSUPPORTED
;
428 virtual ADDR_E_RETURNCODE
HwlComputeHtileCoordFromAddr(
429 const ADDR2_COMPUTE_HTILE_COORDFROMADDR_INPUT
* pIn
,
430 ADDR2_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
* pOut
) const
432 ADDR_NOT_IMPLEMENTED();
433 return ADDR_NOTSUPPORTED
;
436 virtual ADDR_E_RETURNCODE
HwlComputeBlock256Equation(
437 AddrResourceType rsrcType
,
438 AddrSwizzleMode swMode
,
439 UINT_32 elementBytesLog2
,
440 ADDR_EQUATION
* pEquation
) const
442 ADDR_NOT_IMPLEMENTED();
443 return ADDR_NOTSUPPORTED
;
446 virtual ADDR_E_RETURNCODE
HwlComputeThinEquation(
447 AddrResourceType rsrcType
,
448 AddrSwizzleMode swMode
,
449 UINT_32 elementBytesLog2
,
450 ADDR_EQUATION
* pEquation
) const
452 ADDR_NOT_IMPLEMENTED();
453 return ADDR_NOTSUPPORTED
;
456 virtual ADDR_E_RETURNCODE
HwlComputeThickEquation(
457 AddrResourceType rsrcType
,
458 AddrSwizzleMode swMode
,
459 UINT_32 elementBytesLog2
,
460 ADDR_EQUATION
* pEquation
) const
462 ADDR_NOT_IMPLEMENTED();
463 return ADDR_NOTSUPPORTED
;
466 virtual UINT_32
HwlGetEquationIndex(
467 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
468 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const
470 ADDR_NOT_IMPLEMENTED();
471 return ADDR_INVALID_EQUATION_INDEX
;
474 UINT_32
GetEquationIndex(
475 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
476 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const
478 return HwlGetEquationIndex(pIn
, pOut
);
481 virtual UINT_32
HwlComputeSurfaceBaseAlign(AddrSwizzleMode swizzleMode
) const
483 ADDR_NOT_IMPLEMENTED();
487 virtual ADDR_E_RETURNCODE
HwlComputePipeBankXor(
488 const ADDR2_COMPUTE_PIPEBANKXOR_INPUT
* pIn
,
489 ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT
* pOut
) const
491 ADDR_NOT_IMPLEMENTED();
492 return ADDR_NOTSUPPORTED
;
495 virtual ADDR_E_RETURNCODE
HwlComputeSlicePipeBankXor(
496 const ADDR2_COMPUTE_SLICE_PIPEBANKXOR_INPUT
* pIn
,
497 ADDR2_COMPUTE_SLICE_PIPEBANKXOR_OUTPUT
* pOut
) const
499 ADDR_NOT_IMPLEMENTED();
500 return ADDR_NOTSUPPORTED
;
504 virtual ADDR_E_RETURNCODE
HwlComputeSubResourceOffsetForSwizzlePattern(
505 const ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_INPUT
* pIn
,
506 ADDR2_COMPUTE_SUBRESOURCE_OFFSET_FORSWIZZLEPATTERN_OUTPUT
* pOut
) const
508 ADDR_NOT_IMPLEMENTED();
509 return ADDR_NOTSUPPORTED
;
512 virtual ADDR_E_RETURNCODE
HwlGetPreferredSurfaceSetting(
513 const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT
* pIn
,
514 ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT
* pOut
) const
516 ADDR_NOT_IMPLEMENTED();
517 return ADDR_NOTSUPPORTED
;
520 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfoSanityCheck(
521 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const
523 ADDR_NOT_IMPLEMENTED();
524 return ADDR_NOTSUPPORTED
;
527 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceInfoTiled(
528 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
529 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const
531 ADDR_NOT_IMPLEMENTED();
532 return ADDR_NOTIMPLEMENTED
;
535 virtual ADDR_E_RETURNCODE
HwlComputeSurfaceAddrFromCoordTiled(
536 const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
,
537 ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
* pOut
) const
539 ADDR_NOT_IMPLEMENTED();
540 return ADDR_NOTIMPLEMENTED
;
543 ADDR_E_RETURNCODE
ComputeBlock256Equation(
544 AddrResourceType rsrcType
,
545 AddrSwizzleMode swMode
,
546 UINT_32 elementBytesLog2
,
547 ADDR_EQUATION
* pEquation
) const;
549 ADDR_E_RETURNCODE
ComputeThinEquation(
550 AddrResourceType rsrcType
,
551 AddrSwizzleMode swMode
,
552 UINT_32 elementBytesLog2
,
553 ADDR_EQUATION
* pEquation
) const;
555 ADDR_E_RETURNCODE
ComputeThickEquation(
556 AddrResourceType rsrcType
,
557 AddrSwizzleMode swMode
,
558 UINT_32 elementBytesLog2
,
559 ADDR_EQUATION
* pEquation
) const;
561 ADDR_E_RETURNCODE
ComputeSurfaceInfoSanityCheck(
562 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const;
564 ADDR_E_RETURNCODE
ComputeSurfaceInfoLinear(
565 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
566 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
568 ADDR_E_RETURNCODE
ComputeSurfaceLinearPadding(
569 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
570 UINT_32
* pMipmap0PaddedWidth
,
571 UINT_32
* pSlice0PaddedHeight
,
572 ADDR2_MIP_INFO
* pMipInfo
= NULL
) const;
574 ADDR_E_RETURNCODE
ComputeSurfaceInfoTiled(
575 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
576 ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
578 ADDR_E_RETURNCODE
ComputeSurfaceAddrFromCoordLinear(
579 const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
,
580 ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
582 ADDR_E_RETURNCODE
ComputeSurfaceAddrFromCoordTiled(
583 const ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
,
584 ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
* pOut
) const;
586 ADDR_E_RETURNCODE
ComputeSurfaceCoordFromAddrLinear(
587 const ADDR2_COMPUTE_SURFACE_COORDFROMADDR_INPUT
* pIn
,
588 ADDR2_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
* pOut
) const;
590 ADDR_E_RETURNCODE
ComputeSurfaceCoordFromAddrTiled(
591 const ADDR2_COMPUTE_SURFACE_COORDFROMADDR_INPUT
* pIn
,
592 ADDR2_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
* pOut
) const;
594 UINT_32
ComputeSurface2DMicroBlockOffset(
595 const _ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
) const;
597 UINT_32
ComputeSurface3DMicroBlockOffset(
598 const _ADDR2_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
* pIn
) const;
601 ADDR_E_RETURNCODE
ComputeBlockDimensionForSurf(
607 AddrResourceType resourceType
,
608 AddrSwizzleMode swizzleMode
) const;
610 ADDR_E_RETURNCODE
ComputeBlockDimension(
615 AddrResourceType resourceType
,
616 AddrSwizzleMode swizzleMode
) const;
618 static UINT_64
ComputePadSize(
619 const Dim3d
* pBlkDim
,
625 pPadDim
->w
= PowTwoAlign(width
,pBlkDim
->w
);
626 pPadDim
->h
= PowTwoAlign(height
,pBlkDim
->h
);
627 pPadDim
->d
= PowTwoAlign(numSlices
, pBlkDim
->d
);
628 return static_cast<UINT_64
>(pPadDim
->w
) * pPadDim
->h
* pPadDim
->d
;
631 static ADDR_E_RETURNCODE
ExtractPipeBankXor(
638 static BOOL_32
Valid3DMipSliceIdConstraint(
643 return (Max((numSlices
>> mipId
), 1u) > slice
);
647 AddrResourceType resourceType
,
648 AddrSwizzleMode swizzleMode
,
651 UINT_32 blockDepth
) const;
654 AddrResourceType resourceType
,
655 AddrSwizzleMode swizzleMode
,
661 BOOL_32 inTail
= ((width
<= mipTailDim
.w
) &&
662 (height
<= mipTailDim
.h
) &&
663 (IsThin(resourceType
, swizzleMode
) || (depth
<= mipTailDim
.d
)));
668 static BOOL_32
IsLocalHeap(AddrResrouceLocation resourceType
)
670 return ((resourceType
== ADDR_RSRC_LOC_LOCAL
) ||
671 (resourceType
== ADDR_RSRC_LOC_INVIS
));
674 static BOOL_32
IsInvisibleHeap(AddrResrouceLocation resourceType
)
676 return (resourceType
== ADDR_RSRC_LOC_INVIS
);
679 static BOOL_32
IsNonlocalHeap(AddrResrouceLocation resourceType
)
681 return ((resourceType
== ADDR_RSRC_LOC_USWC
) ||
682 (resourceType
== ADDR_RSRC_LOC_CACHED
));
685 UINT_32
GetPipeLog2ForMetaAddressing(BOOL_32 pipeAligned
, AddrSwizzleMode swizzleMode
) const
687 UINT_32 numPipeLog2
= pipeAligned
? Min(m_pipesLog2
+ m_seLog2
, 5u) : 0;
689 if (IsXor(swizzleMode
))
691 UINT_32 maxPipeLog2
= GetBlockSizeLog2(swizzleMode
) - m_pipeInterleaveLog2
;
693 numPipeLog2
= Min(numPipeLog2
, maxPipeLog2
);
699 UINT_32
GetPipeNumForMetaAddressing(BOOL_32 pipeAligned
, AddrSwizzleMode swizzleMode
) const
701 return (1 << GetPipeLog2ForMetaAddressing(pipeAligned
, swizzleMode
));
704 VOID
VerifyMipLevelInfo(const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
) const
707 if (pIn
->numMipLevels
> 1)
709 UINT_32 actualMipLevels
= 1;
710 switch (pIn
->resourceType
)
712 case ADDR_RSRC_TEX_3D
:
713 // Fall through to share 2D case
714 actualMipLevels
= Max(actualMipLevels
, Log2NonPow2(pIn
->numSlices
) + 1);
715 case ADDR_RSRC_TEX_2D
:
716 // Fall through to share 1D case
717 actualMipLevels
= Max(actualMipLevels
, Log2NonPow2(pIn
->height
) + 1);
718 case ADDR_RSRC_TEX_1D
:
720 actualMipLevels
= Max(actualMipLevels
, Log2NonPow2(pIn
->width
) + 1);
723 ADDR_ASSERT_ALWAYS();
726 // Client pass wrong number of MipLevels to addrlib and result will be bad.
727 // Not sure if we should fail this calling instead of putting an assertion here.
728 ADDR_ASSERT(actualMipLevels
>= pIn
->numMipLevels
);
733 ADDR_E_RETURNCODE
ApplyCustomerPipeBankXor(
734 AddrSwizzleMode swizzleMode
,
738 UINT_32
* pBlockOffset
) const
740 ADDR_E_RETURNCODE returnCode
= ADDR_OK
;
742 if (IsXor(swizzleMode
))
744 // Apply driver set bankPipeXor
747 returnCode
= ExtractPipeBankXor(pipeBankXor
, bankBits
, pipeBits
, &bankX
, &pipeX
);
748 *pBlockOffset
^= (pipeX
<< m_pipeInterleaveLog2
);
749 *pBlockOffset
^= (bankX
<< (m_pipeInterleaveLog2
+ pipeBits
));
755 UINT_32
GetPipeXorBits(UINT_32 macroBlockBits
) const;
756 UINT_32
GetBankXorBits(UINT_32 macroBlockBits
) const;
758 ADDR_E_RETURNCODE
ApplyCustomizedPitchHeight(
759 const ADDR2_COMPUTE_SURFACE_INFO_INPUT
* pIn
,
760 UINT_32 elementBytes
,
761 UINT_32 pitchAlignInElement
,
763 UINT_32
* pHeight
) const;
765 VOID
ComputeQbStereoInfo(ADDR2_COMPUTE_SURFACE_INFO_OUTPUT
* pOut
) const;
767 UINT_32 m_se
; ///< Number of shader engine
768 UINT_32 m_rbPerSe
; ///< Number of render backend per shader engine
769 UINT_32 m_maxCompFrag
; ///< Number of max compressed fragment
771 UINT_32 m_banksLog2
; ///< Number of bank Log2
772 UINT_32 m_pipesLog2
; ///< Number of pipe per shader engine Log2
773 UINT_32 m_seLog2
; ///< Number of shader engine Log2
774 UINT_32 m_rbPerSeLog2
; ///< Number of render backend per shader engine Log2
775 UINT_32 m_maxCompFragLog2
; ///< Number of max compressed fragment Log2
777 UINT_32 m_pipeInterleaveLog2
; ///< Log2 of pipe interleave bytes
779 UINT_32 m_blockVarSizeLog2
; ///< Log2 of block var size
781 SwizzleModeFlags m_swizzleModeTable
[ADDR_SW_MAX_TYPE
]; ///< Swizzle mode table
784 // Disallow the copy constructor
787 // Disallow the assignment operator
788 Lib
& operator=(const Lib
& a
);