amdgpu/addrlib: Add new interface to support macro mode index query
authorFrans Gu <frans.gu@amd.com>
Fri, 10 Apr 2015 08:20:06 +0000 (04:20 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 30 Mar 2017 12:44:33 +0000 (14:44 +0200)
src/amd/addrlib/addrinterface.cpp
src/amd/addrlib/addrinterface.h
src/amd/addrlib/core/addrlib1.cpp
src/amd/addrlib/core/addrlib1.h

index 8e6e7ea8d2643c33f91102094aa2abd6427254d8..196cd69f6e12a715f2f6d18837f59430473c6ca2 100644 (file)
@@ -909,6 +909,38 @@ ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex(
     return returnCode;
 }
 
+/**
+***************************************************************************************************
+*   AddrGetMacroModeIndex
+*
+*   @brief
+*       Get macro mode index based on input parameters
+*
+*   @return
+*       ADDR_OK if successful, otherwise an error code of ADDR_E_RETURNCODE
+***************************************************************************************************
+*/
+ADDR_E_RETURNCODE ADDR_API AddrGetMacroModeIndex(
+    ADDR_HANDLE                          hLib, ///< address lib handle
+    const ADDR_GET_MACROMODEINDEX_INPUT* pIn,  ///< [in] input
+    ADDR_GET_MACROMODEINDEX_OUTPUT*      pOut) ///< [out] macro mode index
+{
+    AddrLib1* pLib = AddrLib1::GetAddrLib1(hLib);
+
+    ADDR_E_RETURNCODE returnCode;
+
+    if (pLib != NULL)
+    {
+        returnCode = pLib->GetMacroModeIndex(pIn, pOut);
+    }
+    else
+    {
+        returnCode = ADDR_ERROR;
+    }
+
+    return returnCode;
+}
+
 /**
 ***************************************************************************************************
 *   AddrConvertTileIndex1
index 079596767e2cf513d3d783ebcdb69fc495928791..cc1024b34e28695730f273903db836c07331333c 100644 (file)
@@ -1964,7 +1964,49 @@ ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex(
     const ADDR_CONVERT_TILEINDEX_INPUT* pIn,
     ADDR_CONVERT_TILEINDEX_OUTPUT*      pOut);
 
+/**
+***************************************************************************************************
+*   ADDR_GET_MACROMODEINDEX_INPUT
+*
+*   @brief
+*       Input structure for AddrGetMacroModeIndex
+***************************************************************************************************
+*/
+typedef struct _ADDR_GET_MACROMODEINDEX_INPUT
+{
+    UINT_32             size;               ///< Size of this structure in bytes
+    ADDR_SURFACE_FLAGS  flags;              ///< Surface flag
+    INT_32              tileIndex;          ///< Tile index
+    UINT_32             bpp;                ///< Bits per pixel
+    UINT_32             numFrags;           ///< Number of color fragments
+} ADDR_GET_MACROMODEINDEX_INPUT;
 
+/**
+***************************************************************************************************
+*   ADDR_GET_MACROMODEINDEX_OUTPUT
+*
+*   @brief
+*       Output structure for AddrGetMacroModeIndex
+***************************************************************************************************
+*/
+typedef struct _ADDR_GET_MACROMODEINDEX_OUTPUT
+{
+    UINT_32             size;            ///< Size of this structure in bytes
+    INT_32              macroModeIndex;  ///< Index in macro tile mode table if there is one (CI)
+} ADDR_GET_MACROMODEINDEX_OUTPUT;
+
+/**
+***************************************************************************************************
+*   AddrGetMacroModeIndex
+*
+*   @brief
+*       Get macro mode index based on input parameters
+***************************************************************************************************
+*/
+ADDR_E_RETURNCODE ADDR_API AddrGetMacroModeIndex(
+    ADDR_HANDLE                          hLib,
+    const ADDR_GET_MACROMODEINDEX_INPUT* pIn,
+    ADDR_GET_MACROMODEINDEX_OUTPUT*      pOut);
 
 /**
 ***************************************************************************************************
index f0fd08c3eb9d1695b909a2926664de9c0df60350..6895917165816886ff748b4eb6ed0058c0a0905d 100644 (file)
@@ -1079,6 +1079,43 @@ ADDR_E_RETURNCODE AddrLib1::ConvertTileIndex(
     return returnCode;
 }
 
+/**
+***************************************************************************************************
+*   AddrLib1::GetMacroModeIndex
+*
+*   @brief
+*       Get macro mode index based on input info
+*
+*   @return
+*       ADDR_E_RETURNCODE
+***************************************************************************************************
+*/
+ADDR_E_RETURNCODE AddrLib1::GetMacroModeIndex(
+    const ADDR_GET_MACROMODEINDEX_INPUT* pIn, ///< [in] input structure
+    ADDR_GET_MACROMODEINDEX_OUTPUT*      pOut ///< [out] output structure
+    ) const
+{
+    ADDR_E_RETURNCODE returnCode = ADDR_OK;
+
+    if (GetFillSizeFieldsFlags())
+    {
+        if ((pIn->size != sizeof(ADDR_GET_MACROMODEINDEX_INPUT)) ||
+            (pOut->size != sizeof(ADDR_GET_MACROMODEINDEX_OUTPUT)))
+        {
+            returnCode = ADDR_PARAMSIZEMISMATCH;
+        }
+    }
+
+    if (returnCode == ADDR_OK)
+    {
+        ADDR_TILEINFO tileInfo = {0};
+        pOut->macroModeIndex = HwlComputeMacroModeIndex(pIn->tileIndex, pIn->flags, pIn->bpp,
+                                                        pIn->numFrags, &tileInfo);
+    }
+
+    return returnCode;
+}
+
 /**
 ***************************************************************************************************
 *   AddrLib1::ConvertTileIndex1
index 25af637dcd021cdc0e2b30893297f2d1ac17e93b..94ca5a5b7cfa19f860991a9183b39adba80eba40 100644 (file)
@@ -143,6 +143,10 @@ public:
         const ADDR_CONVERT_TILEINDEX_INPUT* pIn,
         ADDR_CONVERT_TILEINDEX_OUTPUT* pOut) const;
 
+    ADDR_E_RETURNCODE GetMacroModeIndex(
+        const ADDR_GET_MACROMODEINDEX_INPUT* pIn,
+        ADDR_GET_MACROMODEINDEX_OUTPUT* pOut) const;
+
     ADDR_E_RETURNCODE ConvertTileIndex1(
         const ADDR_CONVERT_TILEINDEX1_INPUT* pIn,
         ADDR_CONVERT_TILEINDEX_OUTPUT* pOut) const;