From 554c1b9f2dcbfdcd82bfeb352b103d1af9edc455 Mon Sep 17 00:00:00 2001 From: Roy Zhan Date: Tue, 9 Jun 2015 04:46:59 -0400 Subject: [PATCH 1/1] amdgpu/addrlib: Disable tcComaptible when depth surface is not macro tiled Experiment show 1D tiling + TcCompatible cannot work together. --- src/amd/addrlib/r800/ciaddrlib.cpp | 37 ++++++++++++++++-------------- 1 file changed, 20 insertions(+), 17 deletions(-) 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; + } } } } -- 2.30.2