/*
* Copyright © 2014 Advanced Micro Devices, Inc.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
* AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*/
/**
***************************************************************************************************
* @file addrinterface.h
* @brief Contains the addrlib interfaces declaration and parameter defines
***************************************************************************************************
*/
#ifndef __ADDR_INTERFACE_H__
#define __ADDR_INTERFACE_H__
#include "addrtypes.h"
#if defined(__cplusplus)
extern "C"
{
#endif
#define ADDRLIB_VERSION_MAJOR 5
#define ADDRLIB_VERSION_MINOR 25
#define ADDRLIB_VERSION ((ADDRLIB_VERSION_MAJOR << 16) | ADDRLIB_VERSION_MINOR)
/// Virtually all interface functions need ADDR_HANDLE as first parameter
typedef VOID* ADDR_HANDLE;
/// Client handle used in callbacks
typedef VOID* ADDR_CLIENT_HANDLE;
/**
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // Callback functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* typedef VOID* (ADDR_API* ADDR_ALLOCSYSMEM)(
* const ADDR_ALLOCSYSMEM_INPUT* pInput);
* typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_FREESYSMEM)(
* VOID* pVirtAddr);
* typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_DEBUGPRINT)(
* const ADDR_DEBUGPRINT_INPUT* pInput);
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // Create/Destroy/Config functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrCreate()
* AddrDestroy()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // Surface functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrComputeSurfaceInfo()
* AddrComputeSurfaceAddrFromCoord()
* AddrComputeSurfaceCoordFromAddr()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // HTile functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrComputeHtileInfo()
* AddrComputeHtileAddrFromCoord()
* AddrComputeHtileCoordFromAddr()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // C-mask functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrComputeCmaskInfo()
* AddrComputeCmaskAddrFromCoord()
* AddrComputeCmaskCoordFromAddr()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // F-mask functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrComputeFmaskInfo()
* AddrComputeFmaskAddrFromCoord()
* AddrComputeFmaskCoordFromAddr()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // Element/Utility functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* ElemFlt32ToDepthPixel()
* ElemFlt32ToColorPixel()
* AddrExtractBankPipeSwizzle()
* AddrCombineBankPipeSwizzle()
* AddrComputeSliceSwizzle()
* AddrConvertTileInfoToHW()
* AddrConvertTileIndex()
* AddrConvertTileIndex1()
* AddrGetTileIndex()
* AddrComputeBaseSwizzle()
* AddrUseTileIndex()
* AddrUseCombinedSwizzle()
*
* /////////////////////////////////////////////////////////////////////////////////////////////////
* // Dump functions
* /////////////////////////////////////////////////////////////////////////////////////////////////
* AddrDumpSurfaceInfo()
* AddrDumpFmaskInfo()
* AddrDumpCmaskInfo()
* AddrDumpHtileInfo()
*
**/
///////////////////////////////////////////////////////////////////////////////////////////////////
// Callback functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* @brief Alloc system memory flags.
* @note These flags are reserved for future use and if flags are added will minimize the impact
* of the client.
***************************************************************************************************
*/
typedef union _ADDR_ALLOCSYSMEM_FLAGS
{
struct
{
UINT_32 reserved : 32; ///< Reserved for future use.
} fields;
UINT_32 value;
} ADDR_ALLOCSYSMEM_FLAGS;
/**
***************************************************************************************************
* @brief Alloc system memory input structure
***************************************************************************************************
*/
typedef struct _ADDR_ALLOCSYSMEM_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
ADDR_ALLOCSYSMEM_FLAGS flags; ///< System memory flags.
UINT_32 sizeInBytes; ///< System memory allocation size in bytes.
ADDR_CLIENT_HANDLE hClient; ///< Client handle
} ADDR_ALLOCSYSMEM_INPUT;
/**
***************************************************************************************************
* ADDR_ALLOCSYSMEM
* @brief
* Allocate system memory callback function. Returns valid pointer on success.
***************************************************************************************************
*/
typedef VOID* (ADDR_API* ADDR_ALLOCSYSMEM)(
const ADDR_ALLOCSYSMEM_INPUT* pInput);
/**
***************************************************************************************************
* @brief Free system memory input structure
***************************************************************************************************
*/
typedef struct _ADDR_FREESYSMEM_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
VOID* pVirtAddr; ///< Virtual address
ADDR_CLIENT_HANDLE hClient; ///< Client handle
} ADDR_FREESYSMEM_INPUT;
/**
***************************************************************************************************
* ADDR_FREESYSMEM
* @brief
* Free system memory callback function.
* Returns ADDR_OK on success.
***************************************************************************************************
*/
typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_FREESYSMEM)(
const ADDR_FREESYSMEM_INPUT* pInput);
/**
***************************************************************************************************
* @brief Print debug message input structure
***************************************************************************************************
*/
typedef struct _ADDR_DEBUGPRINT_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
CHAR* pDebugString; ///< Debug print string
va_list ap; ///< Variable argument list
ADDR_CLIENT_HANDLE hClient; ///< Client handle
} ADDR_DEBUGPRINT_INPUT;
/**
***************************************************************************************************
* ADDR_DEBUGPRINT
* @brief
* Print debug message callback function.
* Returns ADDR_OK on success.
***************************************************************************************************
*/
typedef ADDR_E_RETURNCODE (ADDR_API* ADDR_DEBUGPRINT)(
const ADDR_DEBUGPRINT_INPUT* pInput);
/**
***************************************************************************************************
* ADDR_CALLBACKS
*
* @brief
* Address Library needs client to provide system memory alloc/free routines.
***************************************************************************************************
*/
typedef struct _ADDR_CALLBACKS
{
ADDR_ALLOCSYSMEM allocSysMem; ///< Routine to allocate system memory
ADDR_FREESYSMEM freeSysMem; ///< Routine to free system memory
ADDR_DEBUGPRINT debugPrint; ///< Routine to print debug message
} ADDR_CALLBACKS;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Create/Destroy functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* ADDR_CREATE_FLAGS
*
* @brief
* This structure is used to pass some setup in creation of AddrLib
* @note
***************************************************************************************************
*/
typedef union _ADDR_CREATE_FLAGS
{
struct
{
UINT_32 noCubeMipSlicesPad : 1; ///< Turn cubemap faces padding off
UINT_32 fillSizeFields : 1; ///< If clients fill size fields in all input and
/// output structure
UINT_32 useTileIndex : 1; ///< Make tileIndex field in input valid
UINT_32 useCombinedSwizzle : 1; ///< Use combined tile swizzle
UINT_32 checkLast2DLevel : 1; ///< Check the last 2D mip sub level
UINT_32 useHtileSliceAlign : 1; ///< Do htile single slice alignment
UINT_32 degradeBaseLevel : 1; ///< Degrade to 1D modes automatically for base level
UINT_32 allowLargeThickTile : 1; ///< Allow 64*thickness*bytesPerPixel > rowSize
UINT_32 reserved : 24; ///< Reserved bits for future use
};
UINT_32 value;
} ADDR_CREATE_FLAGS;
/**
***************************************************************************************************
* ADDR_REGISTER_VALUE
*
* @brief
* Data from registers to setup AddrLib global data, used in AddrCreate
***************************************************************************************************
*/
typedef struct _ADDR_REGISTER_VALUE
{
UINT_32 gbAddrConfig; ///< For R8xx, use GB_ADDR_CONFIG register value.
/// For R6xx/R7xx, use GB_TILING_CONFIG.
/// But they can be treated as the same.
/// if this value is 0, use chip to set default value
UINT_32 backendDisables; ///< 1 bit per backend, starting with LSB. 1=disabled,0=enabled.
/// Register value of CC_RB_BACKEND_DISABLE.BACKEND_DISABLE
/// R800 registers-----------------------------------------------
UINT_32 noOfBanks; ///< Number of h/w ram banks - For r800: MC_ARB_RAMCFG.NOOFBANK
/// No enums for this value in h/w header files
/// 0: 4
/// 1: 8
/// 2: 16
UINT_32 noOfRanks; /// MC_ARB_RAMCFG.NOOFRANK
/// 0: 1
/// 1: 2
/// SI (R1000) registers-----------------------------------------
const UINT_32* pTileConfig; ///< Global tile setting tables
UINT_32 noOfEntries; ///< Number of entries in pTileConfig
///< CI registers-------------------------------------------------
const UINT_32* pMacroTileConfig; ///< Global macro tile mode table
UINT_32 noOfMacroEntries; ///< Number of entries in pMacroTileConfig
} ADDR_REGISTER_VALUE;
/**
***************************************************************************************************
* ADDR_CREATE_INPUT
*
* @brief
* Parameters use to create an AddrLib Object. Caller must provide all fields.
*
***************************************************************************************************
*/
typedef struct _ADDR_CREATE_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 chipEngine; ///< Chip Engine
UINT_32 chipFamily; ///< Chip Family
UINT_32 chipRevision; ///< Chip Revision
ADDR_CALLBACKS callbacks; ///< Callbacks for sysmem alloc/free/print
ADDR_CREATE_FLAGS createFlags; ///< Flags to setup AddrLib
ADDR_REGISTER_VALUE regValue; ///< Data from registers to setup AddrLib global data
ADDR_CLIENT_HANDLE hClient; ///< Client handle
UINT_32 minPitchAlignPixels; ///< Minimum pitch alignment in pixels
} ADDR_CREATE_INPUT;
/**
***************************************************************************************************
* ADDR_CREATEINFO_OUTPUT
*
* @brief
* Return AddrLib handle to client driver
*
***************************************************************************************************
*/
typedef struct _ADDR_CREATE_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
ADDR_HANDLE hLib; ///< Address lib handle
} ADDR_CREATE_OUTPUT;
/**
***************************************************************************************************
* AddrCreate
*
* @brief
* Create AddrLib object, must be called before any interface calls
*
* @return
* ADDR_OK if successful
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrCreate(
const ADDR_CREATE_INPUT* pAddrCreateIn,
ADDR_CREATE_OUTPUT* pAddrCreateOut);
/**
***************************************************************************************************
* AddrDestroy
*
* @brief
* Destroy AddrLib object, must be called to free internally allocated resources.
*
* @return
* ADDR_OK if successful
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrDestroy(
ADDR_HANDLE hLib);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Surface functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* @brief
* Bank/tiling parameters. On function input, these can be set as desired or
* left 0 for AddrLib to calculate/default. On function output, these are the actual
* parameters used.
* @note
* Valid bankWidth/bankHeight value:
* 1,2,4,8. They are factors instead of pixels or bytes.
*
* The bank number remains constant across each row of the
* macro tile as each pipe is selected, so the number of
* tiles in the x direction with the same bank number will
* be bank_width * num_pipes.
***************************************************************************************************
*/
typedef struct _ADDR_TILEINFO
{
/// Any of these parameters can be set to 0 to use the HW default.
UINT_32 banks; ///< Number of banks, numerical value
UINT_32 bankWidth; ///< Number of tiles in the X direction in the same bank
UINT_32 bankHeight; ///< Number of tiles in the Y direction in the same bank
UINT_32 macroAspectRatio; ///< Macro tile aspect ratio. 1-1:1, 2-4:1, 4-16:1, 8-64:1
UINT_32 tileSplitBytes; ///< Tile split size, in bytes
AddrPipeCfg pipeConfig; ///< Pipe Config = HW enum + 1
} ADDR_TILEINFO;
// Create a define to avoid client change. The removal of R800 is because we plan to implement SI
// within 800 HWL - An AddrPipeCfg is added in above data structure
typedef ADDR_TILEINFO ADDR_R800_TILEINFO;
/**
***************************************************************************************************
* @brief
* Information needed by quad buffer stereo support
***************************************************************************************************
*/
typedef struct _ADDR_QBSTEREOINFO
{
UINT_32 eyeHeight; ///< Height (in pixel rows) to right eye
UINT_32 rightOffset; ///< Offset (in bytes) to right eye
UINT_32 rightSwizzle; ///< TileSwizzle for right eyes
} ADDR_QBSTEREOINFO;
/**
***************************************************************************************************
* ADDR_SURFACE_FLAGS
*
* @brief
* Surface flags
***************************************************************************************************
*/
typedef union _ADDR_SURFACE_FLAGS
{
struct
{
UINT_32 color : 1; ///< Flag indicates this is a color buffer
UINT_32 depth : 1; ///< Flag indicates this is a depth/stencil buffer
UINT_32 stencil : 1; ///< Flag indicates this is a stencil buffer
UINT_32 texture : 1; ///< Flag indicates this is a texture
UINT_32 cube : 1; ///< Flag indicates this is a cubemap
UINT_32 volume : 1; ///< Flag indicates this is a volume texture
UINT_32 fmask : 1; ///< Flag indicates this is an fmask
UINT_32 cubeAsArray : 1; ///< Flag indicates if treat cubemap as arrays
UINT_32 compressZ : 1; ///< Flag indicates z buffer is compressed
UINT_32 overlay : 1; ///< Flag indicates this is an overlay surface
UINT_32 noStencil : 1; ///< Flag indicates this depth has no separate stencil
UINT_32 display : 1; ///< Flag indicates this should match display controller req.
UINT_32 opt4Space : 1; ///< Flag indicates this surface should be optimized for space
/// i.e. save some memory but may lose performance
UINT_32 prt : 1; ///< Flag for partially resident texture
UINT_32 qbStereo : 1; ///< Quad buffer stereo surface
UINT_32 pow2Pad : 1; ///< SI: Pad to pow2, must set for mipmap (include level0)
UINT_32 interleaved : 1; ///< Special flag for interleaved YUV surface padding
UINT_32 degrade4Space : 1; ///< Degrade base level's tile mode to save memory
UINT_32 tcCompatible : 1; ///< Flag indicates surface needs to be shader readable
UINT_32 dispTileType : 1; ///< NI: force display Tiling for 128 bit shared resoruce
UINT_32 dccCompatible : 1; ///< VI: whether to support dcc fast clear
UINT_32 czDispCompatible: 1; ///< SI+: CZ family (Carrizo) has a HW bug needs special alignment.
///< This flag indicates we need to follow the alignment with
///< CZ families or other ASICs under PX configuration + CZ.
UINT_32 reserved :10; ///< Reserved bits
};
UINT_32 value;
} ADDR_SURFACE_FLAGS;
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_INFO_INPUT
*
* @brief
* Input structure for AddrComputeSurfaceInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_INFO_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrTileMode tileMode; ///< Tile mode
AddrFormat format; ///< If format is set to valid one, bpp/width/height
/// might be overwritten
UINT_32 bpp; ///< Bits per pixel
UINT_32 numSamples; ///< Number of samples
UINT_32 width; ///< Width, in pixels
UINT_32 height; ///< Height, in pixels
UINT_32 numSlices; ///< Number surface slice/depth,
/// Note:
/// For cubemap, driver clients usually set numSlices
/// to 1 in per-face calc.
/// For 7xx and above, we need pad faces as slices.
/// In this case, clients should set numSlices to 6 and
/// this is also can be turned off by createFlags when
/// calling AddrCreate
UINT_32 slice; ///< Slice index
UINT_32 mipLevel; ///< Current mipmap level.
/// Padding/tiling have different rules for level0 and
/// sublevels
ADDR_SURFACE_FLAGS flags; ///< Surface type flags
UINT_32 numFrags; ///< Number of fragments, leave it zero or the same as
/// number of samples for normal AA; Set it to the
/// number of fragments for EQAA
/// r800 and later HWL parameters
// Needed by 2D tiling, for linear and 1D tiling, just keep them 0's
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Set to 0 to default/calculate
AddrTileType tileType; ///< Micro tiling type, not needed when tileIndex != -1
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
UINT_32 basePitch; ///< Base level pitch in pixels, 0 means ignored, is a
/// must for mip levels from SI+.
/// Don't use pitch in blocks for compressed formats!
} ADDR_COMPUTE_SURFACE_INFO_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_INFO_OUTPUT
*
* @brief
* Output structure for AddrComputeSurfInfo
* @note
Element: AddrLib unit for computing. e.g. BCn: 4x4 blocks; R32B32B32: 32bit with 3x pitch
Pixel: Original pixel
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_INFO_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 pitch; ///< Pitch in elements (in blocks for compressed formats)
UINT_32 height; ///< Height in elements (in blocks for compressed formats)
UINT_32 depth; ///< Number of slice/depth
UINT_64 surfSize; ///< Surface size in bytes
AddrTileMode tileMode; ///< Actual tile mode. May differ from that in input
UINT_32 baseAlign; ///< Base address alignment
UINT_32 pitchAlign; ///< Pitch alignment, in elements
UINT_32 heightAlign; ///< Height alignment, in elements
UINT_32 depthAlign; ///< Depth alignment, aligned to thickness, for 3d texture
UINT_32 bpp; ///< Bits per elements (e.g. blocks for BCn, 1/3 for 96bit)
UINT_32 pixelPitch; ///< Pitch in original pixels
UINT_32 pixelHeight; ///< Height in original pixels
UINT_32 pixelBits; ///< Original bits per pixel, passed from input
UINT_64 sliceSize; ///< Size of slice specified by input's slice
/// The result is controlled by surface flags & createFlags
/// By default this value equals to surfSize for volume
UINT_32 pitchTileMax; ///< PITCH_TILE_MAX value for h/w register
UINT_32 heightTileMax; ///< HEIGHT_TILE_MAX value for h/w register
UINT_32 sliceTileMax; ///< SLICE_TILE_MAX value for h/w register
UINT_32 numSamples; ///< Pass the effective numSamples processed in this call
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< Tile parameters used. Filled in if 0 on input
AddrTileType tileType; ///< Micro tiling type, only valid when tileIndex != -1
INT_32 tileIndex; ///< Tile index, MAY be "downgraded"
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
/// Special information to work around SI mipmap swizzle bug UBTS #317508
BOOL_32 last2DLevel; ///< TRUE if this is the last 2D(3D) tiled
///< Only meaningful when create flag checkLast2DLevel is set
/// Stereo info
ADDR_QBSTEREOINFO* pStereoInfo;///< Stereo information, needed when .qbStereo flag is TRUE
} ADDR_COMPUTE_SURFACE_INFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputeSurfaceInfo
*
* @brief
* Compute surface width/height/depth/alignments and suitable tiling mode
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceInfo(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_SURFACE_INFO_INPUT* pIn,
ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
*
* @brief
* Input structure for AddrComputeSurfaceAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Slice index
UINT_32 sample; ///< Sample index, use fragment index for EQAA
UINT_32 bpp; ///< Bits per pixel
UINT_32 pitch; ///< Surface pitch, in pixels
UINT_32 height; ///< Surface height, in pixels
UINT_32 numSlices; ///< Surface depth
UINT_32 numSamples; ///< Number of samples
AddrTileMode tileMode; ///< Tile mode
BOOL_32 isDepth; ///< TRUE if the surface uses depth sample ordering within
/// micro tile. Textures can also choose depth sample order
UINT_32 tileBase; ///< Base offset (in bits) inside micro tile which handles
/// the case that components are stored separately
UINT_32 compBits; ///< The component bits actually needed(for planar surface)
UINT_32 numFrags; ///< Number of fragments, leave it zero or the same as
/// number of samples for normal AA; Set it to the
/// number of fragments for EQAA
/// r800 and later HWL parameters
// Used for 1D tiling above
AddrTileType tileType; ///< See defintion of AddrTileType
struct
{
UINT_32 ignoreSE : 1; ///< TRUE if shader engines are ignored. This is texture
/// only flag. Only non-RT texture can set this to TRUE
UINT_32 reserved :31; ///< Reserved for future use.
};
// 2D tiling needs following structure
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Client must provide all data
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
union
{
struct
{
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
};
UINT_32 tileSwizzle; ///< Combined swizzle, if useCombinedSwizzle is TRUE
};
#if ADDR_AM_BUILD // These two fields are not valid in SW blt since no HTILE access
UINT_32 addr5Swizzle; ///< ADDR5_SWIZZLE_MASK of DB_DEPTH_INFO
BOOL_32 is32ByteTile; ///< Caller must have access to HTILE buffer and know if
/// this tile is compressed to 32B
#endif
} ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
*
* @brief
* Output structure for AddrComputeSurfaceAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Byte address
UINT_32 bitPosition; ///< Bit position within surfaceAddr, 0-7.
/// For surface bpp < 8, e.g. FMT_1.
UINT_32 prtBlockIndex; ///< Index of a PRT tile (64K block)
} ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT;
/**
***************************************************************************************************
* AddrComputeSurfaceAddrFromCoord
*
* @brief
* Compute surface address from a given coordinate.
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceAddrFromCoord(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_INPUT* pIn,
ADDR_COMPUTE_SURFACE_ADDRFROMCOORD_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT
*
* @brief
* Input structure for AddrComputeSurfaceCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Address in bytes
UINT_32 bitPosition; ///< Bit position in addr. 0-7. for surface bpp < 8,
/// e.g. FMT_1;
UINT_32 bpp; ///< Bits per pixel
UINT_32 pitch; ///< Pitch, in pixels
UINT_32 height; ///< Height in pixels
UINT_32 numSlices; ///< Surface depth
UINT_32 numSamples; ///< Number of samples
AddrTileMode tileMode; ///< Tile mode
BOOL_32 isDepth; ///< Surface uses depth sample ordering within micro tile.
/// Note: Textures can choose depth sample order as well.
UINT_32 tileBase; ///< Base offset (in bits) inside micro tile which handles
/// the case that components are stored separately
UINT_32 compBits; ///< The component bits actually needed(for planar surface)
UINT_32 numFrags; ///< Number of fragments, leave it zero or the same as
/// number of samples for normal AA; Set it to the
/// number of fragments for EQAA
/// r800 and later HWL parameters
// Used for 1D tiling above
AddrTileType tileType; ///< See defintion of AddrTileType
struct
{
UINT_32 ignoreSE : 1; ///< TRUE if shader engines are ignored. This is texture
/// only flag. Only non-RT texture can set this to TRUE
UINT_32 reserved :31; ///< Reserved for future use.
};
// 2D tiling needs following structure
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Client must provide all data
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
union
{
struct
{
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
};
UINT_32 tileSwizzle; ///< Combined swizzle, if useCombinedSwizzle is TRUE
};
} ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
*
* @brief
* Output structure for AddrComputeSurfaceCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Index of slices
UINT_32 sample; ///< Index of samples, means fragment index for EQAA
} ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT;
/**
***************************************************************************************************
* AddrComputeSurfaceCoordFromAddr
*
* @brief
* Compute coordinate from a given surface address
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeSurfaceCoordFromAddr(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_SURFACE_COORDFROMADDR_INPUT* pIn,
ADDR_COMPUTE_SURFACE_COORDFROMADDR_OUTPUT* pOut);
///////////////////////////////////////////////////////////////////////////////////////////////////
// HTile functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* ADDR_HTILE_FLAGS
*
* @brief
* HTILE flags
***************************************************************************************************
*/
typedef union _ADDR_HTILE_FLAGS
{
struct
{
UINT_32 tcCompatible : 1; ///< Flag indicates surface needs to be shader readable
UINT_32 reserved :31; ///< Reserved bits
};
UINT_32 value;
} ADDR_HTILE_FLAGS;
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_INFO_INPUT
*
* @brief
* Input structure of AddrComputeHtileInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_INFO_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
ADDR_HTILE_FLAGS flags; ///< HTILE flags
UINT_32 pitch; ///< Surface pitch, in pixels
UINT_32 height; ///< Surface height, in pixels
UINT_32 numSlices; ///< Number of slices
BOOL_32 isLinear; ///< Linear or tiled HTILE layout
AddrHtileBlockSize blockWidth; ///< 4 or 8. EG above only support 8
AddrHtileBlockSize blockHeight; ///< 4 or 8. EG above only support 8
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_HTILE_INFO_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_INFO_OUTPUT
*
* @brief
* Output structure of AddrComputeHtileInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_INFO_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 pitch; ///< Pitch in pixels of depth buffer represented in this
/// HTile buffer. This might be larger than original depth
/// buffer pitch when called with an unaligned pitch.
UINT_32 height; ///< Height in pixels, as above
UINT_64 htileBytes; ///< Size of HTILE buffer, in bytes
UINT_32 baseAlign; ///< Base alignment
UINT_32 bpp; ///< Bits per pixel for HTILE is how many bits for an 8x8 block!
UINT_32 macroWidth; ///< Macro width in pixels, actually squared cache shape
UINT_32 macroHeight; ///< Macro height in pixels
UINT_64 sliceSize; ///< Slice size, in bytes.
} ADDR_COMPUTE_HTILE_INFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputeHtileInfo
*
* @brief
* Compute Htile pitch, height, base alignment and size in bytes
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeHtileInfo(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_HTILE_INFO_INPUT* pIn,
ADDR_COMPUTE_HTILE_INFO_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
*
* @brief
* Input structure for AddrComputeHtileAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 pitch; ///< Pitch, in pixels
UINT_32 height; ///< Height in pixels
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Index of slice
UINT_32 numSlices; ///< Number of slices
BOOL_32 isLinear; ///< Linear or tiled HTILE layout
AddrHtileBlockSize blockWidth; ///< 4 or 8. 1 means 8, 0 means 4. EG above only support 8
AddrHtileBlockSize blockHeight; ///< 4 or 8. 1 means 8, 0 means 4. EG above only support 8
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
*
* @brief
* Output structure for AddrComputeHtileAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Address in bytes
UINT_32 bitPosition; ///< Bit position, 0 or 4. CMASK and HTILE shares some lib method.
/// So we keep bitPosition for HTILE as well
} ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT;
/**
***************************************************************************************************
* AddrComputeHtileAddrFromCoord
*
* @brief
* Compute Htile address according to coordinates (of depth buffer)
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeHtileAddrFromCoord(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_HTILE_ADDRFROMCOORD_INPUT* pIn,
ADDR_COMPUTE_HTILE_ADDRFROMCOORD_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT
*
* @brief
* Input structure for AddrComputeHtileCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Address
UINT_32 bitPosition; ///< Bit position 0 or 4. CMASK and HTILE share some methods
/// so we keep bitPosition for HTILE as well
UINT_32 pitch; ///< Pitch, in pixels
UINT_32 height; ///< Height, in pixels
UINT_32 numSlices; ///< Number of slices
BOOL_32 isLinear; ///< Linear or tiled HTILE layout
AddrHtileBlockSize blockWidth; ///< 4 or 8. 1 means 8, 0 means 4. R8xx/R9xx only support 8
AddrHtileBlockSize blockHeight; ///< 4 or 8. 1 means 8, 0 means 4. R8xx/R9xx only support 8
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
*
* @brief
* Output structure for AddrComputeHtileCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Slice index
} ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT;
/**
***************************************************************************************************
* AddrComputeHtileCoordFromAddr
*
* @brief
* Compute coordinates within depth buffer (1st pixel of a micro tile) according to
* Htile address
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeHtileCoordFromAddr(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_HTILE_COORDFROMADDR_INPUT* pIn,
ADDR_COMPUTE_HTILE_COORDFROMADDR_OUTPUT* pOut);
///////////////////////////////////////////////////////////////////////////////////////////////////
// C-mask functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* ADDR_CMASK_FLAGS
*
* @brief
* CMASK flags
***************************************************************************************************
*/
typedef union _ADDR_CMASK_FLAGS
{
struct
{
UINT_32 tcCompatible : 1; ///< Flag indicates surface needs to be shader readable
UINT_32 reserved :31; ///< Reserved bits
};
UINT_32 value;
} ADDR_CMASK_FLAGS;
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_INFO_INPUT
*
* @brief
* Input structure of AddrComputeCmaskInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASKINFO_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
ADDR_CMASK_FLAGS flags; ///< CMASK flags
UINT_32 pitch; ///< Pitch, in pixels, of color buffer
UINT_32 height; ///< Height, in pixels, of color buffer
UINT_32 numSlices; ///< Number of slices, of color buffer
BOOL_32 isLinear; ///< Linear or tiled layout, Only SI can be linear
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_CMASK_INFO_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_INFO_OUTPUT
*
* @brief
* Output structure of AddrComputeCmaskInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASK_INFO_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 pitch; ///< Pitch in pixels of color buffer which
/// this Cmask matches. The size might be larger than
/// original color buffer pitch when called with
/// an unaligned pitch.
UINT_32 height; ///< Height in pixels, as above
UINT_64 cmaskBytes; ///< Size in bytes of CMask buffer
UINT_32 baseAlign; ///< Base alignment
UINT_32 blockMax; ///< Cmask block size. Need this to set CB_COLORn_MASK register
UINT_32 macroWidth; ///< Macro width in pixels, actually squared cache shape
UINT_32 macroHeight; ///< Macro height in pixels
UINT_64 sliceSize; ///< Slice size, in bytes.
} ADDR_COMPUTE_CMASK_INFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputeCmaskInfo
*
* @brief
* Compute Cmask pitch, height, base alignment and size in bytes from color buffer
* info
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskInfo(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_CMASK_INFO_INPUT* pIn,
ADDR_COMPUTE_CMASK_INFO_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
*
* @brief
* Input structure for AddrComputeCmaskAddrFromCoord
*
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_64 fmaskAddr; ///< Fmask addr for tc compatible Cmask
UINT_32 slice; ///< Slice index
UINT_32 pitch; ///< Pitch in pixels, of color buffer
UINT_32 height; ///< Height in pixels, of color buffer
UINT_32 numSlices; ///< Number of slices
UINT_32 bpp;
BOOL_32 isLinear; ///< Linear or tiled layout, Only SI can be linear
ADDR_CMASK_FLAGS flags; ///< CMASK flags
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
///< while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
*
* @brief
* Output structure for AddrComputeCmaskAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< CMASK address in bytes
UINT_32 bitPosition; ///< Bit position within addr, 0-7. CMASK is 4 bpp,
/// so the address may be located in bit 0 (0) or 4 (4)
} ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT;
/**
***************************************************************************************************
* AddrComputeCmaskAddrFromCoord
*
* @brief
* Compute Cmask address according to coordinates (of MSAA color buffer)
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskAddrFromCoord(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_CMASK_ADDRFROMCOORD_INPUT* pIn,
ADDR_COMPUTE_CMASK_ADDRFROMCOORD_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT
*
* @brief
* Input structure for AddrComputeCmaskCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< CMASK address in bytes
UINT_32 bitPosition; ///< Bit position within addr, 0-7. CMASK is 4 bpp,
/// so the address may be located in bit 0 (0) or 4 (4)
UINT_32 pitch; ///< Pitch, in pixels
UINT_32 height; ///< Height in pixels
UINT_32 numSlices; ///< Number of slices
BOOL_32 isLinear; ///< Linear or tiled layout, Only SI can be linear
ADDR_TILEINFO* pTileInfo; ///< Tile info
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT
*
* @brief
* Output structure for AddrComputeCmaskCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Slice index
} ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT;
/**
***************************************************************************************************
* AddrComputeCmaskCoordFromAddr
*
* @brief
* Compute coordinates within color buffer (1st pixel of a micro tile) according to
* Cmask address
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeCmaskCoordFromAddr(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_CMASK_COORDFROMADDR_INPUT* pIn,
ADDR_COMPUTE_CMASK_COORDFROMADDR_OUTPUT* pOut);
///////////////////////////////////////////////////////////////////////////////////////////////////
// F-mask functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_INFO_INPUT
*
* @brief
* Input structure for AddrComputeFmaskInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_INFO_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrTileMode tileMode; ///< Tile mode
UINT_32 pitch; ///< Surface pitch, in pixels
UINT_32 height; ///< Surface height, in pixels
UINT_32 numSlices; ///< Number of slice/depth
UINT_32 numSamples; ///< Number of samples
UINT_32 numFrags; ///< Number of fragments, leave it zero or the same as
/// number of samples for normal AA; Set it to the
/// number of fragments for EQAA
/// r800 and later HWL parameters
struct
{
UINT_32 resolved: 1; ///< TRUE if the surface is for resolved fmask, only used
/// by H/W clients. S/W should always set it to FALSE.
UINT_32 reserved: 31; ///< Reserved for future use.
};
ADDR_TILEINFO* pTileInfo; ///< 2D tiling parameters. Clients must give valid data
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
} ADDR_COMPUTE_FMASK_INFO_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_INFO_OUTPUT
*
* @brief
* Output structure for AddrComputeFmaskInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_INFO_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 pitch; ///< Pitch of fmask in pixels
UINT_32 height; ///< Height of fmask in pixels
UINT_32 numSlices; ///< Slices of fmask
UINT_64 fmaskBytes; ///< Size of fmask in bytes
UINT_32 baseAlign; ///< Base address alignment
UINT_32 pitchAlign; ///< Pitch alignment
UINT_32 heightAlign; ///< Height alignment
UINT_32 bpp; ///< Bits per pixel of FMASK is: number of bit planes
UINT_32 numSamples; ///< Number of samples, used for dump, export this since input
/// may be changed in 9xx and above
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< Tile parameters used. Fmask can have different
/// bank_height from color buffer
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
UINT_64 sliceSize; ///< Size of slice in bytes
} ADDR_COMPUTE_FMASK_INFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputeFmaskInfo
*
* @brief
* Compute Fmask pitch/height/depth/alignments and size in bytes
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskInfo(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_FMASK_INFO_INPUT* pIn,
ADDR_COMPUTE_FMASK_INFO_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT
*
* @brief
* Input structure for AddrComputeFmaskAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Slice index
UINT_32 plane; ///< Plane number
UINT_32 sample; ///< Sample index (fragment index for EQAA)
UINT_32 pitch; ///< Surface pitch, in pixels
UINT_32 height; ///< Surface height, in pixels
UINT_32 numSamples; ///< Number of samples
UINT_32 numFrags; ///< Number of fragments, leave it zero or the same as
/// number of samples for normal AA; Set it to the
/// number of fragments for EQAA
AddrTileMode tileMode; ///< Tile mode
union
{
struct
{
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
};
UINT_32 tileSwizzle; ///< Combined swizzle, if useCombinedSwizzle is TRUE
};
/// r800 and later HWL parameters
struct
{
UINT_32 resolved: 1; ///< TRUE if this is a resolved fmask, used by H/W clients
UINT_32 ignoreSE: 1; ///< TRUE if shader engines are ignored.
UINT_32 reserved: 30; ///< Reserved for future use.
};
ADDR_TILEINFO* pTileInfo; ///< 2D tiling parameters. Client must provide all data
} ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT
*
* @brief
* Output structure for AddrComputeFmaskAddrFromCoord
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Fmask address
UINT_32 bitPosition; ///< Bit position within fmaskAddr, 0-7.
} ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT;
/**
***************************************************************************************************
* AddrComputeFmaskAddrFromCoord
*
* @brief
* Compute Fmask address according to coordinates (x,y,slice,sample,plane)
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskAddrFromCoord(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_FMASK_ADDRFROMCOORD_INPUT* pIn,
ADDR_COMPUTE_FMASK_ADDRFROMCOORD_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT
*
* @brief
* Input structure for AddrComputeFmaskCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 addr; ///< Address
UINT_32 bitPosition; ///< Bit position within addr, 0-7.
UINT_32 pitch; ///< Pitch, in pixels
UINT_32 height; ///< Height in pixels
UINT_32 numSamples; ///< Number of samples
UINT_32 numFrags; ///< Number of fragments
AddrTileMode tileMode; ///< Tile mode
union
{
struct
{
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
};
UINT_32 tileSwizzle; ///< Combined swizzle, if useCombinedSwizzle is TRUE
};
/// r800 and later HWL parameters
struct
{
UINT_32 resolved: 1; ///< TRUE if this is a resolved fmask, used by HW components
UINT_32 ignoreSE: 1; ///< TRUE if shader engines are ignored.
UINT_32 reserved: 30; ///< Reserved for future use.
};
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Client must provide all data
} ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT
*
* @brief
* Output structure for AddrComputeFmaskCoordFromAddr
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 x; ///< X coordinate
UINT_32 y; ///< Y coordinate
UINT_32 slice; ///< Slice index
UINT_32 plane; ///< Plane number
UINT_32 sample; ///< Sample index (fragment index for EQAA)
} ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT;
/**
***************************************************************************************************
* AddrComputeFmaskCoordFromAddr
*
* @brief
* Compute FMASK coordinate from an given address
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeFmaskCoordFromAddr(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_FMASK_COORDFROMADDR_INPUT* pIn,
ADDR_COMPUTE_FMASK_COORDFROMADDR_OUTPUT* pOut);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Element/utility functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* AddrGetVersion
*
* @brief
* Get AddrLib version number
***************************************************************************************************
*/
UINT_32 ADDR_API AddrGetVersion(ADDR_HANDLE hLib);
/**
***************************************************************************************************
* AddrUseTileIndex
*
* @brief
* Return TRUE if tileIndex is enabled in this address library
***************************************************************************************************
*/
BOOL_32 ADDR_API AddrUseTileIndex(ADDR_HANDLE hLib);
/**
***************************************************************************************************
* AddrUseCombinedSwizzle
*
* @brief
* Return TRUE if combined swizzle is enabled in this address library
***************************************************************************************************
*/
BOOL_32 ADDR_API AddrUseCombinedSwizzle(ADDR_HANDLE hLib);
/**
***************************************************************************************************
* ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT
*
* @brief
* Input structure of AddrExtractBankPipeSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 base256b; ///< Base256b value
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Client must provide all data
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT;
/**
***************************************************************************************************
* ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT
*
* @brief
* Output structure of AddrExtractBankPipeSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
} ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT;
/**
***************************************************************************************************
* AddrExtractBankPipeSwizzle
*
* @brief
* Extract Bank and Pipe swizzle from base256b
* @return
* ADDR_OK if no error
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrExtractBankPipeSwizzle(
ADDR_HANDLE hLib,
const ADDR_EXTRACT_BANKPIPE_SWIZZLE_INPUT* pIn,
ADDR_EXTRACT_BANKPIPE_SWIZZLE_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT
*
* @brief
* Input structure of AddrCombineBankPipeSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 bankSwizzle; ///< Bank swizzle
UINT_32 pipeSwizzle; ///< Pipe swizzle
UINT_64 baseAddr; ///< Base address (leave it zero for driver clients)
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Client must provide all data
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT;
/**
***************************************************************************************************
* ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT
*
* @brief
* Output structure of AddrCombineBankPipeSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 tileSwizzle; ///< Combined swizzle
} ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT;
/**
***************************************************************************************************
* AddrCombineBankPipeSwizzle
*
* @brief
* Combine Bank and Pipe swizzle
* @return
* ADDR_OK if no error
* @note
* baseAddr here is full MCAddress instead of base256b
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrCombineBankPipeSwizzle(
ADDR_HANDLE hLib,
const ADDR_COMBINE_BANKPIPE_SWIZZLE_INPUT* pIn,
ADDR_COMBINE_BANKPIPE_SWIZZLE_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_COMPUTE_SLICESWIZZLE_INPUT
*
* @brief
* Input structure of AddrComputeSliceSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SLICESWIZZLE_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrTileMode tileMode; ///< Tile Mode
UINT_32 baseSwizzle; ///< Base tile swizzle
UINT_32 slice; ///< Slice index
UINT_64 baseAddr; ///< Base address, driver should leave it 0 in most cases
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Actually banks needed here!
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_SLICESWIZZLE_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_SLICESWIZZLE_OUTPUT
*
* @brief
* Output structure of AddrComputeSliceSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_SLICESWIZZLE_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 tileSwizzle; ///< Recalculated tileSwizzle value
} ADDR_COMPUTE_SLICESWIZZLE_OUTPUT;
/**
***************************************************************************************************
* AddrComputeSliceSwizzle
*
* @brief
* Extract Bank and Pipe swizzle from base256b
* @return
* ADDR_OK if no error
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeSliceSwizzle(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_SLICESWIZZLE_INPUT* pIn,
ADDR_COMPUTE_SLICESWIZZLE_OUTPUT* pOut);
/**
***************************************************************************************************
* AddrSwizzleGenOption
*
* @brief
* Which swizzle generating options: legacy or linear
***************************************************************************************************
*/
typedef enum _AddrSwizzleGenOption
{
ADDR_SWIZZLE_GEN_DEFAULT = 0, ///< As is in client driver implemention for swizzle
ADDR_SWIZZLE_GEN_LINEAR = 1, ///< Using a linear increment of swizzle
} AddrSwizzleGenOption;
/**
***************************************************************************************************
* AddrSwizzleOption
*
* @brief
* Controls how swizzle is generated
***************************************************************************************************
*/
typedef union _ADDR_SWIZZLE_OPTION
{
struct
{
UINT_32 genOption : 1; ///< The way swizzle is generated, see AddrSwizzleGenOption
UINT_32 reduceBankBit : 1; ///< TRUE if we need reduce swizzle bits
UINT_32 reserved :30; ///< Reserved bits
};
UINT_32 value;
} ADDR_SWIZZLE_OPTION;
/**
***************************************************************************************************
* ADDR_COMPUTE_BASE_SWIZZLE_INPUT
*
* @brief
* Input structure of AddrComputeBaseSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_BASE_SWIZZLE_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
ADDR_SWIZZLE_OPTION option; ///< Swizzle option
UINT_32 surfIndex; ///< Index of this surface type
AddrTileMode tileMode; ///< Tile Mode
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< 2D tile parameters. Actually banks needed here!
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_BASE_SWIZZLE_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT
*
* @brief
* Output structure of AddrComputeBaseSwizzle
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 tileSwizzle; ///< Combined swizzle
} ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT;
/**
***************************************************************************************************
* AddrComputeBaseSwizzle
*
* @brief
* Return a Combined Bank and Pipe swizzle base on surface based on surface type/index
* @return
* ADDR_OK if no error
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeBaseSwizzle(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_BASE_SWIZZLE_INPUT* pIn,
ADDR_COMPUTE_BASE_SWIZZLE_OUTPUT* pOut);
/**
***************************************************************************************************
* ELEM_GETEXPORTNORM_INPUT
*
* @brief
* Input structure for ElemGetExportNorm
*
***************************************************************************************************
*/
typedef struct _ELEM_GETEXPORTNORM_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrColorFormat format; ///< Color buffer format; Client should use ColorFormat
AddrSurfaceNumber num; ///< Surface number type; Client should use NumberType
AddrSurfaceSwap swap; ///< Surface swap byte swap; Client should use SurfaceSwap
UINT_32 numSamples; ///< Number of samples
} ELEM_GETEXPORTNORM_INPUT;
/**
***************************************************************************************************
* ElemGetExportNorm
*
* @brief
* Helper function to check one format can be EXPORT_NUM, which is a register
* CB_COLOR_INFO.SURFACE_FORMAT. FP16 can be reported as EXPORT_NORM for rv770 in r600
* family
* @note
* The implementation is only for r600.
* 00 - EXPORT_FULL: PS exports are 4 pixels with 4 components with 32-bits-per-component. (two
* clocks per export)
* 01 - EXPORT_NORM: PS exports are 4 pixels with 4 components with 16-bits-per-component. (one
* clock per export)
*
***************************************************************************************************
*/
BOOL_32 ADDR_API ElemGetExportNorm(
ADDR_HANDLE hLib,
const ELEM_GETEXPORTNORM_INPUT* pIn);
/**
***************************************************************************************************
* ELEM_FLT32TODEPTHPIXEL_INPUT
*
* @brief
* Input structure for addrFlt32ToDepthPixel
*
***************************************************************************************************
*/
typedef struct _ELEM_FLT32TODEPTHPIXEL_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrDepthFormat format; ///< Depth buffer format
ADDR_FLT_32 comps[2]; ///< Component values (Z/stencil)
} ELEM_FLT32TODEPTHPIXEL_INPUT;
/**
***************************************************************************************************
* ELEM_FLT32TODEPTHPIXEL_INPUT
*
* @brief
* Output structure for ElemFlt32ToDepthPixel
*
***************************************************************************************************
*/
typedef struct _ELEM_FLT32TODEPTHPIXEL_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_8* pPixel; ///< Real depth value. Same data type as depth buffer.
/// Client must provide enough storage for this type.
UINT_32 depthBase; ///< Tile base in bits for depth bits
UINT_32 stencilBase; ///< Tile base in bits for stencil bits
UINT_32 depthBits; ///< Bits for depth
UINT_32 stencilBits; ///< Bits for stencil
} ELEM_FLT32TODEPTHPIXEL_OUTPUT;
/**
***************************************************************************************************
* ElemFlt32ToDepthPixel
*
* @brief
* Convert a FLT_32 value to a depth/stencil pixel value
*
* @return
* Return code
*
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API ElemFlt32ToDepthPixel(
ADDR_HANDLE hLib,
const ELEM_FLT32TODEPTHPIXEL_INPUT* pIn,
ELEM_FLT32TODEPTHPIXEL_OUTPUT* pOut);
/**
***************************************************************************************************
* ELEM_FLT32TOCOLORPIXEL_INPUT
*
* @brief
* Input structure for addrFlt32ToColorPixel
*
***************************************************************************************************
*/
typedef struct _ELEM_FLT32TOCOLORPIXEL_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrColorFormat format; ///< Color buffer format
AddrSurfaceNumber surfNum; ///< Surface number
AddrSurfaceSwap surfSwap; ///< Surface swap
ADDR_FLT_32 comps[4]; ///< Component values (r/g/b/a)
} ELEM_FLT32TOCOLORPIXEL_INPUT;
/**
***************************************************************************************************
* ELEM_FLT32TOCOLORPIXEL_INPUT
*
* @brief
* Output structure for ElemFlt32ToColorPixel
*
***************************************************************************************************
*/
typedef struct _ELEM_FLT32TOCOLORPIXEL_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_8* pPixel; ///< Real color value. Same data type as color buffer.
/// Client must provide enough storage for this type.
} ELEM_FLT32TOCOLORPIXEL_OUTPUT;
/**
***************************************************************************************************
* ElemFlt32ToColorPixel
*
* @brief
* Convert a FLT_32 value to a red/green/blue/alpha pixel value
*
* @return
* Return code
*
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API ElemFlt32ToColorPixel(
ADDR_HANDLE hLib,
const ELEM_FLT32TOCOLORPIXEL_INPUT* pIn,
ELEM_FLT32TOCOLORPIXEL_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_CONVERT_TILEINFOTOHW_INPUT
*
* @brief
* Input structure for AddrConvertTileInfoToHW
* @note
* When reverse is TRUE, indices are igonred
***************************************************************************************************
*/
typedef struct _ADDR_CONVERT_TILEINFOTOHW_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
BOOL_32 reverse; ///< Convert control flag.
/// FALSE: convert from real value to HW value;
/// TRUE: convert from HW value to real value.
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< Tile parameters with real value
INT_32 tileIndex; ///< Tile index, MUST be -1 if you don't want to use it
/// while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_CONVERT_TILEINFOTOHW_INPUT;
/**
***************************************************************************************************
* ADDR_CONVERT_TILEINFOTOHW_OUTPUT
*
* @brief
* Output structure for AddrConvertTileInfoToHW
***************************************************************************************************
*/
typedef struct _ADDR_CONVERT_TILEINFOTOHW_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
/// r800 and later HWL parameters
ADDR_TILEINFO* pTileInfo; ///< Tile parameters with hardware register value
} ADDR_CONVERT_TILEINFOTOHW_OUTPUT;
/**
***************************************************************************************************
* AddrConvertTileInfoToHW
*
* @brief
* Convert tile info from real value to hardware register value
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrConvertTileInfoToHW(
ADDR_HANDLE hLib,
const ADDR_CONVERT_TILEINFOTOHW_INPUT* pIn,
ADDR_CONVERT_TILEINFOTOHW_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_CONVERT_TILEINDEX_INPUT
*
* @brief
* Input structure for AddrConvertTileIndex
***************************************************************************************************
*/
typedef struct _ADDR_CONVERT_TILEINDEX_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
INT_32 tileIndex; ///< Tile index
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
BOOL_32 tileInfoHw; ///< Set to TRUE if client wants HW enum, otherwise actual
} ADDR_CONVERT_TILEINDEX_INPUT;
/**
***************************************************************************************************
* ADDR_CONVERT_TILEINDEX_OUTPUT
*
* @brief
* Output structure for AddrConvertTileIndex
***************************************************************************************************
*/
typedef struct _ADDR_CONVERT_TILEINDEX_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrTileMode tileMode; ///< Tile mode
AddrTileType tileType; ///< Tile type
ADDR_TILEINFO* pTileInfo; ///< Tile info
} ADDR_CONVERT_TILEINDEX_OUTPUT;
/**
***************************************************************************************************
* AddrConvertTileIndex
*
* @brief
* Convert tile index to tile mode/type/info
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex(
ADDR_HANDLE hLib,
const ADDR_CONVERT_TILEINDEX_INPUT* pIn,
ADDR_CONVERT_TILEINDEX_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_CONVERT_TILEINDEX1_INPUT
*
* @brief
* Input structure for AddrConvertTileIndex1 (without macro mode index)
***************************************************************************************************
*/
typedef struct _ADDR_CONVERT_TILEINDEX1_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
INT_32 tileIndex; ///< Tile index
UINT_32 bpp; ///< Bits per pixel
UINT_32 numSamples; ///< Number of samples
BOOL_32 tileInfoHw; ///< Set to TRUE if client wants HW enum, otherwise actual
} ADDR_CONVERT_TILEINDEX1_INPUT;
/**
***************************************************************************************************
* AddrConvertTileIndex1
*
* @brief
* Convert tile index to tile mode/type/info
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex1(
ADDR_HANDLE hLib,
const ADDR_CONVERT_TILEINDEX1_INPUT* pIn,
ADDR_CONVERT_TILEINDEX_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_GET_TILEINDEX_INPUT
*
* @brief
* Input structure for AddrGetTileIndex
***************************************************************************************************
*/
typedef struct _ADDR_GET_TILEINDEX_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
AddrTileMode tileMode; ///< Tile mode
AddrTileType tileType; ///< Tile-type: disp/non-disp/...
ADDR_TILEINFO* pTileInfo; ///< Pointer to tile-info structure, can be NULL for linear/1D
} ADDR_GET_TILEINDEX_INPUT;
/**
***************************************************************************************************
* ADDR_GET_TILEINDEX_OUTPUT
*
* @brief
* Output structure for AddrGetTileIndex
***************************************************************************************************
*/
typedef struct _ADDR_GET_TILEINDEX_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
INT_32 index; ///< index in table
} ADDR_GET_TILEINDEX_OUTPUT;
/**
***************************************************************************************************
* AddrGetTileIndex
*
* @brief
* Get the tiling mode index in table
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrGetTileIndex(
ADDR_HANDLE hLib,
const ADDR_GET_TILEINDEX_INPUT* pIn,
ADDR_GET_TILEINDEX_OUTPUT* pOut);
/**
***************************************************************************************************
* ADDR_PRT_INFO_INPUT
*
* @brief
* Input structure for AddrComputePrtInfo
***************************************************************************************************
*/
typedef struct _ADDR_PRT_INFO_INPUT
{
AddrFormat format; ///< Surface format
UINT_32 baseMipWidth; ///< Base mipmap width
UINT_32 baseMipHeight; ///< Base mipmap height
UINT_32 baseMipDepth; ///< Base mipmap depth
UINT_32 numFrags; ///< Number of fragments,
} ADDR_PRT_INFO_INPUT;
/**
***************************************************************************************************
* ADDR_PRT_INFO_OUTPUT
*
* @brief
* Input structure for AddrComputePrtInfo
***************************************************************************************************
*/
typedef struct _ADDR_PRT_INFO_OUTPUT
{
UINT_32 prtTileWidth;
UINT_32 prtTileHeight;
} ADDR_PRT_INFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputePrtInfo
*
* @brief
* Compute prt surface related information
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputePrtInfo(
ADDR_HANDLE hLib,
const ADDR_PRT_INFO_INPUT* pIn,
ADDR_PRT_INFO_OUTPUT* pOut);
///////////////////////////////////////////////////////////////////////////////////////////////////
// DCC key functions
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
***************************************************************************************************
* _ADDR_COMPUTE_DCCINFO_INPUT
*
* @brief
* Input structure of AddrComputeDccInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_DCCINFO_INPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_32 bpp; ///< BitPP of color surface
UINT_32 numSamples; ///< Sample number of color surface
UINT_64 colorSurfSize; ///< Size of color surface to which dcc key is bound
AddrTileMode tileMode; ///< Tile mode of color surface
ADDR_TILEINFO tileInfo; ///< Tile info of color surface
UINT_32 tileSwizzle; ///< Tile swizzle
INT_32 tileIndex; ///< Tile index of color surface,
///< MUST be -1 if you don't want to use it
///< while the global useTileIndex is set to 1
INT_32 macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
///< README: When tileIndex is not -1, this must be valid
} ADDR_COMPUTE_DCCINFO_INPUT;
/**
***************************************************************************************************
* ADDR_COMPUTE_DCCINFO_OUTPUT
*
* @brief
* Output structure of AddrComputeDccInfo
***************************************************************************************************
*/
typedef struct _ADDR_COMPUTE_DCCINFO_OUTPUT
{
UINT_32 size; ///< Size of this structure in bytes
UINT_64 dccRamBaseAlign; ///< Base alignment of dcc key
UINT_64 dccRamSize; ///< Size of dcc key
UINT_64 dccFastClearSize; ///< Size of dcc key portion that can be fast cleared
BOOL_32 subLvlCompressible; ///< whether sub resource is compressiable
} ADDR_COMPUTE_DCCINFO_OUTPUT;
/**
***************************************************************************************************
* AddrComputeDccInfo
*
* @brief
* Compute DCC key size, base alignment
* info
***************************************************************************************************
*/
ADDR_E_RETURNCODE ADDR_API AddrComputeDccInfo(
ADDR_HANDLE hLib,
const ADDR_COMPUTE_DCCINFO_INPUT* pIn,
ADDR_COMPUTE_DCCINFO_OUTPUT* pOut);
#if defined(__cplusplus)
}
#endif
#endif // __ADDR_INTERFACE_H__