From: Nicolai Hähnle <nicolai.haeh...@amd.com> 1) dccCompatible for padding MSAA surface to support fast clear 2) dccPipeWorkaround for padding surface to support dcc --- src/amd/addrlib/addrinterface.h | 6 +++++- src/amd/addrlib/core/addrlib1.cpp | 2 ++ src/amd/addrlib/r800/ciaddrlib.cpp | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/amd/addrlib/addrinterface.h b/src/amd/addrlib/addrinterface.h index d2d6d94..14dff66 100644 --- a/src/amd/addrlib/addrinterface.h +++ b/src/amd/addrlib/addrinterface.h @@ -497,21 +497,25 @@ typedef union _ADDR_SURFACE_FLAGS UINT_32 noStencil : 1; ///< Flag indicates this depth has no separate stencil UINT_32 display : 1; ///< Flag indicates this should match display controller req. UINT_32 opt4Space : 1; ///< Flag indicates this surface should be optimized for space /// i.e. save some memory but may lose performance UINT_32 prt : 1; ///< Flag for partially resident texture UINT_32 qbStereo : 1; ///< Quad buffer stereo surface UINT_32 pow2Pad : 1; ///< SI: Pad to pow2, must set for mipmap (include level0) UINT_32 interleaved : 1; ///< Special flag for interleaved YUV surface padding UINT_32 tcCompatible : 1; ///< Flag indicates surface needs to be shader readable UINT_32 dispTileType : 1; ///< NI: force display Tiling for 128 bit shared resoruce - UINT_32 dccCompatible : 1; ///< VI: whether to support dcc fast clear + UINT_32 dccCompatible : 1; ///< VI: whether to make MSAA surface support dcc fast clear + UINT_32 dccPipeWorkaround : 1; ///< VI: whether to workaround the HW limit that + /// dcc can't be enabled if pipe config of tile mode + /// is different from that of ASIC, this flag + /// is address lib internal flag, client should ignore it UINT_32 czDispCompatible : 1; ///< SI+: CZ family has a HW bug needs special alignment. /// This flag indicates we need to follow the /// alignment with CZ families or other ASICs under /// PX configuration + CZ. UINT_32 nonSplit : 1; ///< CI: depth texture should not be split UINT_32 disableLinearOpt : 1; ///< Disable tile mode optimization to linear UINT_32 needEquation : 1; ///< Make the surface tile setting equation compatible. /// This flag indicates we need to override tile /// mode to PRT_* tile mode to disable slice rotation, /// which is needed by swizzle pattern equation. diff --git a/src/amd/addrlib/core/addrlib1.cpp b/src/amd/addrlib/core/addrlib1.cpp index 809bca2..2d640cf 100644 --- a/src/amd/addrlib/core/addrlib1.cpp +++ b/src/amd/addrlib/core/addrlib1.cpp @@ -329,20 +329,22 @@ ADDR_E_RETURNCODE Lib::ComputeSurfaceInfo( { ADDR_ASSERT(!IsMacroTiled(localIn.tileMode)); } pOut->macroModeIndex = macroModeIndex; } } if (returnCode == ADDR_OK) { + localIn.flags.dccPipeWorkaround = localIn.flags.dccCompatible; + if (localIn.tileMode == ADDR_TM_UNKNOWN) { // HWL layer may override tile mode if necessary HwlSelectTileMode(&localIn); } else { // HWL layer may override tile mode if necessary HwlOverrideTileMode(&localIn); diff --git a/src/amd/addrlib/r800/ciaddrlib.cpp b/src/amd/addrlib/r800/ciaddrlib.cpp index 5ccc5da..1f7bb18 100644 --- a/src/amd/addrlib/r800/ciaddrlib.cpp +++ b/src/amd/addrlib/r800/ciaddrlib.cpp @@ -972,21 +972,21 @@ VOID CiLib::HwlOptimizeTileMode( else { tileMode = ADDR_TM_PRT_TILED_THIN1; } } } } if (pInOut->maxBaseAlign != 0) { - pInOut->flags.dccCompatible = FALSE; + pInOut->flags.dccPipeWorkaround = FALSE; } } if (tileMode != pInOut->tileMode) { pInOut->tileMode = tileMode; } } /** @@ -2088,21 +2088,21 @@ VOID CiLib::HwlComputeSurfaceAlignmentsMacroTiled( ADDR_SURFACE_FLAGS flags, ///< [in] surface flags UINT_32 mipLevel, ///< [in] mip level UINT_32 numSamples, ///< [in] number of samples ADDR_COMPUTE_SURFACE_INFO_OUTPUT* pOut ///< [in,out] Surface output ) const { // This is to workaround a H/W limitation that DCC doesn't work when pipe config is switched to // P4. In theory, all asics that have such switching should be patched but we now only know what // to pad for Fiji. if ((m_settings.isFiji == TRUE) && - (flags.dccCompatible == TRUE) && + (flags.dccPipeWorkaround == TRUE) && (flags.prt == FALSE) && (mipLevel == 0) && (tileMode == ADDR_TM_PRT_TILED_THIN1) && (pOut->dccUnsupport == TRUE)) { pOut->pitchAlign = PowTwoAlign(pOut->pitchAlign, 256); // In case the client still requests DCC usage. pOut->dccUnsupport = FALSE; } } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev