amdgpu/addrlib: Add a flag to skip calculate indices

This is useful for debugging and special cases for stencil surfaces
do not require texture fetch compatible.
This commit is contained in:
Xavi Zhang 2015-04-17 03:22:34 -04:00 committed by Marek Olšák
parent 10f7d1cb03
commit 199912a9bc
3 changed files with 21 additions and 14 deletions

View file

@ -513,7 +513,8 @@ typedef union _ADDR_SURFACE_FLAGS
/// This flag indicates we need to override tile
/// mode to PRT_* tile mode to disable slice rotation,
/// which is needed by swizzle pattern equation.
UINT_32 reserved : 8; ///< Reserved bits
UINT_32 skipIndicesOutput : 1; ///< Skipping indices in output.
UINT_32 reserved : 7; ///< Reserved bits
};
UINT_32 value;

View file

@ -4486,19 +4486,25 @@ ADDR_E_RETURNCODE EgBasedAddrLib::HwlComputeSurfaceInfo(
retCode = ADDR_INVALIDPARAMS;
}
// Returns an index
pOut->tileIndex = HwlPostCheckTileIndex(pOut->pTileInfo,
pOut->tileMode,
pOut->tileType,
pOut->tileIndex);
if (IsMacroTiled(pOut->tileMode) && (pOut->macroModeIndex == TileIndexInvalid))
// In case client uses tile info as input and would like to calculate a correct size and
// alignment together with tile info as output when the tile info is not suppose to have any
// matching indices in tile mode tables.
if (pIn->flags.skipIndicesOutput == FALSE)
{
pOut->macroModeIndex = HwlComputeMacroModeIndex(pOut->tileIndex,
pIn->flags,
pIn->bpp,
pIn->numSamples,
pOut->pTileInfo);
// Returns an index
pOut->tileIndex = HwlPostCheckTileIndex(pOut->pTileInfo,
pOut->tileMode,
pOut->tileType,
pOut->tileIndex);
if (IsMacroTiled(pOut->tileMode) && (pOut->macroModeIndex == TileIndexInvalid))
{
pOut->macroModeIndex = HwlComputeMacroModeIndex(pOut->tileIndex,
pIn->flags,
pIn->bpp,
pIn->numSamples,
pOut->pTileInfo);
}
}
// Resets pTileInfo to NULL if the internal tile info is used

View file

@ -3274,7 +3274,7 @@ VOID SiAddrLib::InitEquationTable()
UINT_32 bpp = 1 << (log2ElementBytes + 3);
// Loop all possible tile index
for (INT_32 tileIndex = 0; tileIndex < m_noOfEntries; tileIndex++)
for (INT_32 tileIndex = 0; tileIndex < static_cast<INT_32>(m_noOfEntries); tileIndex++)
{
UINT_32 equationIndex = ADDR_INVALID_EQUATION_INDEX;