Module: Mesa
Branch: staging/21.1
Commit: 2528ff1db930ce7d4bbaffef7f5ba9740d92499e
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2528ff1db930ce7d4bbaffef7f5ba9740d92499e

Author: Nanley Chery <[email protected]>
Date:   Tue Jan 26 15:50:20 2021 -0800

iris: Avoid sampling some MCS surfaces with clear

Supposedly avoids GPU hangs in BF4. See HSD 1707282275 and 14013111325.

v2. Fix bug in WA implementation. (Sagar)

Cc: mesa-stable
Reviewed-by: Sagar Ghuge <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8755>
(cherry picked from commit bcdebf4ff8f6e1d18e3dd129039a7618907fe8af)

---

 .pick_status.json                        |  2 +-
 src/gallium/drivers/iris/iris_blit.c     |  7 +++++++
 src/gallium/drivers/iris/iris_resolve.c  | 26 ++++++++++++++++++++++++++
 src/gallium/drivers/iris/iris_resource.h |  3 +++
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/.pick_status.json b/.pick_status.json
index 9415e1cc679..0e0efe4e52a 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -85,7 +85,7 @@
         "description": "iris: Avoid sampling some MCS surfaces with clear",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/iris/iris_blit.c 
b/src/gallium/drivers/iris/iris_blit.c
index 9caac8145ed..1dc07d883c0 100644
--- a/src/gallium/drivers/iris/iris_blit.c
+++ b/src/gallium/drivers/iris/iris_blit.c
@@ -571,6 +571,13 @@ get_copy_region_aux_settings(struct iris_context *ice,
       break;
    case ISL_AUX_USAGE_MCS:
    case ISL_AUX_USAGE_MCS_CCS:
+      if (!is_render_target &&
+          !iris_can_sample_mcs_with_clear(devinfo, res)) {
+         *out_aux_usage = res->aux.usage;
+         *out_clear_supported = false;
+         break;
+      }
+      FALLTHROUGH;
    case ISL_AUX_USAGE_CCS_E:
    case ISL_AUX_USAGE_GFX12_CCS_E:
       *out_aux_usage = res->aux.usage;
diff --git a/src/gallium/drivers/iris/iris_resolve.c 
b/src/gallium/drivers/iris/iris_resolve.c
index da90e935fbc..78a51a8c8e2 100644
--- a/src/gallium/drivers/iris/iris_resolve.c
+++ b/src/gallium/drivers/iris/iris_resolve.c
@@ -894,6 +894,24 @@ iris_image_view_aux_usage(struct iris_context *ice,
    return ISL_AUX_USAGE_NONE;
 }
 
+bool
+iris_can_sample_mcs_with_clear(const struct gen_device_info *devinfo,
+                               const struct iris_resource *res)
+{
+   assert(isl_aux_usage_has_mcs(res->aux.usage));
+
+   /* On TGL, the sampler has an issue with some 8 and 16bpp MSAA fast clears.
+    * See HSD 1707282275, wa_14013111325. Due to the use of
+    * format-reinterpretation, a simplified workaround is implemented.
+    */
+   if (devinfo->ver >= 12 &&
+       isl_format_get_layout(res->surf.format)->bpb <= 16) {
+      return false;
+   }
+
+   return true;
+}
+
 static bool
 isl_formats_are_fast_clear_compatible(enum isl_format a, enum isl_format b)
 {
@@ -918,6 +936,9 @@ iris_resource_prepare_texture(struct iris_context *ice,
                               uint32_t start_level, uint32_t num_levels,
                               uint32_t start_layer, uint32_t num_layers)
 {
+   const struct iris_screen *screen = (void *) ice->ctx.screen;
+   const struct gen_device_info *devinfo = &screen->devinfo;
+
    enum isl_aux_usage aux_usage =
       iris_resource_texture_aux_usage(ice, res, view_format);
 
@@ -930,6 +951,11 @@ iris_resource_prepare_texture(struct iris_context *ice,
    if (!isl_formats_are_fast_clear_compatible(res->surf.format, view_format))
       clear_supported = false;
 
+   if (isl_aux_usage_has_mcs(aux_usage) &&
+       !iris_can_sample_mcs_with_clear(devinfo, res)) {
+      clear_supported = false;
+   }
+
    iris_resource_prepare_access(ice, res, start_level, num_levels,
                                 start_layer, num_layers,
                                 aux_usage, clear_supported);
diff --git a/src/gallium/drivers/iris/iris_resource.h 
b/src/gallium/drivers/iris/iris_resource.h
index 01d9050ba21..5ef6ad8d745 100644
--- a/src/gallium/drivers/iris/iris_resource.h
+++ b/src/gallium/drivers/iris/iris_resource.h
@@ -499,6 +499,9 @@ bool iris_resource_level_has_hiz(const struct iris_resource 
*res,
 bool iris_sample_with_depth_aux(const struct gen_device_info *devinfo,
                                 const struct iris_resource *res);
 
+bool iris_can_sample_mcs_with_clear(const struct gen_device_info *devinfo,
+                                    const struct iris_resource *res);
+
 bool iris_has_color_unresolved(const struct iris_resource *res,
                                unsigned start_level, unsigned num_levels,
                                unsigned start_layer, unsigned num_layers);

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to