From: Roy Zhan Date: Tue, 9 Jun 2015 08:46:59 +0000 (-0400) Subject: amdgpu/addrlib: Disable tcComaptible when depth surface is not macro tiled X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=554c1b9f2dcbfdcd82bfeb352b103d1af9edc455;hp=120a5d0e42ce7b9fc935a959d3faf10e79c4720e;p=mesa.git amdgpu/addrlib: Disable tcComaptible when depth surface is not macro tiled Experiment show 1D tiling + TcCompatible cannot work together. --- diff --git a/src/amd/addrlib/r800/ciaddrlib.cpp b/src/amd/addrlib/r800/ciaddrlib.cpp index 3322d952165..f88741e84d1 100644 --- a/src/amd/addrlib/r800/ciaddrlib.cpp +++ b/src/amd/addrlib/r800/ciaddrlib.cpp @@ -1317,30 +1317,33 @@ VOID CiAddrLib::HwlSetupTileInfo( *pTileInfo = m_tileTable[8].info; } - // Turn off tcCompatible for color surface if tileSplit happens. Depth/stencil is - // handled at tileIndex selecting time. - if (pOut->tcCompatible && (inTileType != ADDR_DEPTH_SAMPLE_ORDER)) + if (pOut->tcCompatible) { if (IsMacroTiled(tileMode)) { - INT_32 tileIndex = pOut->tileIndex; - - if ((tileIndex == TileIndexInvalid) && (IsTileInfoAllZero(pTileInfo) == FALSE)) + if (inTileType != ADDR_DEPTH_SAMPLE_ORDER) { - tileIndex = HwlPostCheckTileIndex(pTileInfo, tileMode, inTileType, tileIndex); - } + // Turn off tcCompatible for color surface if tileSplit happens. Depth/stencil + // tileSplit case was handled at tileIndex selecting time. + INT_32 tileIndex = pOut->tileIndex; - if (tileIndex != TileIndexInvalid) - { - ADDR_ASSERT(static_cast(tileIndex) < TileTableSize); - // Non-depth entries store a split factor - UINT_32 sampleSplit = m_tileTable[tileIndex].info.tileSplitBytes; - UINT_32 tileBytes1x = BITS_TO_BYTES(bpp * MicroTilePixels * thickness); - UINT_32 colorTileSplit = Max(256u, sampleSplit * tileBytes1x); + if ((tileIndex == TileIndexInvalid) && (IsTileInfoAllZero(pTileInfo) == FALSE)) + { + tileIndex = HwlPostCheckTileIndex(pTileInfo, tileMode, inTileType, tileIndex); + } - if (m_rowSize < colorTileSplit) + if (tileIndex != TileIndexInvalid) { - pOut->tcCompatible = FALSE; + ADDR_ASSERT(static_cast(tileIndex) < TileTableSize); + // Non-depth entries store a split factor + UINT_32 sampleSplit = m_tileTable[tileIndex].info.tileSplitBytes; + UINT_32 tileBytes1x = BITS_TO_BYTES(bpp * MicroTilePixels * thickness); + UINT_32 colorTileSplit = Max(256u, sampleSplit * tileBytes1x); + + if (m_rowSize < colorTileSplit) + { + pOut->tcCompatible = FALSE; + } } } }