summaryrefslogtreecommitdiffstats
path: root/src/amd
diff options
context:
space:
mode:
authorXavi Zhang <[email protected]>2015-04-17 03:22:34 -0400
committerMarek Olšák <[email protected]>2017-03-30 14:44:33 +0200
commit199912a9bc7621baa9f1cd185194df133fe338e6 (patch)
tree2d4afb80c50c367e8f61b1dcb64249c747cd598f /src/amd
parent10f7d1cb0321c5c15b9eb318c2c59ea0d9ac14db (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/amd')
-rw-r--r--src/amd/addrlib/addrinterface.h3
-rw-r--r--src/amd/addrlib/r800/egbaddrlib.cpp30
-rw-r--r--src/amd/addrlib/r800/siaddrlib.cpp2
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;