[Mesa-dev] [PATCH 048/140] amdgpu/addrlib: Add a new output flag to notify client that the returned tile index is for PRT on SI

Marek Olšák maraeo at gmail.com
Mon Mar 20 22:42:58 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

If this flag is set for mip0, client should set prt flag for sub mips,
so that address lib can select the correct tile index for sub mips.
---
 src/amd/addrlib/addrinterface.h    | 5 ++++-
 src/amd/addrlib/r800/siaddrlib.cpp | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/amd/addrlib/addrinterface.h b/src/amd/addrlib/addrinterface.h
index 2a61b2b..8506a45 100644
--- a/src/amd/addrlib/addrinterface.h
+++ b/src/amd/addrlib/addrinterface.h
@@ -612,21 +612,24 @@ typedef struct _ADDR_COMPUTE_SURFACE_INFO_OUTPUT
 
     INT_32          macroModeIndex; ///< Index in macro tile mode table if there is one (CI)
     /// Output flags
     struct
     {
         /// Special information to work around SI mipmap swizzle bug UBTS #317508
         UINT_32     last2DLevel  : 1;  ///< TRUE if this is the last 2D(3D) tiled
                                        ///< Only meaningful when create flag checkLast2DLevel is set
         UINT_32     tcCompatible : 1;  ///< If the surface can be shader compatible
         UINT_32     dccUnsupport : 1;  ///< If the surface can support DCC compressed rendering
-        UINT_32     reserved     :29;  ///< Reserved bits
+        UINT_32     prtTileIndex : 1;  ///< SI only, indicate the returned tile index is for PRT
+                                       ///< If address lib return true for mip 0, client should set prt flag
+                                       ///< for child mips in subsequent compute surface info calls
+        UINT_32     reserved     :28;  ///< Reserved bits
     };
 
     UINT_32         equationIndex;     ///< Equation index in the equation table;
 
     UINT_32         blockWidth;        ///< Width in element inside one block(1D->Micro, 2D->Macro)
     UINT_32         blockHeight;       ///< Height in element inside one block(1D->Micro, 2D->Macro)
     UINT_32         blockSlices;       ///< Slice number inside one block(1D->Micro, 2D->Macro)
 
     /// Stereo info
     ADDR_QBSTEREOINFO*  pStereoInfo;///< Stereo information, needed when .qbStereo flag is TRUE
diff --git a/src/amd/addrlib/r800/siaddrlib.cpp b/src/amd/addrlib/r800/siaddrlib.cpp
index d3e9486..d358f0d 100644
--- a/src/amd/addrlib/r800/siaddrlib.cpp
+++ b/src/amd/addrlib/r800/siaddrlib.cpp
@@ -2224,20 +2224,21 @@ VOID SiLib::HwlSetupTileInfo(
             {
                 // Stencil always uses index 0
                 *pTileInfo = m_tileTable[0].info;
             }
         }
         // Pass through tile type
         pOut->tileType = inTileType;
     }
 
     pOut->tileIndex = index;
+    pOut->prtTileIndex = flags.prt;
 }
 
 /**
 ****************************************************************************************************
 *   SiLib::DecodeGbRegs
 *
 *   @brief
 *       Decodes GB_ADDR_CONFIG and noOfBanks/noOfRanks
 *
 *   @return
-- 
2.7.4



More information about the mesa-dev mailing list