summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/amd/addrlib/addrinterface.cpp32
-rw-r--r--src/amd/addrlib/addrinterface.h42
-rw-r--r--src/amd/addrlib/core/addrlib1.cpp37
-rw-r--r--src/amd/addrlib/core/addrlib1.h4
4 files changed, 115 insertions, 0 deletions
diff --git a/src/amd/addrlib/addrinterface.cpp b/src/amd/addrlib/addrinterface.cpp
index 8e6e7ea8d26..196cd69f6e1 100644
--- a/src/amd/addrlib/addrinterface.cpp
+++ b/src/amd/addrlib/addrinterface.cpp
@@ -911,6 +911,38 @@ ADDR_E_RETURNCODE ADDR_API AddrConvertTileIndex(
/**
***************************************************************************************************
+* 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
*
* @brief
diff --git a/src/amd/addrlib/addrinterface.h b/src/amd/addrlib/addrinterface.h
index 079596767e2..cc1024b34e2 100644
--- a/src/amd/addrlib/addrinterface.h
+++ b/src/amd/addrlib/addrinterface.h
@@ -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);
/**
***************************************************************************************************
diff --git a/src/amd/addrlib/core/addrlib1.cpp b/src/amd/addrlib/core/addrlib1.cpp
index f0fd08c3eb9..68959171658 100644
--- a/src/amd/addrlib/core/addrlib1.cpp
+++ b/src/amd/addrlib/core/addrlib1.cpp
@@ -1081,6 +1081,43 @@ ADDR_E_RETURNCODE AddrLib1::ConvertTileIndex(
/**
***************************************************************************************************
+* 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
*
* @brief
diff --git a/src/amd/addrlib/core/addrlib1.h b/src/amd/addrlib/core/addrlib1.h
index 25af637dcd0..94ca5a5b7cf 100644
--- a/src/amd/addrlib/core/addrlib1.h
+++ b/src/amd/addrlib/core/addrlib1.h
@@ -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;