amd/addrlib: add Addr2IsValidDisplaySwizzleMode
authorMarek Olšák <marek.olsak@amd.com>
Mon, 9 Oct 2017 16:31:12 +0000 (18:31 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 12 Oct 2017 17:03:33 +0000 (19:03 +0200)
Some "standard" (_S) swizzle modes are displayable on Raven,
even though the micro tile mode says it's not displayable.
Expose the addrlib function to the driver.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/amd/addrlib/addrinterface.cpp
src/amd/addrlib/addrinterface.h
src/amd/addrlib/core/addrlib2.h
src/amd/addrlib/gfx9/gfx9addrlib.h

index 85e298ddf2da3cb4e3324bdbf5bb0cebff0e6f04..638556bd893570cde36d51b457dabc3b36e81696 100644 (file)
@@ -1675,3 +1675,37 @@ ADDR_E_RETURNCODE ADDR_API Addr2GetPreferredSurfaceSetting(
     return returnCode;
 }
 
+/**
+****************************************************************************************************
+*   Addr2IsValidDisplaySwizzleMode
+*
+*   @brief
+*       Return whether the swizzle mode is supported by DCE / DCN.
+****************************************************************************************************
+*/
+ADDR_E_RETURNCODE ADDR_API Addr2IsValidDisplaySwizzleMode(
+    ADDR_HANDLE     hLib,
+    AddrSwizzleMode swizzleMode,
+    UINT_32         bpp,
+    bool            *result)
+{
+    ADDR_E_RETURNCODE returnCode;
+
+    V2::Lib* pLib = V2::Lib::GetLib(hLib);
+
+    if (pLib != NULL)
+    {
+        ADDR2_COMPUTE_SURFACE_INFO_INPUT in;
+        in.swizzleMode = swizzleMode;
+        in.bpp = bpp;
+
+        *result = pLib->IsValidDisplaySwizzleMode(&in);
+        returnCode = ADDR_OK;
+    }
+    else
+    {
+        returnCode = ADDR_ERROR;
+    }
+
+    return returnCode;
+}
index b9d4d8f782c634054e948636b459d904d46e97ba..f0da083af5d6a0063c4d68d9404f0d0f1e7ed695 100644 (file)
@@ -3653,6 +3653,20 @@ ADDR_E_RETURNCODE ADDR_API Addr2GetPreferredSurfaceSetting(
     const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
     ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT*      pOut);
 
+/**
+****************************************************************************************************
+*   Addr2IsValidDisplaySwizzleMode
+*
+*   @brief
+*       Return whether the swizzle mode is supported by DCE / DCN.
+****************************************************************************************************
+*/
+ADDR_E_RETURNCODE ADDR_API Addr2IsValidDisplaySwizzleMode(
+    ADDR_HANDLE     hLib,
+    AddrSwizzleMode swizzleMode,
+    UINT_32         bpp,
+    bool            *result);
+
 #if defined(__cplusplus)
 }
 #endif
index c9d7df0303e9651eb9ed5d24ccce4d51102a6be6..e98fddcd2d0d6af68143e948c728a3190253457b 100644 (file)
@@ -178,6 +178,13 @@ public:
         const ADDR2_GET_PREFERRED_SURF_SETTING_INPUT* pIn,
         ADDR2_GET_PREFERRED_SURF_SETTING_OUTPUT*      pOut) const;
 
+    virtual BOOL_32 IsValidDisplaySwizzleMode(
+        const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const
+    {
+        ADDR_NOT_IMPLEMENTED();
+        return ADDR_NOTIMPLEMENTED;
+    }
+
 protected:
     Lib();  // Constructor is protected
     Lib(const Client* pClient);
index b7d12871665a2a984656725e0f521ff8bed1e5dd..418ccac51421aeeea7bf85e8f45518de6ccd2dbe 100644 (file)
@@ -97,6 +97,9 @@ public:
         return (pMem != NULL) ? new (pMem) Gfx9Lib(pClient) : NULL;
     }
 
+    virtual BOOL_32 IsValidDisplaySwizzleMode(
+        const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
+
 protected:
     Gfx9Lib(const Client* pClient);
     virtual ~Gfx9Lib();
@@ -405,8 +408,6 @@ private:
                         UINT_32 mip0Width, UINT_32 mip0Height, UINT_32 mip0Depth,
                         UINT_32* pNumMetaBlkX, UINT_32* pNumMetaBlkY, UINT_32* pNumMetaBlkZ) const;
 
-    BOOL_32 IsValidDisplaySwizzleMode(const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const;
-
     Gfx9ChipSettings m_settings;
 };