Home | History | Annotate | Download | only in addrlib
      1 /*
      2  * Copyright  2014 Advanced Micro Devices, Inc.
      3  * All Rights Reserved.
      4  *
      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:
     12  *
     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.
     21  *
     22  * The above copyright notice and this permission notice (including the
     23  * next paragraph) shall be included in all copies or substantial portions
     24  * of the Software.
     25  */
     26 
     27 /**
     28 ***************************************************************************************************
     29 * @file  addrinterface.h
     30 * @brief Contains the addrlib interfaces declaration and parameter defines
     31 ***************************************************************************************************
     32 */
     33 #ifndef __ADDR_INTERFACE_H__
     34 #define __ADDR_INTERFACE_H__
     35 
     36 #include "addrtypes.h"
     37 
     38 #if defined(__cplusplus)
     39 extern "C"
     40 {
     41 #endif
     42 
     43 #define ADDRLIB_VERSION_MAJOR 5
     44 #define ADDRLIB_VERSION_MINOR 25
     45 #define ADDRLIB_VERSION ((ADDRLIB_VERSION_MAJOR << 16) | ADDRLIB_VERSION_MINOR)
     46 
     47 /// Virtually all interface functions need ADDR_HANDLE as first parameter
     48 typedef VOID*   ADDR_HANDLE;
     49 
     50 /// Client handle used in callbacks
     51 typedef VOID*   ADDR_CLIENT_HANDLE;
     52 
     53 /**
     54 * /////////////////////////////////////////////////////////////////////////////////////////////////
     55 * //                                  Callback functions
     56 * /////////////////////////////////////////////////////////////////////////////////////////////////
     57 *    typedef VOID* (ADDR_API* ADDR_ALLOCSYSMEM)(
     58 *         const ADDR_ALLOCSYSMEM_INPUT* pInput);
     59 *    typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_FREESYSMEM)(
     60 *         VOID* pVirtAddr);
     61 *    typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_DEBUGPRINT)(
     62 *         const ADDR_DEBUGPRINT_INPUT* pInput);
     63 *
     64 * /////////////////////////////////////////////////////////////////////////////////////////////////
     65 * //                               Create/Destroy/Config functions
     66 * /////////////////////////////////////////////////////////////////////////////////////////////////
     67 *     AddrCreate()
     68 *     AddrDestroy()
     69 *
     70 * /////////////////////////////////////////////////////////////////////////////////////////////////
     71 * //                                  Surface functions
     72 * /////////////////////////////////////////////////////////////////////////////////////////////////
     73 *     AddrComputeSurfaceInfo()
     74 *     AddrComputeSurfaceAddrFromCoord()
     75 *     AddrComputeSurfaceCoordFromAddr()
     76 *
     77 * /////////////////////////////////////////////////////////////////////////////////////////////////
     78 * //                                   HTile functions
     79 * /////////////////////////////////////////////////////////////////////////////////////////////////
     80 *     AddrComputeHtileInfo()
     81 *     AddrComputeHtileAddrFromCoord()
     82 *     AddrComputeHtileCoordFromAddr()
     83 *
     84 * /////////////////////////////////////////////////////////////////////////////////////////////////
     85 * //                                   C-mask functions
     86 * /////////////////////////////////////////////////////////////////////////////////////////////////
     87 *     AddrComputeCmaskInfo()
     88 *     AddrComputeCmaskAddrFromCoord()
     89 *     AddrComputeCmaskCoordFromAddr()
     90 *
     91 * /////////////////////////////////////////////////////////////////////////////////////////////////
     92 * //                                   F-mask functions
     93 * /////////////////////////////////////////////////////////////////////////////////////////////////
     94 *     AddrComputeFmaskInfo()
     95 *     AddrComputeFmaskAddrFromCoord()
     96 *     AddrComputeFmaskCoordFromAddr()
     97 *
     98 * /////////////////////////////////////////////////////////////////////////////////////////////////
     99 * //                               Element/Utility functions
    100 * /////////////////////////////////////////////////////////////////////////////////////////////////
    101 *     ElemFlt32ToDepthPixel()
    102 *     ElemFlt32ToColorPixel()
    103 *     AddrExtractBankPipeSwizzle()
    104 *     AddrCombineBankPipeSwizzle()
    105 *     AddrComputeSliceSwizzle()
    106 *     AddrConvertTileInfoToHW()
    107 *     AddrConvertTileIndex()
    108 *     AddrConvertTileIndex1()
    109 *     AddrGetTileIndex()
    110 *     AddrComputeBaseSwizzle()
    111 *     AddrUseTileIndex()
    112 *     AddrUseCombinedSwizzle()
    113 *
    114 * /////////////////////////////////////////////////////////////////////////////////////////////////
    115 * //                                    Dump functions
    116 * /////////////////////////////////////////////////////////////////////////////////////////////////
    117 *     AddrDumpSurfaceInfo()
    118 *     AddrDumpFmaskInfo()
    119 *     AddrDumpCmaskInfo()
    120 *     AddrDumpHtileInfo()
    121 *
    122 **/
    123 
    124 ///////////////////////////////////////////////////////////////////////////////////////////////////
    125 //                                      Callback functions
    126 ///////////////////////////////////////////////////////////////////////////////////////////////////
    127 
    128 /**
    129 ***************************************************************************************************
    130 * @brief Alloc system memory flags.
    131 * @note These flags are reserved for future use and if flags are added will minimize the impact
    132 *       of the client.
    133 ***************************************************************************************************
    134 */
    135 typedef union _ADDR_ALLOCSYSMEM_FLAGS
    136 {
    137     struct
    138     {
    139         UINT_32 reserved    : 32;  ///< Reserved for future use.
    140     } fields;
    141     UINT_32 value;
    142 
    143 } ADDR_ALLOCSYSMEM_FLAGS;
    144 
    145 /**
    146 ***************************************************************************************************
    147 * @brief Alloc system memory input structure
    148 ***************************************************************************************************
    149 */
    150 typedef struct _ADDR_ALLOCSYSMEM_INPUT
    151 {
    152     UINT_32                 size;           ///< Size of this structure in bytes
    153 
    154     ADDR_ALLOCSYSMEM_FLAGS  flags;          ///< System memory flags.
    155     UINT_32                 sizeInBytes;    ///< System memory allocation size in bytes.
    156     ADDR_CLIENT_HANDLE      hClient;        ///< Client handle
    157 } ADDR_ALLOCSYSMEM_INPUT;
    158 
    159 /**
    160 ***************************************************************************************************
    161 * ADDR_ALLOCSYSMEM
    162 *   @brief
    163 *       Allocate system memory callback function. Returns valid pointer on success.
    164 ***************************************************************************************************
    165 */
    166 typedef VOID* (ADDR_API* ADDR_ALLOCSYSMEM)(
    167     const ADDR_ALLOCSYSMEM_INPUT* pInput);
    168 
    169 /**
    170 ***************************************************************************************************
    171 * @brief Free system memory input structure
    172 ***************************************************************************************************
    173 */
    174 typedef struct _ADDR_FREESYSMEM_INPUT
    175 {
    176     UINT_32                 size;           ///< Size of this structure in bytes
    177 
    178     VOID*                   pVirtAddr;      ///< Virtual address
    179     ADDR_CLIENT_HANDLE      hClient;        ///< Client handle
    180 } ADDR_FREESYSMEM_INPUT;
    181 
    182 /**
    183 ***************************************************************************************************
    184 * ADDR_FREESYSMEM
    185 *   @brief
    186 *       Free system memory callback function.
    187 *       Returns ADDR_OK on success.
    188 ***************************************************************************************************
    189 */
    190 typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_FREESYSMEM)(
    191     const ADDR_FREESYSMEM_INPUT* pInput);
    192 
    193 /**
    194 ***************************************************************************************************
    195 * @brief Print debug message input structure
    196 ***************************************************************************************************
    197 */
    198 typedef struct _ADDR_DEBUGPRINT_INPUT
    199 {
    200     UINT_32             size;           ///< Size of this structure in bytes
    201 
    202     CHAR*               pDebugString;   ///< Debug print string
    203     va_list             ap;             ///< Variable argument list
    204     ADDR_CLIENT_HANDLE  hClient;        ///< Client handle
    205 } ADDR_DEBUGPRINT_INPUT;
    206 
    207 /**
    208 ***************************************************************************************************
    209 * ADDR_DEBUGPRINT
    210 *   @brief
    211 *       Print debug message callback function.
    212 *       Returns ADDR_OK on success.
    213 ***************************************************************************************************
    214 */
    215 typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_DEBUGPRINT)(
    216     const ADDR_DEBUGPRINT_INPUT* pInput);
    217 
    218 /**
    219 ***************************************************************************************************
    220 * ADDR_CALLBACKS
    221 *
    222 *   @brief
    223 *       Address Library needs client to provide system memory alloc/free routines.
    224 ***************************************************************************************************
    225 */
    226 typedef struct _ADDR_CALLBACKS
    227 {
    228     ADDR_ALLOCSYSMEM allocSysMem;   ///< Routine to allocate system memory
    229     ADDR_FREESYSMEM  freeSysMem;    ///< Routine to free system memory
    230     ADDR_DEBUGPRINT  debugPrint;    ///< Routine to print debug message
    231 } ADDR_CALLBACKS;
    232 
    233 ///////////////////////////////////////////////////////////////////////////////////////////////////
    234 //                               Create/Destroy functions
    235 ///////////////////////////////////////////////////////////////////////////////////////////////////
    236 
    237 /**
    238 ***************************************************************************************************
    239 * ADDR_CREATE_FLAGS
    240 *
    241 *   @brief
    242 *       This structure is used to pass some setup in creation of AddrLib
    243 *   @note
    244 ***************************************************************************************************
    245 */
    246 typedef union _ADDR_CREATE_FLAGS
    247 {
    248     struct
    249     {
    250         UINT_32 noCubeMipSlicesPad     : 1;    ///< Turn cubemap faces padding off
    251         UINT_32 fillSizeFields         : 1;    ///< If clients fill size fields in all input and
    252                                                ///  output structure
    253         UINT_32 useTileIndex           : 1;    ///< Make tileIndex field in input valid
    254         UINT_32 useCombinedSwizzle     : 1;    ///< Use combined tile swizzle
    255         UINT_32 checkLast2DLevel       : 1;    ///< Check the last 2D mip sub level
    256         UINT_32 useHtileSliceAlign     : 1;    ///< Do htile single slice alignment
    257         UINT_32 degradeBaseLevel       : 1;    ///< Degrade to 1D modes automatically for base level
    258         UINT_32 allowLargeThickTile    : 1;    ///< Allow 64*thickness*bytesPerPixel > rowSize
    259         UINT_32 reserved               : 24;   ///< Reserved bits for future use
    260     };
    261 
    262     UINT_32 value;
    263 } ADDR_CREATE_FLAGS;
    264 
    265 /**
    266 ***************************************************************************************************
    267 *   ADDR_REGISTER_VALUE
    268 *
    269 *   @brief
    270 *       Data from registers to setup AddrLib global data, used in AddrCreate
    271 ***************************************************************************************************
    272 */
    273 typedef struct _ADDR_REGISTER_VALUE
    274 {
    275     UINT_32  gbAddrConfig;       ///< For R8xx, use GB_ADDR_CONFIG register value.
    276                                  ///  For R6xx/R7xx, use GB_TILING_CONFIG.
    277                                  ///  But they can be treated as the same.
    278                                  ///  if this value is 0, use chip to set default value
    279     UINT_32  backendDisables;    ///< 1 bit per backend, starting with LSB. 1=disabled,0=enabled.
    280                                  ///  Register value of CC_RB_BACKEND_DISABLE.BACKEND_DISABLE
    281 
    282                                  ///  R800 registers-----------------------------------------------
    283     UINT_32  noOfBanks;          ///< Number of h/w ram banks - For r800: MC_ARB_RAMCFG.NOOFBANK
    284                                  ///  No enums for this value in h/w header files
    285                                  ///  0: 4
    286                                  ///  1: 8
    287                                  ///  2: 16
    288     UINT_32  noOfRanks;          ///  MC_ARB_RAMCFG.NOOFRANK
    289                                  ///  0: 1
    290                                  ///  1: 2
    291                                  ///  SI (R1000) registers-----------------------------------------
    292     const UINT_32* pTileConfig;  ///< Global tile setting tables
    293     UINT_32  noOfEntries;        ///< Number of entries in pTileConfig
    294 
    295                                  ///< CI registers-------------------------------------------------
    296     const UINT_32* pMacroTileConfig;    ///< Global macro tile mode table
    297     UINT_32  noOfMacroEntries;   ///< Number of entries in pMacroTileConfig
    298 
    299 } ADDR_REGISTER_VALUE;
    300 
    301 /**
    302 ***************************************************************************************************
    303 * ADDR_CREATE_INPUT
    304 *
    305 *   @brief
    306 *       Parameters use to create an AddrLib Object. Caller must provide all fields.
    307 *
    308 ***************************************************************************************************
    309 */
    310 typedef struct _ADDR_CREATE_INPUT
    311 {
    312     UINT_32             size;                ///< Size of this structure in bytes
    313 
    314     UINT_32             chipEngine;          ///< Chip Engine
    315     UINT_32             chipFamily;          ///< Chip Family
    316     UINT_32             chipRevision;        ///< Chip Revision
    317     ADDR_CALLBACKS      callbacks;           ///< Callbacks for sysmem alloc/free/print
    318     ADDR_CREATE_FLAGS   createFlags;         ///< Flags to setup AddrLib
    319     ADDR_REGISTER_VALUE regValue;            ///< Data from registers to setup AddrLib global data
    320     ADDR_CLIENT_HANDLE  hClient;             ///< Client handle
    321     UINT_32             minPitchAlignPixels; ///< Minimum pitch alignment in pixels
    322 } ADDR_CREATE_INPUT;
    323 
    324 /**
    325 ***************************************************************************************************
    326 * ADDR_CREATEINFO_OUTPUT
    327 *
    328 *   @brief
    329 *       Return AddrLib handle to client driver
    330 *
    331 ***************************************************************************************************
    332 */
    333 typedef struct _ADDR_CREATE_OUTPUT
    334 {
    335     UINT_32     size;    ///< Size of this structure in bytes
    336 
    337     ADDR_HANDLE hLib;    ///< Address lib handle
    338 } ADDR_CREATE_OUTPUT;
    339 
    340 /**
    341 ***************************************************************************************************
    342 *   AddrCreate
    343 *
    344 *   @brief
    345 *       Create AddrLib object, must be called before any interface calls
    346 *
    347 *   @return
    348 *       ADDR_OK if successful
    349 ***************************************************************************************************
    350 */
    351 ADDR_E_RETURNCODE ADDR_API AddrCreate(
    352     const ADDR_CREATE_INPUT*    pAddrCreateIn,
    353     ADDR_CREATE_OUTPUT*         pAddrCreateOut);
    354 
    355 
    356 
    357 /**
    358 ***************************************************************************************************
    359 *   AddrDestroy
    360 *
    361 *   @brief
    362 *       Destroy AddrLib object, must be called to free internally allocated resources.
    363 *
    364 *   @return
    365 *      ADDR_OK if successful
    366 ***************************************************************************************************
    367 */
    368 ADDR_E_RETURNCODE ADDR_API AddrDestroy(
    369     ADDR_HANDLE hLib);
    370 
    371 
    372 
    373 ///////////////////////////////////////////////////////////////////////////////////////////////////
    374 //                                    Surface functions
    375 ///////////////////////////////////////////////////////////////////////////////////////////////////
    376 
    377 /**
    378 ***************************************************************************************************
    379 * @brief
    380 *       Bank/tiling parameters. On function input, these can be set as desired or
    381 *       left 0 for AddrLib to calculate/default. On function output, these are the actual
    382 *       parameters used.
    383 * @note
    384 *       Valid bankWidth/bankHeight value:
    385 *       1,2,4,8. They are factors instead of pixels or bytes.
    386 *
    387 *       The bank number remains constant across each row of the
    388 *       macro tile as each pipe is selected, so the number of
    389 *       tiles in the x direction with the same bank number will
    390 *       be bank_width * num_pipes.
    391 ***************************************************************************************************
    392 */
    393 typedef struct _ADDR_TILEINFO
    394 {
    395     ///  Any of these parameters can be set to 0 to use the HW default.
    396     UINT_32     banks;              ///< Number of banks, numerical value
    397     UINT_32     bankWidth;          ///< Number of tiles in the X direction in the same bank
    398     UINT_32     bankHeight;         ///< Number of tiles in the Y direction in the same bank
    399     UINT_32     macroAspectRatio;   ///< Macro tile aspect ratio. 1-1:1, 2-4:1, 4-16:1, 8-64:1
    400     UINT_32     tileSplitBytes;     ///< Tile split size, in bytes
    401     AddrPipeCfg pipeConfig;         ///< Pipe Config = HW enum + 1
    402 } ADDR_TILEINFO;
    403 
    404 // Create a define to avoid client change. The removal of R800 is because we plan to implement SI
    405 // within 800 HWL - An AddrPipeCfg is added in above data structure
    406 typedef ADDR_TILEINFO ADDR_R800_TILEINFO;
    407 
    408 /**
    409 ***************************************************************************************************
    410 * @brief
    411 *       Information needed by quad buffer stereo support
    412 ***************************************************************************************************
    413 */
    414 typedef struct _ADDR_QBSTEREOINFO
    415 {
    416     UINT_32         eyeHeight;          ///< Height (in pixel rows) to right eye
    417     UINT_32         rightOffset;        ///< Offset (in bytes) to right eye
    418     UINT_32         rightSwizzle;       ///< TileSwizzle for right eyes
    419 } ADDR_QBSTEREOINFO;
    420 
    421 /**
    422 ***************************************************************************************************
    423 *   ADDR_SURFACE_FLAGS
    424 *
    425 *   @brief
    426 *       Surface flags
    427 ***************************************************************************************************
    428 */
    429 typedef union _ADDR_SURFACE_FLAGS
    430 {
    431     struct
    432     {
    433         UINT_32 color         : 1; ///< Flag indicates this is a color buffer
    434         UINT_32 depth         : 1; ///< Flag indicates this is a depth/stencil buffer
    435         UINT_32 stencil       : 1; ///< Flag indicates this is a stencil buffer
    436         UINT_32 texture       : 1; ///< Flag indicates this is a texture
    437         UINT_32 cube          : 1; ///< Flag indicates this is a cubemap
    438 
    439         UINT_32 volume        : 1; ///< Flag indicates this is a volume texture
    440         UINT_32 fmask         : 1; ///< Flag indicates this is an fmask
    441         UINT_32 cubeAsArray   : 1; ///< Flag indicates if treat cubemap as arrays
    442         UINT_32 compressZ     : 1; ///< Flag indicates z buffer is compressed
    443         UINT_32 overlay       : 1; ///< Flag indicates this is an overlay surface
    444         UINT_32 noStencil     : 1; ///< Flag indicates this depth has no separate stencil
    445         UINT_32 display       : 1; ///< Flag indicates this should match display controller req.
    446         UINT_32 opt4Space     : 1; ///< Flag indicates this surface should be optimized for space
    447                                    ///  i.e. save some memory but may lose performance
    448         UINT_32 prt           : 1; ///< Flag for partially resident texture
    449         UINT_32 qbStereo      : 1; ///< Quad buffer stereo surface
    450         UINT_32 pow2Pad       : 1; ///< SI: Pad to pow2, must set for mipmap (include level0)
    451         UINT_32 interleaved   : 1; ///< Special flag for interleaved YUV surface padding
    452         UINT_32 degrade4Space : 1; ///< Degrade base level's tile mode to save memory
    453         UINT_32 tcCompatible  : 1; ///< Flag indicates surface needs to be shader readable
    454         UINT_32 dispTileType  : 1; ///< NI: force display Tiling for 128 bit shared resoruce
    455         UINT_32 dccCompatible : 1; ///< VI: whether to support dcc fast clear
    456         UINT_32 czDispCompatible: 1; ///< SI+: CZ family (Carrizo) has a HW bug needs special alignment.
    457                                      ///<      This flag indicates we need to follow the alignment with
    458                                      ///<      CZ families or other ASICs under PX configuration + CZ.
    459         UINT_32 reserved      :10; ///< Reserved bits
    460     };
    461 
    462     UINT_32 value;
    463 } ADDR_SURFACE_FLAGS;
    464 
    465 /**
    466 ***************************************************************************************************
    467 *   ADDR_COMPUTE_SURFACE_INFO_INPUT
    468 *
    469 *   @brief
    470 *       Input structure for AddrComputeSurfaceInfo
    471 ***************************************************************************************************
    472 */
    473 typedef struct _ADDR_COMPUTE_SURFACE_INFO_INPUT
    474 {
    475     UINT_32             size;               ///< Size of this structure in bytes
    476 
    477     AddrTileMode        tileMode;           ///< Tile mode
    478     AddrFormat          format;             ///< If format is set to valid one, bpp/width/height
    479                                             ///  might be overwritten
    480     UINT_32             bpp;                ///< Bits per pixel
    481     UINT_32             numSamples;         ///< Number of samples
    482     UINT_32             width;              ///< Width, in pixels
    483     UINT_32             height;             ///< Height, in pixels
    484     UINT_32             numSlices;          ///< Number surface slice/depth,
    485                                             ///  Note:
    486                                             ///  For cubemap, driver clients usually set numSlices
    487                                             ///  to 1 in per-face calc.
    488                                             ///  For 7xx and above, we need pad faces as slices.
    489                                             ///  In this case, clients should set numSlices to 6 and
    490                                             ///  this is also can be turned off by createFlags when
    491                                             ///  calling AddrCreate
    492     UINT_32             slice;              ///< Slice index
    493     UINT_32             mipLevel;           ///< Current mipmap level.
    494                                             ///  Padding/tiling have different rules for level0 and
    495                                             ///  sublevels
    496     ADDR_SURFACE_FLAGS  flags;              ///< Surface type flags
    497     UINT_32             numFrags;           ///< Number of fragments, leave it zero or the same as
    498                                             ///  number of samples for normal AA; Set it to the
    499                                             ///  number of fragments for EQAA
    500     /// r800 and later HWL parameters
    501     // Needed by 2D tiling, for linear and 1D tiling, just keep them 0's
    502     ADDR_TILEINFO*      pTileInfo;          ///< 2D tile parameters. Set to 0 to default/calculate
    503     AddrTileType        tileType;           ///< Micro tiling type, not needed when tileIndex != -1
    504     INT_32              tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
    505                                             ///  while the global useTileIndex is set to 1
    506     UINT_32             basePitch;          ///< Base level pitch in pixels, 0 means ignored, is a
    507                                             ///  must for mip levels from SI+.
    508                                             ///  Don't use pitch in blocks for compressed formats!
    509 } ADDR_COMPUTE_SURFACE_INFO_INPUT;
    510 
    511 /**
    512 ***************************************************************************************************
    513 *   ADDR_COMPUTE_SURFACE_INFO_OUTPUT
    514 *
    515 *   @brief
    516 *       Output structure for AddrComputeSurfInfo
    517 *   @note
    518         Element: AddrLib unit for computing. e.g. BCn: 4x4 blocks; R32B32B32: 32bit with 3x pitch
    519         Pixel: Original pixel
    520 ***************************************************************************************************
    521 */
    522 typedef struct _ADDR_COMPUTE_SURFACE_INFO_OUTPUT
    523 {
    524     UINT_32         size;           ///< Size of this structure in bytes
    525 
    526     UINT_32         pitch;          ///< Pitch in elements (in blocks for compressed formats)
    527     UINT_32         height;         ///< Height in elements (in blocks for compressed formats)
    528     UINT_32         depth;          ///< Number of slice/depth
    529     UINT_64         surfSize;       ///< Surface size in bytes
    530     AddrTileMode    tileMode;       ///< Actual tile mode. May differ from that in input
    531     UINT_32         baseAlign;      ///< Base address alignment
    532     UINT_32         pitchAlign;     ///< Pitch alignment, in elements
    533     UINT_32         heightAlign;    ///< Height alignment, in elements
    534     UINT_32         depthAlign;     ///< Depth alignment, aligned to thickness, for 3d texture
    535     UINT_32         bpp;            ///< Bits per elements (e.g. blocks for BCn, 1/3 for 96bit)
    536     UINT_32         pixelPitch;     ///< Pitch in original pixels
    537     UINT_32         pixelHeight;    ///< Height in original pixels
    538     UINT_32         pixelBits;      ///< Original bits per pixel, passed from input
    539     UINT_64         sliceSize;      ///< Size of slice specified by input's slice
    540                                     ///  The result is controlled by surface flags & createFlags
    541                                     ///  By default this value equals to surfSize for volume
    542     UINT_32         pitchTileMax;   ///< PITCH_TILE_MAX value for h/w register
    543     UINT_32         heightTileMax;  ///< HEIGHT_TILE_MAX value for h/w register
    544     UINT_32         sliceTileMax;   ///< SLICE_TILE_MAX value for h/w register
    545 
    546     UINT_32         numSamples;     ///< Pass the effective numSamples processed in this call
    547 
    548     /// r800 and later HWL parameters
    549     ADDR_TILEINFO*  pTileInfo;      ///< Tile parameters used. Filled in if 0 on input
    550     AddrTileType    tileType;       ///< Micro tiling type, only valid when tileIndex != -1
    551     INT_32          tileIndex;      ///< Tile index, MAY be "downgraded"
    552 
    553     INT_32          macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
    554     /// Special information to work around SI mipmap swizzle bug UBTS #317508
    555     BOOL_32         last2DLevel;    ///< TRUE if this is the last 2D(3D) tiled
    556                                     ///< Only meaningful when create flag checkLast2DLevel is set
    557     /// Stereo info
    558     ADDR_QBSTEREOINFO*  pStereoInfo;///< Stereo information, needed when .qbStereo flag is TRUE
    559 } ADDR_COMPUTE_SURFACE_INFO_OUTPUT;
    560 
    561 /**
    562 ***************************************************************************************************
    563 *   AddrComputeSurfaceInfo
    564 *
    565 *   @brief
    566 *       Compute surface width/height/depth/alignments and suitable tiling mode
    567 ***************************************************************************************************
    568 */
    569 ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceInfo(
    570     ADDR_HANDLE                             hLib,
    571     const ADDR_COMPUTE_SURFACE_INFO_INPUT*  pIn,
    572     ADDR_COMPUTE_SURFACE_INFO_OUTPUT*       pOut);
    573 
    574 
    575 
    576 /**
    577 ***************************************************************************************************
    578 *   ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
    579 *
    580 *   @brief
    581 *       Input structure for AddrComputeSurfaceAddrFromCoord
    582 ***************************************************************************************************
    583 */
    584 typedef struct _ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
    585 {
    586     UINT_32         size;               ///< Size of this structure in bytes
    587 
    588     UINT_32         x;                  ///< X coordinate
    589     UINT_32         y;                  ///< Y coordinate
    590     UINT_32         slice;              ///< Slice index
    591     UINT_32         sample;             ///< Sample index, use fragment index for EQAA
    592 
    593     UINT_32         bpp;                ///< Bits per pixel
    594     UINT_32         pitch;              ///< Surface pitch, in pixels
    595     UINT_32         height;             ///< Surface height, in pixels
    596     UINT_32         numSlices;          ///< Surface depth
    597     UINT_32         numSamples;         ///< Number of samples
    598 
    599     AddrTileMode    tileMode;           ///< Tile mode
    600     BOOL_32         isDepth;            ///< TRUE if the surface uses depth sample ordering within
    601                                         ///  micro tile. Textures can also choose depth sample order
    602     UINT_32         tileBase;           ///< Base offset (in bits) inside micro tile which handles
    603                                         ///  the case that components are stored separately
    604     UINT_32         compBits;           ///< The component bits actually needed(for planar surface)
    605 
    606     UINT_32         numFrags;           ///< Number of fragments, leave it zero or the same as
    607                                         ///  number of samples for normal AA; Set it to the
    608                                         ///  number of fragments for EQAA
    609     /// r800 and later HWL parameters
    610     // Used for 1D tiling above
    611     AddrTileType    tileType;           ///< See defintion of AddrTileType
    612     struct
    613     {
    614         UINT_32     ignoreSE : 1;       ///< TRUE if shader engines are ignored. This is texture
    615                                         ///  only flag. Only non-RT texture can set this to TRUE
    616         UINT_32     reserved :31;       ///< Reserved for future use.
    617     };
    618     // 2D tiling needs following structure
    619     ADDR_TILEINFO*  pTileInfo;          ///< 2D tile parameters. Client must provide all data
    620     INT_32          tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
    621                                         ///  while the global useTileIndex is set to 1
    622     union
    623     {
    624         struct
    625         {
    626             UINT_32  bankSwizzle;       ///< Bank swizzle
    627             UINT_32  pipeSwizzle;       ///< Pipe swizzle
    628         };
    629         UINT_32     tileSwizzle;        ///< Combined swizzle, if useCombinedSwizzle is TRUE
    630     };
    631 
    632 #if ADDR_AM_BUILD // These two fields are not valid in SW blt since no HTILE access
    633     UINT_32         addr5Swizzle;       ///< ADDR5_SWIZZLE_MASK of DB_DEPTH_INFO
    634     BOOL_32         is32ByteTile;       ///< Caller must have access to HTILE buffer and know if
    635                                         ///  this tile is compressed to 32B
    636 #endif
    637 } ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT;
    638 
    639 /**
    640 ***************************************************************************************************
    641 *   ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
    642 *
    643 *   @brief
    644 *       Output structure for AddrComputeSurfaceAddrFromCoord
    645 ***************************************************************************************************
    646 */
    647 typedef struct _ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
    648 {
    649     UINT_32 size;           ///< Size of this structure in bytes
    650 
    651     UINT_64 addr;           ///< Byte address
    652     UINT_32 bitPosition;    ///< Bit position within surfaceAddr, 0-7.
    653                             ///  For surface bpp < 8, e.g. FMT_1.
    654     UINT_32 prtBlockIndex;  ///< Index of a PRT tile (64K block)
    655 } ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT;
    656 
    657 /**
    658 ***************************************************************************************************
    659 *   AddrComputeSurfaceAddrFromCoord
    660 *
    661 *   @brief
    662 *       Compute surface address from a given coordinate.
    663 ***************************************************************************************************
    664 */
    665 ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceAddrFromCoord(
    666     ADDR_HANDLE                                     hLib,
    667     const ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
    668     ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT*      pOut);
    669 
    670 
    671 
    672 /**
    673 ***************************************************************************************************
    674 *   ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT
    675 *
    676 *   @brief
    677 *       Input structure for AddrComputeSurfaceCoordFromAddr
    678 ***************************************************************************************************
    679 */
    680 typedef struct _ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT
    681 {
    682     UINT_32         size;               ///< Size of this structure in bytes
    683 
    684     UINT_64         addr;               ///< Address in bytes
    685     UINT_32         bitPosition;        ///< Bit position in addr. 0-7. for surface bpp < 8,
    686                                         ///  e.g. FMT_1;
    687     UINT_32         bpp;                ///< Bits per pixel
    688     UINT_32         pitch;              ///< Pitch, in pixels
    689     UINT_32         height;             ///< Height in pixels
    690     UINT_32         numSlices;          ///< Surface depth
    691     UINT_32         numSamples;         ///< Number of samples
    692 
    693     AddrTileMode    tileMode;           ///< Tile mode
    694     BOOL_32         isDepth;            ///< Surface uses depth sample ordering within micro tile.
    695                                         ///  Note: Textures can choose depth sample order as well.
    696     UINT_32         tileBase;           ///< Base offset (in bits) inside micro tile which handles
    697                                         ///  the case that components are stored separately
    698     UINT_32         compBits;           ///< The component bits actually needed(for planar surface)
    699 
    700     UINT_32         numFrags;           ///< Number of fragments, leave it zero or the same as
    701                                         ///  number of samples for normal AA; Set it to the
    702                                         ///  number of fragments for EQAA
    703     /// r800 and later HWL parameters
    704     // Used for 1D tiling above
    705     AddrTileType    tileType;           ///< See defintion of AddrTileType
    706     struct
    707     {
    708         UINT_32     ignoreSE : 1;       ///< TRUE if shader engines are ignored. This is texture
    709                                         ///  only flag. Only non-RT texture can set this to TRUE
    710         UINT_32     reserved :31;       ///< Reserved for future use.
    711     };
    712     // 2D tiling needs following structure
    713     ADDR_TILEINFO*  pTileInfo;          ///< 2D tile parameters. Client must provide all data
    714     INT_32          tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
    715                                         ///  while the global useTileIndex is set to 1
    716     union
    717     {
    718         struct
    719         {
    720             UINT_32  bankSwizzle;       ///< Bank swizzle
    721             UINT_32  pipeSwizzle;       ///< Pipe swizzle
    722         };
    723         UINT_32     tileSwizzle;        ///< Combined swizzle, if useCombinedSwizzle is TRUE
    724     };
    725 } ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT;
    726 
    727 /**
    728 ***************************************************************************************************
    729 *   ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
    730 *
    731 *   @brief
    732 *       Output structure for AddrComputeSurfaceCoordFromAddr
    733 ***************************************************************************************************
    734 */
    735 typedef struct _ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
    736 {
    737     UINT_32 size;   ///< Size of this structure in bytes
    738 
    739     UINT_32 x;      ///< X coordinate
    740     UINT_32 y;      ///< Y coordinate
    741     UINT_32 slice;  ///< Index of slices
    742     UINT_32 sample; ///< Index of samples, means fragment index for EQAA
    743 } ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT;
    744 
    745 /**
    746 ***************************************************************************************************
    747 *   AddrComputeSurfaceCoordFromAddr
    748 *
    749 *   @brief
    750 *       Compute coordinate from a given surface address
    751 ***************************************************************************************************
    752 */
    753 ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceCoordFromAddr(
    754     ADDR_HANDLE                                     hLib,
    755     const ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT* pIn,
    756     ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT*      pOut);
    757 
    758 ///////////////////////////////////////////////////////////////////////////////////////////////////
    759 //                                   HTile functions
    760 ///////////////////////////////////////////////////////////////////////////////////////////////////
    761 
    762 /**
    763 ***************************************************************************************************
    764 *   ADDR_HTILE_FLAGS
    765 *
    766 *   @brief
    767 *       HTILE flags
    768 ***************************************************************************************************
    769 */
    770 typedef union _ADDR_HTILE_FLAGS
    771 {
    772     struct
    773     {
    774         UINT_32 tcCompatible  : 1; ///< Flag indicates surface needs to be shader readable
    775         UINT_32 reserved      :31; ///< Reserved bits
    776     };
    777 
    778     UINT_32 value;
    779 } ADDR_HTILE_FLAGS;
    780 
    781 /**
    782 ***************************************************************************************************
    783 *   ADDR_COMPUTE_HTILE_INFO_INPUT
    784 *
    785 *   @brief
    786 *       Input structure of AddrComputeHtileInfo
    787 ***************************************************************************************************
    788 */
    789 typedef struct _ADDR_COMPUTE_HTILE_INFO_INPUT
    790 {
    791     UINT_32            size;            ///< Size of this structure in bytes
    792 
    793     ADDR_HTILE_FLAGS   flags;           ///< HTILE flags
    794     UINT_32            pitch;           ///< Surface pitch, in pixels
    795     UINT_32            height;          ///< Surface height, in pixels
    796     UINT_32            numSlices;       ///< Number of slices
    797     BOOL_32            isLinear;        ///< Linear or tiled HTILE layout
    798     AddrHtileBlockSize blockWidth;      ///< 4 or 8. EG above only support 8
    799     AddrHtileBlockSize blockHeight;     ///< 4 or 8. EG above only support 8
    800     ADDR_TILEINFO*     pTileInfo;       ///< Tile info
    801 
    802     INT_32             tileIndex;       ///< Tile index, MUST be -1 if you don't want to use it
    803                                         ///  while the global useTileIndex is set to 1
    804     INT_32             macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
    805                                         ///< README: When tileIndex is not -1, this must be valid
    806 } ADDR_COMPUTE_HTILE_INFO_INPUT;
    807 
    808 /**
    809 ***************************************************************************************************
    810 *   ADDR_COMPUTE_HTILE_INFO_OUTPUT
    811 *
    812 *   @brief
    813 *       Output structure of AddrComputeHtileInfo
    814 ***************************************************************************************************
    815 */
    816 typedef struct _ADDR_COMPUTE_HTILE_INFO_OUTPUT
    817 {
    818     UINT_32 size;           ///< Size of this structure in bytes
    819 
    820     UINT_32 pitch;          ///< Pitch in pixels of depth buffer represented in this
    821                             ///  HTile buffer. This might be larger than original depth
    822                             ///  buffer pitch when called with an unaligned pitch.
    823     UINT_32 height;         ///< Height in pixels, as above
    824     UINT_64 htileBytes;     ///< Size of HTILE buffer, in bytes
    825     UINT_32 baseAlign;      ///< Base alignment
    826     UINT_32 bpp;            ///< Bits per pixel for HTILE is how many bits for an 8x8 block!
    827     UINT_32 macroWidth;     ///< Macro width in pixels, actually squared cache shape
    828     UINT_32 macroHeight;    ///< Macro height in pixels
    829     UINT_64 sliceSize;      ///< Slice size, in bytes.
    830 } ADDR_COMPUTE_HTILE_INFO_OUTPUT;
    831 
    832 /**
    833 ***************************************************************************************************
    834 *   AddrComputeHtileInfo
    835 *
    836 *   @brief
    837 *       Compute Htile pitch, height, base alignment and size in bytes
    838 ***************************************************************************************************
    839 */
    840 ADDR_E_RETURNCODE ADDR_API AddrComputeHtileInfo(
    841     ADDR_HANDLE                             hLib,
    842     const ADDR_COMPUTE_HTILE_INFO_INPUT*    pIn,
    843     ADDR_COMPUTE_HTILE_INFO_OUTPUT*         pOut);
    844 
    845 
    846 
    847 /**
    848 ***************************************************************************************************
    849 *   ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
    850 *
    851 *   @brief
    852 *       Input structure for AddrComputeHtileAddrFromCoord
    853 ***************************************************************************************************
    854 */
    855 typedef struct _ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
    856 {
    857     UINT_32            size;            ///< Size of this structure in bytes
    858 
    859     UINT_32            pitch;           ///< Pitch, in pixels
    860     UINT_32            height;          ///< Height in pixels
    861     UINT_32            x;               ///< X coordinate
    862     UINT_32            y;               ///< Y coordinate
    863     UINT_32            slice;           ///< Index of slice
    864     UINT_32            numSlices;       ///< Number of slices
    865     BOOL_32            isLinear;        ///< Linear or tiled HTILE layout
    866     AddrHtileBlockSize blockWidth;      ///< 4 or 8. 1 means 8, 0 means 4. EG above only support 8
    867     AddrHtileBlockSize blockHeight;     ///< 4 or 8. 1 means 8, 0 means 4. EG above only support 8
    868     ADDR_TILEINFO*     pTileInfo;       ///< Tile info
    869 
    870     INT_32             tileIndex;       ///< Tile index, MUST be -1 if you don't want to use it
    871                                         ///  while the global useTileIndex is set to 1
    872     INT_32             macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
    873                                         ///< README: When tileIndex is not -1, this must be valid
    874 } ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT;
    875 
    876 /**
    877 ***************************************************************************************************
    878 *   ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
    879 *
    880 *   @brief
    881 *       Output structure for AddrComputeHtileAddrFromCoord
    882 ***************************************************************************************************
    883 */
    884 typedef struct _ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
    885 {
    886     UINT_32 size;           ///< Size of this structure in bytes
    887 
    888     UINT_64 addr;           ///< Address in bytes
    889     UINT_32 bitPosition;    ///< Bit position, 0 or 4. CMASK and HTILE shares some lib method.
    890                             ///  So we keep bitPosition for HTILE as well
    891 } ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT;
    892 
    893 /**
    894 ***************************************************************************************************
    895 *   AddrComputeHtileAddrFromCoord
    896 *
    897 *   @brief
    898 *       Compute Htile address according to coordinates (of depth buffer)
    899 ***************************************************************************************************
    900 */
    901 ADDR_E_RETURNCODE ADDR_API AddrComputeHtileAddrFromCoord(
    902     ADDR_HANDLE                                     hLib,
    903     const ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT*   pIn,
    904     ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT*        pOut);
    905 
    906 
    907 
    908 /**
    909 ***************************************************************************************************
    910 *   ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT
    911 *
    912 *   @brief
    913 *       Input structure for AddrComputeHtileCoordFromAddr
    914 ***************************************************************************************************
    915 */
    916 typedef struct _ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT
    917 {
    918     UINT_32            size;            ///< Size of this structure in bytes
    919 
    920     UINT_64            addr;            ///< Address
    921     UINT_32            bitPosition;     ///< Bit position 0 or 4. CMASK and HTILE share some methods
    922                                         ///  so we keep bitPosition for HTILE as well
    923     UINT_32            pitch;           ///< Pitch, in pixels
    924     UINT_32            height;          ///< Height, in pixels
    925     UINT_32            numSlices;       ///< Number of slices
    926     BOOL_32            isLinear;        ///< Linear or tiled HTILE layout
    927     AddrHtileBlockSize blockWidth;      ///< 4 or 8. 1 means 8, 0 means 4. R8xx/R9xx only support 8
    928     AddrHtileBlockSize blockHeight;     ///< 4 or 8. 1 means 8, 0 means 4. R8xx/R9xx only support 8
    929     ADDR_TILEINFO*     pTileInfo;       ///< Tile info
    930 
    931     INT_32             tileIndex;       ///< Tile index, MUST be -1 if you don't want to use it
    932                                         ///  while the global useTileIndex is set to 1
    933     INT_32             macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
    934                                         ///< README: When tileIndex is not -1, this must be valid
    935 } ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT;
    936 
    937 /**
    938 ***************************************************************************************************
    939 *   ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
    940 *
    941 *   @brief
    942 *       Output structure for AddrComputeHtileCoordFromAddr
    943 ***************************************************************************************************
    944 */
    945 typedef struct _ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
    946 {
    947     UINT_32 size;   ///< Size of this structure in bytes
    948 
    949     UINT_32 x;      ///< X coordinate
    950     UINT_32 y;      ///< Y coordinate
    951     UINT_32 slice;  ///< Slice index
    952 } ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT;
    953 
    954 /**
    955 ***************************************************************************************************
    956 *   AddrComputeHtileCoordFromAddr
    957 *
    958 *   @brief
    959 *       Compute coordinates within depth buffer (1st pixel of a micro tile) according to
    960 *       Htile address
    961 ***************************************************************************************************
    962 */
    963 ADDR_E_RETURNCODE ADDR_API AddrComputeHtileCoordFromAddr(
    964     ADDR_HANDLE                                     hLib,
    965     const ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT*   pIn,
    966     ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT*        pOut);
    967 
    968 
    969 
    970 ///////////////////////////////////////////////////////////////////////////////////////////////////
    971 //                                     C-mask functions
    972 ///////////////////////////////////////////////////////////////////////////////////////////////////
    973 
    974 /**
    975 ***************************************************************************************************
    976 *   ADDR_CMASK_FLAGS
    977 *
    978 *   @brief
    979 *       CMASK flags
    980 ***************************************************************************************************
    981 */
    982 typedef union _ADDR_CMASK_FLAGS
    983 {
    984     struct
    985     {
    986         UINT_32 tcCompatible  : 1; ///< Flag indicates surface needs to be shader readable
    987         UINT_32 reserved      :31; ///< Reserved bits
    988     };
    989 
    990     UINT_32 value;
    991 } ADDR_CMASK_FLAGS;
    992 
    993 /**
    994 ***************************************************************************************************
    995 *   ADDR_COMPUTE_CMASK_INFO_INPUT
    996 *
    997 *   @brief
    998 *       Input structure of AddrComputeCmaskInfo
    999 ***************************************************************************************************
   1000 */
   1001 typedef struct _ADDR_COMPUTE_CMASKINFO_INPUT
   1002 {
   1003     UINT_32             size;            ///< Size of this structure in bytes
   1004 
   1005     ADDR_CMASK_FLAGS    flags;           ///< CMASK flags
   1006     UINT_32             pitch;           ///< Pitch, in pixels, of color buffer
   1007     UINT_32             height;          ///< Height, in pixels, of color buffer
   1008     UINT_32             numSlices;       ///< Number of slices, of color buffer
   1009     BOOL_32             isLinear;        ///< Linear or tiled layout, Only SI can be linear
   1010     ADDR_TILEINFO*      pTileInfo;       ///< Tile info
   1011 
   1012     INT_32              tileIndex;       ///< Tile index, MUST be -1 if you don't want to use it
   1013                                          ///  while the global useTileIndex is set to 1
   1014     INT_32              macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
   1015                                          ///< README: When tileIndex is not -1, this must be valid
   1016 } ADDR_COMPUTE_CMASK_INFO_INPUT;
   1017 
   1018 /**
   1019 ***************************************************************************************************
   1020 *   ADDR_COMPUTE_CMASK_INFO_OUTPUT
   1021 *
   1022 *   @brief
   1023 *       Output structure of AddrComputeCmaskInfo
   1024 ***************************************************************************************************
   1025 */
   1026 typedef struct _ADDR_COMPUTE_CMASK_INFO_OUTPUT
   1027 {
   1028     UINT_32 size;           ///< Size of this structure in bytes
   1029 
   1030     UINT_32 pitch;          ///< Pitch in pixels of color buffer which
   1031                             ///  this Cmask matches. The size might be larger than
   1032                             ///  original color buffer pitch when called with
   1033                             ///  an unaligned pitch.
   1034     UINT_32 height;         ///< Height in pixels, as above
   1035     UINT_64 cmaskBytes;     ///< Size in bytes of CMask buffer
   1036     UINT_32 baseAlign;      ///< Base alignment
   1037     UINT_32 blockMax;       ///< Cmask block size. Need this to set CB_COLORn_MASK register
   1038     UINT_32 macroWidth;     ///< Macro width in pixels, actually squared cache shape
   1039     UINT_32 macroHeight;    ///< Macro height in pixels
   1040     UINT_64 sliceSize;      ///< Slice size, in bytes.
   1041 } ADDR_COMPUTE_CMASK_INFO_OUTPUT;
   1042 
   1043 /**
   1044 ***************************************************************************************************
   1045 *   AddrComputeCmaskInfo
   1046 *
   1047 *   @brief
   1048 *       Compute Cmask pitch, height, base alignment and size in bytes from color buffer
   1049 *       info
   1050 ***************************************************************************************************
   1051 */
   1052 ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskInfo(
   1053     ADDR_HANDLE                             hLib,
   1054     const ADDR_COMPUTE_CMASK_INFO_INPUT*    pIn,
   1055     ADDR_COMPUTE_CMASK_INFO_OUTPUT*         pOut);
   1056 
   1057 
   1058 
   1059 /**
   1060 ***************************************************************************************************
   1061 *   ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
   1062 *
   1063 *   @brief
   1064 *       Input structure for AddrComputeCmaskAddrFromCoord
   1065 *
   1066 ***************************************************************************************************
   1067 */
   1068 typedef struct _ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
   1069 {
   1070     UINT_32          size;           ///< Size of this structure in bytes
   1071     UINT_32          x;              ///< X coordinate
   1072     UINT_32          y;              ///< Y coordinate
   1073     UINT_64          fmaskAddr;      ///< Fmask addr for tc compatible Cmask
   1074     UINT_32          slice;          ///< Slice index
   1075     UINT_32          pitch;          ///< Pitch in pixels, of color buffer
   1076     UINT_32          height;         ///< Height in pixels, of color buffer
   1077     UINT_32          numSlices;      ///< Number of slices
   1078     UINT_32          bpp;
   1079     BOOL_32          isLinear;       ///< Linear or tiled layout, Only SI can be linear
   1080     ADDR_CMASK_FLAGS flags;          ///< CMASK flags
   1081     ADDR_TILEINFO*   pTileInfo;      ///< Tile info
   1082 
   1083     INT_32           tileIndex;      ///< Tile index, MUST be -1 if you don't want to use it
   1084                                      ///< while the global useTileIndex is set to 1
   1085     INT_32           macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
   1086                                      ///< README: When tileIndex is not -1, this must be valid
   1087 } ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT;
   1088 
   1089 /**
   1090 ***************************************************************************************************
   1091 *   ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
   1092 *
   1093 *   @brief
   1094 *       Output structure for AddrComputeCmaskAddrFromCoord
   1095 ***************************************************************************************************
   1096 */
   1097 typedef struct _ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
   1098 {
   1099     UINT_32 size;           ///< Size of this structure in bytes
   1100 
   1101     UINT_64 addr;           ///< CMASK address in bytes
   1102     UINT_32 bitPosition;    ///< Bit position within addr, 0-7. CMASK is 4 bpp,
   1103                             ///  so the address may be located in bit 0 (0) or 4 (4)
   1104 } ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT;
   1105 
   1106 /**
   1107 ***************************************************************************************************
   1108 *   AddrComputeCmaskAddrFromCoord
   1109 *
   1110 *   @brief
   1111 *       Compute Cmask address according to coordinates (of MSAA color buffer)
   1112 ***************************************************************************************************
   1113 */
   1114 ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskAddrFromCoord(
   1115     ADDR_HANDLE                                     hLib,
   1116     const ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT*   pIn,
   1117     ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT*        pOut);
   1118 
   1119 
   1120 
   1121 /**
   1122 ***************************************************************************************************
   1123 *   ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT
   1124 *
   1125 *   @brief
   1126 *       Input structure for AddrComputeCmaskCoordFromAddr
   1127 ***************************************************************************************************
   1128 */
   1129 typedef struct _ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT
   1130 {
   1131     UINT_32        size;            ///< Size of this structure in bytes
   1132 
   1133     UINT_64        addr;            ///< CMASK address in bytes
   1134     UINT_32        bitPosition;     ///< Bit position within addr, 0-7. CMASK is 4 bpp,
   1135                                     ///  so the address may be located in bit 0 (0) or 4 (4)
   1136     UINT_32        pitch;           ///< Pitch, in pixels
   1137     UINT_32        height;          ///< Height in pixels
   1138     UINT_32        numSlices;       ///< Number of slices
   1139     BOOL_32        isLinear;        ///< Linear or tiled layout, Only SI can be linear
   1140     ADDR_TILEINFO* pTileInfo;       ///< Tile info
   1141 
   1142     INT_32         tileIndex;       ///< Tile index, MUST be -1 if you don't want to use it
   1143                                     ///  while the global useTileIndex is set to 1
   1144     INT_32         macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
   1145                                     ///< README: When tileIndex is not -1, this must be valid
   1146 } ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT;
   1147 
   1148 /**
   1149 ***************************************************************************************************
   1150 *   ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT
   1151 *
   1152 *   @brief
   1153 *       Output structure for AddrComputeCmaskCoordFromAddr
   1154 ***************************************************************************************************
   1155 */
   1156 typedef struct _ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT
   1157 {
   1158     UINT_32 size;   ///< Size of this structure in bytes
   1159 
   1160     UINT_32 x;      ///< X coordinate
   1161     UINT_32 y;      ///< Y coordinate
   1162     UINT_32 slice;  ///< Slice index
   1163 } ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT;
   1164 
   1165 /**
   1166 ***************************************************************************************************
   1167 *   AddrComputeCmaskCoordFromAddr
   1168 *
   1169 *   @brief
   1170 *       Compute coordinates within color buffer (1st pixel of a micro tile) according to
   1171 *       Cmask address
   1172 ***************************************************************************************************
   1173 */
   1174 ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskCoordFromAddr(
   1175     ADDR_HANDLE                                     hLib,
   1176     const ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT*   pIn,
   1177     ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT*        pOut);
   1178 
   1179 
   1180 
   1181 ///////////////////////////////////////////////////////////////////////////////////////////////////
   1182 //                                     F-mask functions
   1183 ///////////////////////////////////////////////////////////////////////////////////////////////////
   1184 
   1185 /**
   1186 ***************************************************************************************************
   1187 *   ADDR_COMPUTE_FMASK_INFO_INPUT
   1188 *
   1189 *   @brief
   1190 *       Input structure for AddrComputeFmaskInfo
   1191 ***************************************************************************************************
   1192 */
   1193 typedef struct _ADDR_COMPUTE_FMASK_INFO_INPUT
   1194 {
   1195     UINT_32         size;               ///< Size of this structure in bytes
   1196 
   1197     AddrTileMode    tileMode;           ///< Tile mode
   1198     UINT_32         pitch;              ///< Surface pitch, in pixels
   1199     UINT_32         height;             ///< Surface height, in pixels
   1200     UINT_32         numSlices;          ///< Number of slice/depth
   1201     UINT_32         numSamples;         ///< Number of samples
   1202     UINT_32         numFrags;           ///< Number of fragments, leave it zero or the same as
   1203                                         ///  number of samples for normal AA; Set it to the
   1204                                         ///  number of fragments for EQAA
   1205     /// r800 and later HWL parameters
   1206     struct
   1207     {
   1208         UINT_32 resolved:   1;          ///< TRUE if the surface is for resolved fmask, only used
   1209                                         ///  by H/W clients. S/W should always set it to FALSE.
   1210         UINT_32 reserved:  31;          ///< Reserved for future use.
   1211     };
   1212     ADDR_TILEINFO*  pTileInfo;          ///< 2D tiling parameters. Clients must give valid data
   1213     INT_32          tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
   1214                                         ///  while the global useTileIndex is set to 1
   1215 } ADDR_COMPUTE_FMASK_INFO_INPUT;
   1216 
   1217 /**
   1218 ***************************************************************************************************
   1219 *   ADDR_COMPUTE_FMASK_INFO_OUTPUT
   1220 *
   1221 *   @brief
   1222 *       Output structure for AddrComputeFmaskInfo
   1223 ***************************************************************************************************
   1224 */
   1225 typedef struct _ADDR_COMPUTE_FMASK_INFO_OUTPUT
   1226 {
   1227     UINT_32         size;           ///< Size of this structure in bytes
   1228 
   1229     UINT_32         pitch;          ///< Pitch of fmask in pixels
   1230     UINT_32         height;         ///< Height of fmask in pixels
   1231     UINT_32         numSlices;      ///< Slices of fmask
   1232     UINT_64         fmaskBytes;     ///< Size of fmask in bytes
   1233     UINT_32         baseAlign;      ///< Base address alignment
   1234     UINT_32         pitchAlign;     ///< Pitch alignment
   1235     UINT_32         heightAlign;    ///< Height alignment
   1236     UINT_32         bpp;            ///< Bits per pixel of FMASK is: number of bit planes
   1237     UINT_32         numSamples;     ///< Number of samples, used for dump, export this since input
   1238                                     ///  may be changed in 9xx and above
   1239     /// r800 and later HWL parameters
   1240     ADDR_TILEINFO*  pTileInfo;      ///< Tile parameters used. Fmask can have different
   1241                                     ///  bank_height from color buffer
   1242     INT_32          tileIndex;      ///< Tile index, MUST be -1 if you don't want to use it
   1243                                     ///  while the global useTileIndex is set to 1
   1244     INT_32          macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
   1245     UINT_64         sliceSize;      ///< Size of slice in bytes
   1246 } ADDR_COMPUTE_FMASK_INFO_OUTPUT;
   1247 
   1248 /**
   1249 ***************************************************************************************************
   1250 *   AddrComputeFmaskInfo
   1251 *
   1252 *   @brief
   1253 *       Compute Fmask pitch/height/depth/alignments and size in bytes
   1254 ***************************************************************************************************
   1255 */
   1256 ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskInfo(
   1257     ADDR_HANDLE                             hLib,
   1258     const ADDR_COMPUTE_FMASK_INFO_INPUT*    pIn,
   1259     ADDR_COMPUTE_FMASK_INFO_OUTPUT*         pOut);
   1260 
   1261 
   1262 
   1263 /**
   1264 ***************************************************************************************************
   1265 *   ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT
   1266 *
   1267 *   @brief
   1268 *       Input structure for AddrComputeFmaskAddrFromCoord
   1269 ***************************************************************************************************
   1270 */
   1271 typedef struct _ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT
   1272 {
   1273     UINT_32         size;               ///< Size of this structure in bytes
   1274 
   1275     UINT_32         x;                  ///< X coordinate
   1276     UINT_32         y;                  ///< Y coordinate
   1277     UINT_32         slice;              ///< Slice index
   1278     UINT_32         plane;              ///< Plane number
   1279     UINT_32         sample;             ///< Sample index (fragment index for EQAA)
   1280 
   1281     UINT_32         pitch;              ///< Surface pitch, in pixels
   1282     UINT_32         height;             ///< Surface height, in pixels
   1283     UINT_32         numSamples;         ///< Number of samples
   1284     UINT_32         numFrags;           ///< Number of fragments, leave it zero or the same as
   1285                                         ///  number of samples for normal AA; Set it to the
   1286                                         ///  number of fragments for EQAA
   1287 
   1288     AddrTileMode    tileMode;           ///< Tile mode
   1289     union
   1290     {
   1291         struct
   1292         {
   1293             UINT_32  bankSwizzle;       ///< Bank swizzle
   1294             UINT_32  pipeSwizzle;       ///< Pipe swizzle
   1295         };
   1296         UINT_32     tileSwizzle;        ///< Combined swizzle, if useCombinedSwizzle is TRUE
   1297     };
   1298 
   1299     /// r800 and later HWL parameters
   1300     struct
   1301     {
   1302         UINT_32 resolved:   1;          ///< TRUE if this is a resolved fmask, used by H/W clients
   1303         UINT_32 ignoreSE:   1;          ///< TRUE if shader engines are ignored.
   1304         UINT_32 reserved:  30;          ///< Reserved for future use.
   1305     };
   1306     ADDR_TILEINFO*  pTileInfo;          ///< 2D tiling parameters. Client must provide all data
   1307 
   1308 } ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT;
   1309 
   1310 /**
   1311 ***************************************************************************************************
   1312 *   ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT
   1313 *
   1314 *   @brief
   1315 *       Output structure for AddrComputeFmaskAddrFromCoord
   1316 ***************************************************************************************************
   1317 */
   1318 typedef struct _ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT
   1319 {
   1320     UINT_32 size;           ///< Size of this structure in bytes
   1321 
   1322     UINT_64 addr;           ///< Fmask address
   1323     UINT_32 bitPosition;    ///< Bit position within fmaskAddr, 0-7.
   1324 } ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT;
   1325 
   1326 /**
   1327 ***************************************************************************************************
   1328 *   AddrComputeFmaskAddrFromCoord
   1329 *
   1330 *   @brief
   1331 *       Compute Fmask address according to coordinates (x,y,slice,sample,plane)
   1332 ***************************************************************************************************
   1333 */
   1334 ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskAddrFromCoord(
   1335     ADDR_HANDLE                                     hLib,
   1336     const ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT*   pIn,
   1337     ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT*        pOut);
   1338 
   1339 
   1340 
   1341 /**
   1342 ***************************************************************************************************
   1343 *   ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT
   1344 *
   1345 *   @brief
   1346 *       Input structure for AddrComputeFmaskCoordFromAddr
   1347 ***************************************************************************************************
   1348 */
   1349 typedef struct _ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT
   1350 {
   1351     UINT_32         size;               ///< Size of this structure in bytes
   1352 
   1353     UINT_64         addr;               ///< Address
   1354     UINT_32         bitPosition;        ///< Bit position within addr, 0-7.
   1355 
   1356     UINT_32         pitch;              ///< Pitch, in pixels
   1357     UINT_32         height;             ///< Height in pixels
   1358     UINT_32         numSamples;         ///< Number of samples
   1359     UINT_32         numFrags;           ///< Number of fragments
   1360     AddrTileMode    tileMode;           ///< Tile mode
   1361     union
   1362     {
   1363         struct
   1364         {
   1365             UINT_32  bankSwizzle;       ///< Bank swizzle
   1366             UINT_32  pipeSwizzle;       ///< Pipe swizzle
   1367         };
   1368         UINT_32     tileSwizzle;        ///< Combined swizzle, if useCombinedSwizzle is TRUE
   1369     };
   1370 
   1371     /// r800 and later HWL parameters
   1372     struct
   1373     {
   1374         UINT_32 resolved:   1;          ///< TRUE if this is a resolved fmask, used by HW components
   1375         UINT_32 ignoreSE:   1;          ///< TRUE if shader engines are ignored.
   1376         UINT_32 reserved:  30;          ///< Reserved for future use.
   1377     };
   1378     ADDR_TILEINFO*  pTileInfo;          ///< 2D tile parameters. Client must provide all data
   1379 
   1380 } ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT;
   1381 
   1382 /**
   1383 ***************************************************************************************************
   1384 *   ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT
   1385 *
   1386 *   @brief
   1387 *       Output structure for AddrComputeFmaskCoordFromAddr
   1388 ***************************************************************************************************
   1389 */
   1390 typedef struct _ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT
   1391 {
   1392     UINT_32 size;       ///< Size of this structure in bytes
   1393 
   1394     UINT_32 x;          ///< X coordinate
   1395     UINT_32 y;          ///< Y coordinate
   1396     UINT_32 slice;      ///< Slice index
   1397     UINT_32 plane;      ///< Plane number
   1398     UINT_32 sample;     ///< Sample index (fragment index for EQAA)
   1399 } ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT;
   1400 
   1401 /**
   1402 ***************************************************************************************************
   1403 *   AddrComputeFmaskCoordFromAddr
   1404 *
   1405 *   @brief
   1406 *       Compute FMASK coordinate from an given address
   1407 ***************************************************************************************************
   1408 */
   1409 ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskCoordFromAddr(
   1410     ADDR_HANDLE                                     hLib,
   1411     const ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT*   pIn,
   1412     ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT*        pOut);
   1413 
   1414 
   1415 
   1416 ///////////////////////////////////////////////////////////////////////////////////////////////////
   1417 //                          Element/utility functions
   1418 ///////////////////////////////////////////////////////////////////////////////////////////////////
   1419 
   1420 /**
   1421 ***************************************************************************************************
   1422 *   AddrGetVersion
   1423 *
   1424 *   @brief
   1425 *       Get AddrLib version number
   1426 ***************************************************************************************************
   1427 */
   1428 UINT_32 ADDR_API AddrGetVersion(ADDR_HANDLE hLib);
   1429 
   1430 /**
   1431 ***************************************************************************************************
   1432 *   AddrUseTileIndex
   1433 *
   1434 *   @brief
   1435 *       Return TRUE if tileIndex is enabled in this address library
   1436 ***************************************************************************************************
   1437 */
   1438 BOOL_32 ADDR_API AddrUseTileIndex(ADDR_HANDLE hLib);
   1439 
   1440 /**
   1441 ***************************************************************************************************
   1442 *   AddrUseCombinedSwizzle
   1443 *
   1444 *   @brief
   1445 *       Return TRUE if combined swizzle is enabled in this address library
   1446 ***************************************************************************************************
   1447 */
   1448 BOOL_32 ADDR_API AddrUseCombinedSwizzle(ADDR_HANDLE hLib);
   1449 
   1450 /**
   1451 ***************************************************************************************************
   1452 *   ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT
   1453 *
   1454 *   @brief
   1455 *       Input structure of AddrExtractBankPipeSwizzle
   1456 ***************************************************************************************************
   1457 */
   1458 typedef struct _ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT
   1459 {
   1460     UINT_32         size;           ///< Size of this structure in bytes
   1461 
   1462     UINT_32         base256b;       ///< Base256b value
   1463 
   1464     /// r800 and later HWL parameters
   1465     ADDR_TILEINFO*  pTileInfo;      ///< 2D tile parameters. Client must provide all data
   1466 
   1467     INT_32          tileIndex;      ///< Tile index, MUST be -1 if you don't want to use it
   1468                                     ///  while the global useTileIndex is set to 1
   1469     INT_32          macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
   1470                                     ///< README: When tileIndex is not -1, this must be valid
   1471 } ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT;
   1472 
   1473 /**
   1474 ***************************************************************************************************
   1475 *   ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT
   1476 *
   1477 *   @brief
   1478 *       Output structure of AddrExtractBankPipeSwizzle
   1479 ***************************************************************************************************
   1480 */
   1481 typedef struct _ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT
   1482 {
   1483     UINT_32 size;           ///< Size of this structure in bytes
   1484 
   1485     UINT_32 bankSwizzle;    ///< Bank swizzle
   1486     UINT_32 pipeSwizzle;    ///< Pipe swizzle
   1487 } ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT;
   1488 
   1489 /**
   1490 ***************************************************************************************************
   1491 *   AddrExtractBankPipeSwizzle
   1492 *
   1493 *   @brief
   1494 *       Extract Bank and Pipe swizzle from base256b
   1495 *   @return
   1496 *       ADDR_OK if no error
   1497 ***************************************************************************************************
   1498 */
   1499 ADDR_E_RETURNCODE ADDR_API AddrExtractBankPipeSwizzle(
   1500     ADDR_HANDLE                                 hLib,
   1501     const ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT*  pIn,
   1502     ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT*       pOut);
   1503 
   1504 
   1505 /**
   1506 ***************************************************************************************************
   1507 *   ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT
   1508 *
   1509 *   @brief
   1510 *       Input structure of AddrCombineBankPipeSwizzle
   1511 ***************************************************************************************************
   1512 */
   1513 typedef struct _ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT
   1514 {
   1515     UINT_32         size;           ///< Size of this structure in bytes
   1516 
   1517     UINT_32         bankSwizzle;    ///< Bank swizzle
   1518     UINT_32         pipeSwizzle;    ///< Pipe swizzle
   1519     UINT_64         baseAddr;       ///< Base address (leave it zero for driver clients)
   1520 
   1521     /// r800 and later HWL parameters
   1522     ADDR_TILEINFO*  pTileInfo;      ///< 2D tile parameters. Client must provide all data
   1523 
   1524     INT_32          tileIndex;      ///< Tile index, MUST be -1 if you don't want to use it
   1525                                     ///  while the global useTileIndex is set to 1
   1526     INT_32          macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
   1527                                     ///< README: When tileIndex is not -1, this must be valid
   1528 } ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT;
   1529 
   1530 /**
   1531 ***************************************************************************************************
   1532 *   ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT
   1533 *
   1534 *   @brief
   1535 *       Output structure of AddrCombineBankPipeSwizzle
   1536 ***************************************************************************************************
   1537 */
   1538 typedef struct _ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT
   1539 {
   1540     UINT_32 size;           ///< Size of this structure in bytes
   1541 
   1542     UINT_32 tileSwizzle;    ///< Combined swizzle
   1543 } ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT;
   1544 
   1545 /**
   1546 ***************************************************************************************************
   1547 *   AddrCombineBankPipeSwizzle
   1548 *
   1549 *   @brief
   1550 *       Combine Bank and Pipe swizzle
   1551 *   @return
   1552 *       ADDR_OK if no error
   1553 *   @note
   1554 *       baseAddr here is full MCAddress instead of base256b
   1555 ***************************************************************************************************
   1556 */
   1557 ADDR_E_RETURNCODE ADDR_API AddrCombineBankPipeSwizzle(
   1558     ADDR_HANDLE                                 hLib,
   1559     const ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT*  pIn,
   1560     ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT*       pOut);
   1561 
   1562 
   1563 
   1564 /**
   1565 ***************************************************************************************************
   1566 *   ADDR_COMPUTE_SLICESWIZZLE_INPUT
   1567 *
   1568 *   @brief
   1569 *       Input structure of AddrComputeSliceSwizzle
   1570 ***************************************************************************************************
   1571 */
   1572 typedef struct _ADDR_COMPUTE_SLICESWIZZLE_INPUT
   1573 {
   1574     UINT_32         size;               ///< Size of this structure in bytes
   1575 
   1576     AddrTileMode    tileMode;           ///< Tile Mode
   1577     UINT_32         baseSwizzle;        ///< Base tile swizzle
   1578     UINT_32         slice;              ///< Slice index
   1579     UINT_64         baseAddr;           ///< Base address, driver should leave it 0 in most cases
   1580 
   1581     /// r800 and later HWL parameters
   1582     ADDR_TILEINFO*  pTileInfo;          ///< 2D tile parameters. Actually banks needed here!
   1583 
   1584     INT_32          tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
   1585                                         ///  while the global useTileIndex is set to 1
   1586     INT_32          macroModeIndex;     ///< Index in macro tile mode table if there is one (CI)
   1587                                         ///< README: When tileIndex is not -1, this must be valid
   1588 } ADDR_COMPUTE_SLICESWIZZLE_INPUT;
   1589 
   1590 
   1591 
   1592 /**
   1593 ***************************************************************************************************
   1594 *   ADDR_COMPUTE_SLICESWIZZLE_OUTPUT
   1595 *
   1596 *   @brief
   1597 *       Output structure of AddrComputeSliceSwizzle
   1598 ***************************************************************************************************
   1599 */
   1600 typedef struct _ADDR_COMPUTE_SLICESWIZZLE_OUTPUT
   1601 {
   1602     UINT_32  size;           ///< Size of this structure in bytes
   1603 
   1604     UINT_32  tileSwizzle;    ///< Recalculated tileSwizzle value
   1605 } ADDR_COMPUTE_SLICESWIZZLE_OUTPUT;
   1606 
   1607 /**
   1608 ***************************************************************************************************
   1609 *   AddrComputeSliceSwizzle
   1610 *
   1611 *   @brief
   1612 *       Extract Bank and Pipe swizzle from base256b
   1613 *   @return
   1614 *       ADDR_OK if no error
   1615 ***************************************************************************************************
   1616 */
   1617 ADDR_E_RETURNCODE ADDR_API AddrComputeSliceSwizzle(
   1618     ADDR_HANDLE                             hLib,
   1619     const ADDR_COMPUTE_SLICESWIZZLE_INPUT*  pIn,
   1620     ADDR_COMPUTE_SLICESWIZZLE_OUTPUT*       pOut);
   1621 
   1622 
   1623 /**
   1624 ***************************************************************************************************
   1625 *   AddrSwizzleGenOption
   1626 *
   1627 *   @brief
   1628 *       Which swizzle generating options: legacy or linear
   1629 ***************************************************************************************************
   1630 */
   1631 typedef enum _AddrSwizzleGenOption
   1632 {
   1633     ADDR_SWIZZLE_GEN_DEFAULT    = 0,    ///< As is in client driver implemention for swizzle
   1634     ADDR_SWIZZLE_GEN_LINEAR     = 1,    ///< Using a linear increment of swizzle
   1635 } AddrSwizzleGenOption;
   1636 
   1637 /**
   1638 ***************************************************************************************************
   1639 *   AddrSwizzleOption
   1640 *
   1641 *   @brief
   1642 *       Controls how swizzle is generated
   1643 ***************************************************************************************************
   1644 */
   1645 typedef union _ADDR_SWIZZLE_OPTION
   1646 {
   1647     struct
   1648     {
   1649         UINT_32 genOption       : 1;    ///< The way swizzle is generated, see AddrSwizzleGenOption
   1650         UINT_32 reduceBankBit   : 1;    ///< TRUE if we need reduce swizzle bits
   1651         UINT_32 reserved        :30;    ///< Reserved bits
   1652     };
   1653 
   1654     UINT_32 value;
   1655 
   1656 } ADDR_SWIZZLE_OPTION;
   1657 
   1658 /**
   1659 ***************************************************************************************************
   1660 *   ADDR_COMPUTE_BASE_SWIZZLE_INPUT
   1661 *
   1662 *   @brief
   1663 *       Input structure of AddrComputeBaseSwizzle
   1664 ***************************************************************************************************
   1665 */
   1666 typedef struct _ADDR_COMPUTE_BASE_SWIZZLE_INPUT
   1667 {
   1668     UINT_32             size;           ///< Size of this structure in bytes
   1669 
   1670     ADDR_SWIZZLE_OPTION option;         ///< Swizzle option
   1671     UINT_32             surfIndex;      ///< Index of this surface type
   1672     AddrTileMode        tileMode;       ///< Tile Mode
   1673 
   1674     /// r800 and later HWL parameters
   1675     ADDR_TILEINFO*      pTileInfo;      ///< 2D tile parameters. Actually banks needed here!
   1676 
   1677     INT_32              tileIndex;      ///< Tile index, MUST be -1 if you don't want to use it
   1678                                         ///  while the global useTileIndex is set to 1
   1679     INT_32              macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
   1680                                         ///< README: When tileIndex is not -1, this must be valid
   1681 } ADDR_COMPUTE_BASE_SWIZZLE_INPUT;
   1682 
   1683 /**
   1684 ***************************************************************************************************
   1685 *   ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT
   1686 *
   1687 *   @brief
   1688 *       Output structure of AddrComputeBaseSwizzle
   1689 ***************************************************************************************************
   1690 */
   1691 typedef struct _ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT
   1692 {
   1693     UINT_32 size;           ///< Size of this structure in bytes
   1694 
   1695     UINT_32 tileSwizzle;    ///< Combined swizzle
   1696 } ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT;
   1697 
   1698 /**
   1699 ***************************************************************************************************
   1700 *   AddrComputeBaseSwizzle
   1701 *
   1702 *   @brief
   1703 *       Return a Combined Bank and Pipe swizzle base on surface based on surface type/index
   1704 *   @return
   1705 *       ADDR_OK if no error
   1706 ***************************************************************************************************
   1707 */
   1708 ADDR_E_RETURNCODE ADDR_API AddrComputeBaseSwizzle(
   1709     ADDR_HANDLE                             hLib,
   1710     const ADDR_COMPUTE_BASE_SWIZZLE_INPUT*  pIn,
   1711     ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT*       pOut);
   1712 
   1713 
   1714 
   1715 /**
   1716 ***************************************************************************************************
   1717 *   ELEM_GETEXPORTNORM_INPUT
   1718 *
   1719 *   @brief
   1720 *       Input structure for ElemGetExportNorm
   1721 *
   1722 ***************************************************************************************************
   1723 */
   1724 typedef struct _ELEM_GETEXPORTNORM_INPUT
   1725 {
   1726     UINT_32             size;       ///< Size of this structure in bytes
   1727 
   1728     AddrColorFormat     format;     ///< Color buffer format; Client should use ColorFormat
   1729     AddrSurfaceNumber   num;        ///< Surface number type; Client should use NumberType
   1730     AddrSurfaceSwap     swap;       ///< Surface swap byte swap; Client should use SurfaceSwap
   1731     UINT_32             numSamples; ///< Number of samples
   1732 } ELEM_GETEXPORTNORM_INPUT;
   1733 
   1734 /**
   1735 ***************************************************************************************************
   1736 *  ElemGetExportNorm
   1737 *
   1738 *   @brief
   1739 *       Helper function to check one format can be EXPORT_NUM, which is a register
   1740 *       CB_COLOR_INFO.SURFACE_FORMAT. FP16 can be reported as EXPORT_NORM for rv770 in r600
   1741 *       family
   1742 *   @note
   1743 *       The implementation is only for r600.
   1744 *       00 - EXPORT_FULL: PS exports are 4 pixels with 4 components with 32-bits-per-component. (two
   1745 *       clocks per export)
   1746 *       01 - EXPORT_NORM: PS exports are 4 pixels with 4 components with 16-bits-per-component. (one
   1747 *       clock per export)
   1748 *
   1749 ***************************************************************************************************
   1750 */
   1751 BOOL_32 ADDR_API ElemGetExportNorm(
   1752     ADDR_HANDLE                     hLib,
   1753     const ELEM_GETEXPORTNORM_INPUT* pIn);
   1754 
   1755 
   1756 
   1757 /**
   1758 ***************************************************************************************************
   1759 *   ELEM_FLT32TODEPTHPIXEL_INPUT
   1760 *
   1761 *   @brief
   1762 *       Input structure for addrFlt32ToDepthPixel
   1763 *
   1764 ***************************************************************************************************
   1765 */
   1766 typedef struct _ELEM_FLT32TODEPTHPIXEL_INPUT
   1767 {
   1768     UINT_32         size;           ///< Size of this structure in bytes
   1769 
   1770     AddrDepthFormat format;         ///< Depth buffer format
   1771     ADDR_FLT_32     comps[2];       ///< Component values (Z/stencil)
   1772 } ELEM_FLT32TODEPTHPIXEL_INPUT;
   1773 
   1774 /**
   1775 ***************************************************************************************************
   1776 *   ELEM_FLT32TODEPTHPIXEL_INPUT
   1777 *
   1778 *   @brief
   1779 *       Output structure for ElemFlt32ToDepthPixel
   1780 *
   1781 ***************************************************************************************************
   1782 */
   1783 typedef struct _ELEM_FLT32TODEPTHPIXEL_OUTPUT
   1784 {
   1785     UINT_32 size;           ///< Size of this structure in bytes
   1786 
   1787     UINT_8* pPixel;         ///< Real depth value. Same data type as depth buffer.
   1788                             ///  Client must provide enough storage for this type.
   1789     UINT_32 depthBase;      ///< Tile base in bits for depth bits
   1790     UINT_32 stencilBase;    ///< Tile base in bits for stencil bits
   1791     UINT_32 depthBits;      ///< Bits for depth
   1792     UINT_32 stencilBits;    ///< Bits for stencil
   1793 } ELEM_FLT32TODEPTHPIXEL_OUTPUT;
   1794 
   1795 /**
   1796 ***************************************************************************************************
   1797 *   ElemFlt32ToDepthPixel
   1798 *
   1799 *   @brief
   1800 *       Convert a FLT_32 value to a depth/stencil pixel value
   1801 *
   1802 *   @return
   1803 *       Return code
   1804 *
   1805 ***************************************************************************************************
   1806 */
   1807 ADDR_E_RETURNCODE ADDR_API ElemFlt32ToDepthPixel(
   1808     ADDR_HANDLE                         hLib,
   1809     const ELEM_FLT32TODEPTHPIXEL_INPUT* pIn,
   1810     ELEM_FLT32TODEPTHPIXEL_OUTPUT*      pOut);
   1811 
   1812 
   1813 
   1814 /**
   1815 ***************************************************************************************************
   1816 *   ELEM_FLT32TOCOLORPIXEL_INPUT
   1817 *
   1818 *   @brief
   1819 *       Input structure for addrFlt32ToColorPixel
   1820 *
   1821 ***************************************************************************************************
   1822 */
   1823 typedef struct _ELEM_FLT32TOCOLORPIXEL_INPUT
   1824 {
   1825     UINT_32            size;           ///< Size of this structure in bytes
   1826 
   1827     AddrColorFormat    format;         ///< Color buffer format
   1828     AddrSurfaceNumber  surfNum;        ///< Surface number
   1829     AddrSurfaceSwap    surfSwap;       ///< Surface swap
   1830     ADDR_FLT_32        comps[4];       ///< Component values (r/g/b/a)
   1831 } ELEM_FLT32TOCOLORPIXEL_INPUT;
   1832 
   1833 /**
   1834 ***************************************************************************************************
   1835 *   ELEM_FLT32TOCOLORPIXEL_INPUT
   1836 *
   1837 *   @brief
   1838 *       Output structure for ElemFlt32ToColorPixel
   1839 *
   1840 ***************************************************************************************************
   1841 */
   1842 typedef struct _ELEM_FLT32TOCOLORPIXEL_OUTPUT
   1843 {
   1844     UINT_32 size;       ///< Size of this structure in bytes
   1845 
   1846     UINT_8* pPixel;     ///< Real color value. Same data type as color buffer.
   1847                         ///  Client must provide enough storage for this type.
   1848 } ELEM_FLT32TOCOLORPIXEL_OUTPUT;
   1849 
   1850 /**
   1851 ***************************************************************************************************
   1852 *   ElemFlt32ToColorPixel
   1853 *
   1854 *   @brief
   1855 *       Convert a FLT_32 value to a red/green/blue/alpha pixel value
   1856 *
   1857 *   @return
   1858 *       Return code
   1859 *
   1860 ***************************************************************************************************
   1861 */
   1862 ADDR_E_RETURNCODE ADDR_API ElemFlt32ToColorPixel(
   1863     ADDR_HANDLE                         hLib,
   1864     const ELEM_FLT32TOCOLORPIXEL_INPUT* pIn,
   1865     ELEM_FLT32TOCOLORPIXEL_OUTPUT*      pOut);
   1866 
   1867 
   1868 /**
   1869 ***************************************************************************************************
   1870 *   ADDR_CONVERT_TILEINFOTOHW_INPUT
   1871 *
   1872 *   @brief
   1873 *       Input structure for AddrConvertTileInfoToHW
   1874 *   @note
   1875 *       When reverse is TRUE, indices are igonred
   1876 ***************************************************************************************************
   1877 */
   1878 typedef struct _ADDR_CONVERT_TILEINFOTOHW_INPUT
   1879 {
   1880     UINT_32         size;               ///< Size of this structure in bytes
   1881     BOOL_32         reverse;            ///< Convert control flag.
   1882                                         ///  FALSE: convert from real value to HW value;
   1883                                         ///  TRUE: convert from HW value to real value.
   1884 
   1885     /// r800 and later HWL parameters
   1886     ADDR_TILEINFO*  pTileInfo;          ///< Tile parameters with real value
   1887 
   1888     INT_32          tileIndex;          ///< Tile index, MUST be -1 if you don't want to use it
   1889                                         ///  while the global useTileIndex is set to 1
   1890     INT_32          macroModeIndex;     ///< Index in macro tile mode table if there is one (CI)
   1891                                         ///< README: When tileIndex is not -1, this must be valid
   1892 } ADDR_CONVERT_TILEINFOTOHW_INPUT;
   1893 
   1894 /**
   1895 ***************************************************************************************************
   1896 *   ADDR_CONVERT_TILEINFOTOHW_OUTPUT
   1897 *
   1898 *   @brief
   1899 *       Output structure for AddrConvertTileInfoToHW
   1900 ***************************************************************************************************
   1901 */
   1902 typedef struct _ADDR_CONVERT_TILEINFOTOHW_OUTPUT
   1903 {
   1904     UINT_32             size;               ///< Size of this structure in bytes
   1905 
   1906     /// r800 and later HWL parameters
   1907     ADDR_TILEINFO*      pTileInfo;          ///< Tile parameters with hardware register value
   1908 
   1909 } ADDR_CONVERT_TILEINFOTOHW_OUTPUT;
   1910 
   1911 /**
   1912 ***************************************************************************************************
   1913 *   AddrConvertTileInfoToHW
   1914 *
   1915 *   @brief
   1916 *       Convert tile info from real value to hardware register value
   1917 ***************************************************************************************************
   1918 */
   1919 ADDR_E_RETURNCODE ADDR_API AddrConvertTileInfoToHW(
   1920     ADDR_HANDLE                             hLib,
   1921     const ADDR_CONVERT_TILEINFOTOHW_INPUT*  pIn,
   1922     ADDR_CONVERT_TILEINFOTOHW_OUTPUT*       pOut);
   1923 
   1924 
   1925 
   1926 /**
   1927 ***************************************************************************************************
   1928 *   ADDR_CONVERT_TILEINDEX_INPUT
   1929 *
   1930 *   @brief
   1931 *       Input structure for AddrConvertTileIndex
   1932 ***************************************************************************************************
   1933 */
   1934 typedef struct _ADDR_CONVERT_TILEINDEX_INPUT
   1935 {
   1936     UINT_32         size;               ///< Size of this structure in bytes
   1937 
   1938     INT_32          tileIndex;          ///< Tile index
   1939     INT_32          macroModeIndex;     ///< Index in macro tile mode table if there is one (CI)
   1940     BOOL_32         tileInfoHw;         ///< Set to TRUE if client wants HW enum, otherwise actual
   1941 } ADDR_CONVERT_TILEINDEX_INPUT;
   1942 
   1943 /**
   1944 ***************************************************************************************************
   1945 *   ADDR_CONVERT_TILEINDEX_OUTPUT
   1946 *
   1947 *   @brief
   1948 *       Output structure for AddrConvertTileIndex
   1949 ***************************************************************************************************
   1950 */
   1951 typedef struct _ADDR_CONVERT_TILEINDEX_OUTPUT
   1952 {
   1953     UINT_32             size;           ///< Size of this structure in bytes
   1954 
   1955     AddrTileMode        tileMode;       ///< Tile mode
   1956     AddrTileType        tileType;       ///< Tile type
   1957     ADDR_TILEINFO*      pTileInfo;      ///< Tile info
   1958 
   1959 } ADDR_CONVERT_TILEINDEX_OUTPUT;
   1960 
   1961 /**
   1962 ***************************************************************************************************
   1963 *   AddrConvertTileIndex
   1964 *
   1965 *   @brief
   1966 *       Convert tile index to tile mode/type/info
   1967 ***************************************************************************************************
   1968 */
   1969 ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex(
   1970     ADDR_HANDLE                         hLib,
   1971     const ADDR_CONVERT_TILEINDEX_INPUT* pIn,
   1972     ADDR_CONVERT_TILEINDEX_OUTPUT*      pOut);
   1973 
   1974 
   1975 
   1976 /**
   1977 ***************************************************************************************************
   1978 *   ADDR_CONVERT_TILEINDEX1_INPUT
   1979 *
   1980 *   @brief
   1981 *       Input structure for AddrConvertTileIndex1 (without macro mode index)
   1982 ***************************************************************************************************
   1983 */
   1984 typedef struct _ADDR_CONVERT_TILEINDEX1_INPUT
   1985 {
   1986     UINT_32         size;               ///< Size of this structure in bytes
   1987 
   1988     INT_32          tileIndex;          ///< Tile index
   1989     UINT_32         bpp;                ///< Bits per pixel
   1990     UINT_32         numSamples;         ///< Number of samples
   1991     BOOL_32         tileInfoHw;         ///< Set to TRUE if client wants HW enum, otherwise actual
   1992 } ADDR_CONVERT_TILEINDEX1_INPUT;
   1993 
   1994 /**
   1995 ***************************************************************************************************
   1996 *   AddrConvertTileIndex1
   1997 *
   1998 *   @brief
   1999 *       Convert tile index to tile mode/type/info
   2000 ***************************************************************************************************
   2001 */
   2002 ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex1(
   2003     ADDR_HANDLE                             hLib,
   2004     const ADDR_CONVERT_TILEINDEX1_INPUT*    pIn,
   2005     ADDR_CONVERT_TILEINDEX_OUTPUT*          pOut);
   2006 
   2007 
   2008 
   2009 /**
   2010 ***************************************************************************************************
   2011 *   ADDR_GET_TILEINDEX_INPUT
   2012 *
   2013 *   @brief
   2014 *       Input structure for AddrGetTileIndex
   2015 ***************************************************************************************************
   2016 */
   2017 typedef struct _ADDR_GET_TILEINDEX_INPUT
   2018 {
   2019     UINT_32         size;           ///< Size of this structure in bytes
   2020 
   2021     AddrTileMode    tileMode;       ///< Tile mode
   2022     AddrTileType    tileType;       ///< Tile-type: disp/non-disp/...
   2023     ADDR_TILEINFO*  pTileInfo;      ///< Pointer to tile-info structure, can be NULL for linear/1D
   2024 } ADDR_GET_TILEINDEX_INPUT;
   2025 
   2026 /**
   2027 ***************************************************************************************************
   2028 *   ADDR_GET_TILEINDEX_OUTPUT
   2029 *
   2030 *   @brief
   2031 *       Output structure for AddrGetTileIndex
   2032 ***************************************************************************************************
   2033 */
   2034 typedef struct _ADDR_GET_TILEINDEX_OUTPUT
   2035 {
   2036     UINT_32         size;           ///< Size of this structure in bytes
   2037 
   2038     INT_32          index;          ///< index in table
   2039 } ADDR_GET_TILEINDEX_OUTPUT;
   2040 
   2041 /**
   2042 ***************************************************************************************************
   2043 *   AddrGetTileIndex
   2044 *
   2045 *   @brief
   2046 *       Get the tiling mode index in table
   2047 ***************************************************************************************************
   2048 */
   2049 ADDR_E_RETURNCODE ADDR_API AddrGetTileIndex(
   2050     ADDR_HANDLE                     hLib,
   2051     const ADDR_GET_TILEINDEX_INPUT* pIn,
   2052     ADDR_GET_TILEINDEX_OUTPUT*      pOut);
   2053 
   2054 
   2055 
   2056 
   2057 /**
   2058 ***************************************************************************************************
   2059 *   ADDR_PRT_INFO_INPUT
   2060 *
   2061 *   @brief
   2062 *       Input structure for AddrComputePrtInfo
   2063 ***************************************************************************************************
   2064 */
   2065 typedef struct _ADDR_PRT_INFO_INPUT
   2066 {
   2067     AddrFormat          format;        ///< Surface format
   2068     UINT_32             baseMipWidth;  ///< Base mipmap width
   2069     UINT_32             baseMipHeight; ///< Base mipmap height
   2070     UINT_32             baseMipDepth;  ///< Base mipmap depth
   2071     UINT_32             numFrags;      ///< Number of fragments,
   2072 } ADDR_PRT_INFO_INPUT;
   2073 
   2074 /**
   2075 ***************************************************************************************************
   2076 *   ADDR_PRT_INFO_OUTPUT
   2077 *
   2078 *   @brief
   2079 *       Input structure for AddrComputePrtInfo
   2080 ***************************************************************************************************
   2081 */
   2082 typedef struct _ADDR_PRT_INFO_OUTPUT
   2083 {
   2084     UINT_32             prtTileWidth;
   2085     UINT_32             prtTileHeight;
   2086 } ADDR_PRT_INFO_OUTPUT;
   2087 
   2088 /**
   2089 ***************************************************************************************************
   2090 *   AddrComputePrtInfo
   2091 *
   2092 *   @brief
   2093 *       Compute prt surface related information
   2094 ***************************************************************************************************
   2095 */
   2096 ADDR_E_RETURNCODE ADDR_API AddrComputePrtInfo(
   2097     ADDR_HANDLE                 hLib,
   2098     const ADDR_PRT_INFO_INPUT*  pIn,
   2099     ADDR_PRT_INFO_OUTPUT*       pOut);
   2100 
   2101 ///////////////////////////////////////////////////////////////////////////////////////////////////
   2102 //                                     DCC key functions
   2103 ///////////////////////////////////////////////////////////////////////////////////////////////////
   2104 
   2105 /**
   2106 ***************************************************************************************************
   2107 *   _ADDR_COMPUTE_DCCINFO_INPUT
   2108 *
   2109 *   @brief
   2110 *       Input structure of AddrComputeDccInfo
   2111 ***************************************************************************************************
   2112 */
   2113 typedef struct _ADDR_COMPUTE_DCCINFO_INPUT
   2114 {
   2115     UINT_32             size;            ///< Size of this structure in bytes
   2116     UINT_32             bpp;             ///< BitPP of color surface
   2117     UINT_32             numSamples;      ///< Sample number of color surface
   2118     UINT_64             colorSurfSize;   ///< Size of color surface to which dcc key is bound
   2119     AddrTileMode        tileMode;        ///< Tile mode of color surface
   2120     ADDR_TILEINFO       tileInfo;        ///< Tile info of color surface
   2121     UINT_32             tileSwizzle;     ///< Tile swizzle
   2122     INT_32              tileIndex;       ///< Tile index of color surface,
   2123                                          ///< MUST be -1 if you don't want to use it
   2124                                          ///< while the global useTileIndex is set to 1
   2125     INT_32              macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
   2126                                          ///< README: When tileIndex is not -1, this must be valid
   2127 } ADDR_COMPUTE_DCCINFO_INPUT;
   2128 
   2129 /**
   2130 ***************************************************************************************************
   2131 *   ADDR_COMPUTE_DCCINFO_OUTPUT
   2132 *
   2133 *   @brief
   2134 *       Output structure of AddrComputeDccInfo
   2135 ***************************************************************************************************
   2136 */
   2137 typedef struct _ADDR_COMPUTE_DCCINFO_OUTPUT
   2138 {
   2139     UINT_32 size;                 ///< Size of this structure in bytes
   2140     UINT_64 dccRamBaseAlign;      ///< Base alignment of dcc key
   2141     UINT_64 dccRamSize;           ///< Size of dcc key
   2142     UINT_64 dccFastClearSize;     ///< Size of dcc key portion that can be fast cleared
   2143     BOOL_32 subLvlCompressible;   ///< whether sub resource is compressiable
   2144 } ADDR_COMPUTE_DCCINFO_OUTPUT;
   2145 
   2146 /**
   2147 ***************************************************************************************************
   2148 *   AddrComputeDccInfo
   2149 *
   2150 *   @brief
   2151 *       Compute DCC key size, base alignment
   2152 *       info
   2153 ***************************************************************************************************
   2154 */
   2155 ADDR_E_RETURNCODE ADDR_API AddrComputeDccInfo(
   2156     ADDR_HANDLE                             hLib,
   2157     const ADDR_COMPUTE_DCCINFO_INPUT*       pIn,
   2158     ADDR_COMPUTE_DCCINFO_OUTPUT*            pOut);
   2159 
   2160 #if defined(__cplusplus)
   2161 }
   2162 #endif
   2163 
   2164 #endif // __ADDR_INTERFACE_H__
   2165 
   2166 
   2167