diff options
author | Xavi Zhang <[email protected]> | 2015-04-17 03:22:34 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-03-30 14:44:33 +0200 |
commit | 199912a9bc7621baa9f1cd185194df133fe338e6 (patch) | |
tree | 2d4afb80c50c367e8f61b1dcb64249c747cd598f /src | |
parent | 10f7d1cb0321c5c15b9eb318c2c59ea0d9ac14db (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/addrlib/addrinterface.h | 3 | ||||
-rw-r--r-- | src/amd/addrlib/r800/egbaddrlib.cpp | 30 | ||||
-rw-r--r-- | src/amd/addrlib/r800/siaddrlib.cpp | 2 |
3 files changed, 21 insertions, 14 deletions
diff --git a/src/amd/addrlib/addrinterface.h b/src/amd/addrlib/addrinterface.h index 95b187fbebc..3604fb11ce5 100644 --- a/src/amd/addrlib/addrinterface.h +++ b/src/amd/addrlib/addrinterface.h @@ -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; diff --git a/src/amd/addrlib/r800/egbaddrlib.cpp b/src/amd/addrlib/r800/egbaddrlib.cpp index 854d5725df2..0c1ddca10a3 100644 --- a/src/amd/addrlib/r800/egbaddrlib.cpp +++ b/src/amd/addrlib/r800/egbaddrlib.cpp @@ -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 diff --git a/src/amd/addrlib/r800/siaddrlib.cpp b/src/amd/addrlib/r800/siaddrlib.cpp index 686bb7fc343..4822d77a4c2 100644 --- a/src/amd/addrlib/r800/siaddrlib.cpp +++ b/src/amd/addrlib/r800/siaddrlib.cpp @@ -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; |