Mesa (main): blorp: Disallow multisampling for BLORP compute blits and copies.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 30 12:47:56 UTC 2021


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Oct  4 16:17:18 2021 -0700

blorp: Disallow multisampling for BLORP compute blits and copies.

We don't support typed image writes for multisampling, so we can't
handle multisampled destinations.  We also usually handle MSAA by
running the fragment shader per-sample, which we aren't accounting
for in our compute shaders, so we can't handle MSAA sources either.

We could do both of these things if we really wanted to, but we don't.

Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13524>

---

 src/intel/blorp/blorp.h      |  4 ++++
 src/intel/blorp/blorp_blit.c | 26 +++++++++++++++++++++-----
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h
index 72eb3d90b87..fffbbaa7748 100644
--- a/src/intel/blorp/blorp.h
+++ b/src/intel/blorp/blorp.h
@@ -186,10 +186,14 @@ blorp_clear_supports_compute(struct blorp_context *blorp,
 
 bool
 blorp_copy_supports_compute(struct blorp_context *blorp,
+                            const struct isl_surf *src_surf,
+                            const struct isl_surf *dst_surf,
                             enum isl_aux_usage dst_aux_usage);
 
 bool
 blorp_blit_supports_compute(struct blorp_context *blorp,
+                            const struct isl_surf *src_surf,
+                            const struct isl_surf *dst_surf,
                             enum isl_aux_usage dst_aux_usage);
 
 void
diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
index e15bad15b4b..5f5c4d31f66 100644
--- a/src/intel/blorp/blorp_blit.c
+++ b/src/intel/blorp/blorp_blit.c
@@ -2434,8 +2434,16 @@ do_blorp_blit(struct blorp_batch *batch,
 
 bool
 blorp_blit_supports_compute(struct blorp_context *blorp,
+                            const struct isl_surf *src_surf,
+                            const struct isl_surf *dst_surf,
                             enum isl_aux_usage dst_aux_usage)
 {
+   /* Our compiler doesn't currently support typed image writes with MSAA.
+    * Also, our BLORP compute shaders don't handle multisampling cases.
+    */
+   if (dst_surf->samples > 1 || src_surf->samples > 1)
+      return false;
+
    if (blorp->isl_dev->info->ver >= 12) {
       return dst_aux_usage == ISL_AUX_USAGE_GFX12_CCS_E ||
              dst_aux_usage == ISL_AUX_USAGE_CCS_E ||
@@ -2467,8 +2475,11 @@ blorp_blit(struct blorp_batch *batch,
    blorp_params_init(&params);
    params.snapshot_type = INTEL_SNAPSHOT_BLIT;
    const bool compute = batch->flags & BLORP_BATCH_USE_COMPUTE;
-   if (compute)
-      assert(blorp_blit_supports_compute(batch->blorp, dst_surf->aux_usage));
+   if (compute) {
+      assert(blorp_blit_supports_compute(batch->blorp,
+                                         src_surf->surf, dst_surf->surf,
+                                         dst_surf->aux_usage));
+   }
 
    /* We cannot handle combined depth and stencil. */
    if (src_surf->surf->usage & ISL_SURF_USAGE_STENCIL_BIT)
@@ -2775,9 +2786,11 @@ blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev,
 
 bool
 blorp_copy_supports_compute(struct blorp_context *blorp,
+                            const struct isl_surf *src_surf,
+                            const struct isl_surf *dst_surf,
                             enum isl_aux_usage dst_aux_usage)
 {
-   return blorp_blit_supports_compute(blorp, dst_aux_usage);
+   return blorp_blit_supports_compute(blorp, src_surf, dst_surf, dst_aux_usage);
 }
 
 void
@@ -2800,8 +2813,11 @@ blorp_copy(struct blorp_batch *batch,
    params.snapshot_type = INTEL_SNAPSHOT_COPY;
 
    const bool compute = batch->flags & BLORP_BATCH_USE_COMPUTE;
-   if (compute)
-      assert(blorp_copy_supports_compute(batch->blorp, dst_surf->aux_usage));
+   if (compute) {
+      assert(blorp_copy_supports_compute(batch->blorp,
+                                         src_surf->surf, dst_surf->surf,
+                                         dst_surf->aux_usage));
+   }
 
    brw_blorp_surface_info_init(batch, &params.src, src_surf, src_level,
                                src_layer, ISL_FORMAT_UNSUPPORTED, false);



More information about the mesa-commit mailing list