Mesa (main): intel/isl: Add format assertions for surfaces using CCS

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 05:10:56 UTC 2022


Module: Mesa
Branch: main
Commit: 85a7fb1e197086bd0baf4a80558a4581da43b6d1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=85a7fb1e197086bd0baf4a80558a4581da43b6d1

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Mon Dec 27 10:06:34 2021 -0500

intel/isl: Add format assertions for surfaces using CCS

This caught some invalid CCS surface states created by iris.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14806>

---

 src/intel/isl/isl_surface_state.c | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
index 98603d782c8..97f92d9d00f 100644
--- a/src/intel/isl/isl_surface_state.c
+++ b/src/intel/isl/isl_surface_state.c
@@ -597,6 +597,42 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
 #if GFX_VER >= 12
       s.MemoryCompressionEnable = info->aux_usage == ISL_AUX_USAGE_MC;
 #endif
+#if GFX_VER >= 9
+      /* Some CCS aux usages have format restrictions. The Skylake PRM doc for
+       * RENDER_SURFACE_STATE::AuxiliarySurfaceMode says:
+       *
+       *    If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_E setting
+       *    is only allowed if Surface Format is supported for Render Target
+       *    Compression. This setting enables render target compression.
+       *
+       * If CCS_E is in use, the format must support it.
+       */
+      if (info->aux_usage == ISL_AUX_USAGE_CCS_E ||
+          info->aux_usage == ISL_AUX_USAGE_GFX12_CCS_E)
+         assert(isl_format_supports_ccs_e(dev->info, info->view->format));
+
+      /* It also says:
+       *
+       *    If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_D setting
+       *    is only allowed if Surface Format supported for Fast Clear. In
+       *    addition, if the surface is bound to the sampling engine, Surface
+       *    Format must be supported for Render Target Compression for
+       *    surfaces bound to the sampling engine. For render target surfaces,
+       *    this setting disables render target compression. For sampling
+       *    engine surfaces, this mode behaves the same as AUX_CCS_E.
+       *
+       * If CCS_D is in use while rendering, the format must support it. If
+       * it's in use while sampling, the format must support CCS_E.
+       */
+      if (info->aux_usage == ISL_AUX_USAGE_CCS_D) {
+         if (info->view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) {
+            assert(isl_format_supports_ccs_d(dev->info, info->view->format));
+         } else {
+            assert(info->view->usage & ISL_SURF_USAGE_TEXTURE_BIT);
+            assert(isl_format_supports_ccs_e(dev->info, info->view->format));
+         }
+      }
+#endif
 #if GFX_VER >= 8
       s.AuxiliarySurfaceMode = isl_encode_aux_mode[info->aux_usage];
 #else



More information about the mesa-commit mailing list