summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>2022-12-12 15:30:40 +0200
committerEric Engestrom <eric@engestrom.ch>2022-12-14 20:56:54 +0000
commitb5820a84a24e9858dfb24e1d3631f655e0f6c397 (patch)
tree7d984ee587e8dc9bdd76010bd09c6c0d22b6f99b
parentc1fad08d69661d0831eff0f3733c31ead33664ea (diff)
downloadmesa-b5820a84a24e9858dfb24e1d3631f655e0f6c397.tar.gz
isl: make Wa_1806565034 conditional to non robust access
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20280> (cherry picked from commit 89a550a37b0bb32bc3dfd92062f9fe6eb05c11db)
-rw-r--r--.pick_status.json2
-rw-r--r--src/intel/isl/isl.h7
-rw-r--r--src/intel/isl/isl_surface_state.c11
3 files changed, 17 insertions, 3 deletions
diff --git a/.pick_status.json b/.pick_status.json
index e5408be84e8..82c8cf90850 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -544,7 +544,7 @@
"description": "isl: make Wa_1806565034 conditional to non robust access",
"nominated": false,
"nomination_type": null,
- "resolution": 4,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
index 7a35605a23e..f3abbd5db0e 100644
--- a/src/intel/isl/isl.h
+++ b/src/intel/isl/isl.h
@@ -1707,6 +1707,13 @@ struct isl_surf_fill_state_info {
/* Intra-tile offset */
uint16_t x_offset_sa, y_offset_sa;
+
+ /**
+ * Robust image access enabled
+ *
+ * This is used to turn off a performance workaround.
+ */
+ bool robust_image_access;
};
struct isl_buffer_fill_state_info {
diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
index 139c196d23a..59158f8e240 100644
--- a/src/intel/isl/isl_surface_state.c
+++ b/src/intel/isl/isl_surface_state.c
@@ -362,9 +362,16 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
}
#if GFX_VER >= 12
- /* Wa_1806565034: Only set SurfaceArray if arrayed surface is > 1. */
+ /* Wa_1806565034:
+ *
+ * "Only set SurfaceArray if arrayed surface is > 1."
+ *
+ * Since this is a performance workaround, we only enable it when robust
+ * image access is disabled. Otherwise layered robust access is not
+ * specification compliant.
+ */
s.SurfaceArray = info->surf->dim != ISL_SURF_DIM_3D &&
- info->view->array_len > 1;
+ (info->robust_image_access || info->view->array_len > 1);
#elif GFX_VER >= 7
s.SurfaceArray = info->surf->dim != ISL_SURF_DIM_3D;
#endif