Mesa (main): broadcom/util: don't use compute supergroup packing with subgroups

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 29 07:03:32 UTC 2021


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

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Tue Jun 22 12:34:02 2021 +0200

broadcom/util: don't use compute supergroup packing with subgroups

When using subgroups there are additional restrictions to consider,
so for now we keep it simple and disable supergroup packing in that
scenario.

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11620>

---

 src/broadcom/common/v3d_util.c        | 7 +++++++
 src/broadcom/common/v3d_util.h        | 1 +
 src/broadcom/vulkan/v3dv_cmd_buffer.c | 1 +
 src/gallium/drivers/v3d/v3dx_draw.c   | 1 +
 4 files changed, 10 insertions(+)

diff --git a/src/broadcom/common/v3d_util.c b/src/broadcom/common/v3d_util.c
index ec549d48584..424656fd8b1 100644
--- a/src/broadcom/common/v3d_util.c
+++ b/src/broadcom/common/v3d_util.c
@@ -29,11 +29,18 @@
  */
 uint32_t
 v3d_csd_choose_workgroups_per_supergroup(struct v3d_device_info *devinfo,
+                                         bool has_subgroups,
                                          bool has_tsy_barrier,
                                          uint32_t threads,
                                          uint32_t num_wgs,
                                          uint32_t wg_size)
 {
+   /* FIXME: subgroups may restrict supergroup packing. For now, we disable it
+    * completely if the shader uses subgroups.
+    */
+   if (has_subgroups)
+           return 1;
+
    /* Compute maximum number of batches in a supergroup for this workgroup size.
     * Each batch is 16 elements, and we can have up to 16 work groups in a
     * supergroup:
diff --git a/src/broadcom/common/v3d_util.h b/src/broadcom/common/v3d_util.h
index fc304f55958..b9804f235ae 100644
--- a/src/broadcom/common/v3d_util.h
+++ b/src/broadcom/common/v3d_util.h
@@ -28,6 +28,7 @@
 
 uint32_t
 v3d_csd_choose_workgroups_per_supergroup(struct v3d_device_info *devinfo,
+                                         bool has_subgroups,
                                          bool has_tsy_barrier,
                                          uint32_t threads,
                                          uint32_t num_wgs,
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index 0e4b124cb25..72092b2c47e 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -3257,6 +3257,7 @@ cmd_buffer_create_csd_job(struct v3dv_cmd_buffer *cmd_buffer,
    uint32_t wgs_per_sg =
       v3d_csd_choose_workgroups_per_supergroup(
          &cmd_buffer->device->devinfo,
+         cs_variant->prog_data.cs->has_subgroups,
          cs_variant->prog_data.cs->base.has_control_barrier,
          cs_variant->prog_data.cs->base.threads,
          num_wgs, wg_size);
diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c
index cdf9d5d0878..91a1048a8b9 100644
--- a/src/gallium/drivers/v3d/v3dx_draw.c
+++ b/src/gallium/drivers/v3d/v3dx_draw.c
@@ -1556,6 +1556,7 @@ v3d_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info)
         uint32_t wgs_per_sg =
                 v3d_csd_choose_workgroups_per_supergroup(
                         &v3d->screen->devinfo,
+                        compute->has_subgroups,
                         compute->base.has_control_barrier,
                         compute->base.threads,
                         num_wgs, wg_size);



More information about the mesa-commit mailing list