+ return valid;
+}
+
+/**
+************************************************************************************************************************
+* Gfx9Lib::ValidateSwModeParams
+*
+* @brief
+* Validate compute surface info related to swizzle mode
+*
+* @return
+* TRUE if parameters are valid, FALSE otherwise
+************************************************************************************************************************
+*/
+BOOL_32 Gfx9Lib::ValidateSwModeParams(
+ const ADDR2_COMPUTE_SURFACE_INFO_INPUT* pIn) const
+{
+ BOOL_32 valid = TRUE;
+
+ if (pIn->swizzleMode >= ADDR_SW_MAX_TYPE)
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ const BOOL_32 mipmap = (pIn->numMipLevels > 1);
+ const BOOL_32 msaa = (pIn->numFrags > 1);
+ const BOOL_32 isBc = ElemLib::IsBlockCompressed(pIn->format);
+ const BOOL_32 is422 = ElemLib::IsMacroPixelPacked(pIn->format);
+
+ const AddrResourceType rsrcType = pIn->resourceType;
+ const BOOL_32 tex3d = IsTex3d(rsrcType);
+ const BOOL_32 tex2d = IsTex2d(rsrcType);
+ const BOOL_32 tex1d = IsTex1d(rsrcType);
+
+ const AddrSwizzleMode swizzle = pIn->swizzleMode;
+ const BOOL_32 linear = IsLinear(swizzle);
+ const BOOL_32 blk256B = IsBlock256b(swizzle);
+ const BOOL_32 blkVar = IsBlockVariable(swizzle);
+ const BOOL_32 isNonPrtXor = IsNonPrtXor(swizzle);
+
+ const ADDR2_SURFACE_FLAGS flags = pIn->flags;
+ const BOOL_32 zbuffer = flags.depth || flags.stencil;
+ const BOOL_32 color = flags.color;
+ const BOOL_32 texture = flags.texture;
+ const BOOL_32 display = flags.display || flags.rotated;
+ const BOOL_32 prt = flags.prt;
+ const BOOL_32 fmask = flags.fmask;
+
+ const BOOL_32 thin3d = tex3d && flags.view3dAs2dArray;
+ const BOOL_32 zMaxMip = tex3d && mipmap &&
+ (pIn->numSlices >= pIn->width) && (pIn->numSlices >= pIn->height);
+
+ // Misc check
+ if (msaa && (GetBlockSize(swizzle) < (m_pipeInterleaveBytes * pIn->numFrags)))
+ {
+ // MSAA surface must have blk_bytes/pipe_interleave >= num_samples
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ if (display && (IsValidDisplaySwizzleMode(pIn) == FALSE))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ if ((pIn->bpp == 96) && (linear == FALSE))
+ {
+ ADDR_ASSERT_ALWAYS();
+ valid = FALSE;
+ }
+
+ if (prt && isNonPrtXor)