Mesa (main): broadcom/compiler: track if a compute shader uses subgroup functionality
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 29 07:03:32 UTC 2021
Module: Mesa
Branch: main
Commit: 10313b03b5061eba1f8eb46f6576f1108c2554a2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10313b03b5061eba1f8eb46f6576f1108c2554a2
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Tue Jun 22 12:33:23 2021 +0200
broadcom/compiler: track if a compute shader uses subgroup functionality
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11620>
---
src/broadcom/compiler/v3d_compiler.h | 5 +++++
src/broadcom/compiler/vir.c | 11 +++++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h
index 564d8b9c8df..4a46e9ee286 100644
--- a/src/broadcom/compiler/v3d_compiler.h
+++ b/src/broadcom/compiler/v3d_compiler.h
@@ -728,6 +728,9 @@ struct v3d_compile {
struct qreg cs_shared_offset;
int local_invocation_index_bits;
+ /* If the shader uses subgroup functionality */
+ bool has_subgroups;
+
uint8_t vattr_sizes[V3D_MAX_VS_INPUTS / 4];
uint32_t vpm_output_size;
@@ -947,6 +950,8 @@ struct v3d_compute_prog_data {
/* Size in bytes of the workgroup's shared space. */
uint32_t shared_size;
uint16_t local_size[3];
+ /* If the shader uses subgroup functionality */
+ bool has_subgroups;
};
static inline bool
diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c
index 1b35ed95033..7b77e2172ff 100644
--- a/src/broadcom/compiler/vir.c
+++ b/src/broadcom/compiler/vir.c
@@ -808,6 +808,8 @@ v3d_cs_set_prog_data(struct v3d_compile *c,
prog_data->local_size[0] = c->s->info.workgroup_size[0];
prog_data->local_size[1] = c->s->info.workgroup_size[1];
prog_data->local_size[2] = c->s->info.workgroup_size[2];
+
+ prog_data->has_subgroups = c->has_subgroups;
}
static void
@@ -1384,11 +1386,16 @@ lower_subgroup_intrinsics(struct v3d_compile *c,
continue;
switch (intr->intrinsic) {
- case nir_intrinsic_load_num_subgroups: {
+ case nir_intrinsic_load_num_subgroups:
lower_load_num_subgroups(c, b, intr);
progress = true;
+ FALLTHROUGH;
+ case nir_intrinsic_load_subgroup_id:
+ case nir_intrinsic_load_subgroup_size:
+ case nir_intrinsic_load_subgroup_invocation:
+ case nir_intrinsic_elect:
+ c->has_subgroups = true;
break;
- }
default:
break;
}
More information about the mesa-commit
mailing list