diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 8b58f0136ff..a4dcabef5a1 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -1876,6 +1876,7 @@ v3d_attempt_compile(struct v3d_compile *c) .lower_subgroup_masks = true, .lower_relative_shuffle = true, .lower_quad = true, + .lower_reduce = true, }; NIR_PASS(_, c->s, nir_lower_subgroups, &subgroup_opts); diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c index 0226003eb71..0beb8481cd6 100644 --- a/src/gallium/drivers/v3d/v3d_screen.c +++ b/src/gallium/drivers/v3d/v3d_screen.c @@ -391,6 +391,19 @@ v3d_init_screen_caps(struct v3d_screen *screen) caps->device_reset_status_query = screen->devinfo.has_reset_counter; caps->robust_buffer_access_behavior = true; + + /* FIXME: same settings as v3dv, maybe put them in a common place. */ + if (screen->devinfo.ver >= 71) { + caps->shader_subgroup_size = V3D_CHANNELS; + caps->shader_subgroup_supported_stages = + BITFIELD_BIT(MESA_SHADER_FRAGMENT) | BITFIELD_BIT(MESA_SHADER_COMPUTE); + caps->shader_subgroup_supported_features = PIPE_SHADER_SUBGROUP_FEATURE_BASIC | + PIPE_SHADER_SUBGROUP_FEATURE_BALLOT | PIPE_SHADER_SUBGROUP_FEATURE_SHUFFLE | + PIPE_SHADER_SUBGROUP_FEATURE_SHUFFLE_RELATIVE | + PIPE_SHADER_SUBGROUP_FEATURE_VOTE | PIPE_SHADER_SUBGROUP_FEATURE_ARITHMETIC | + PIPE_SHADER_SUBGROUP_FEATURE_QUAD; + caps->shader_subgroup_quad_all_stages = false; + } } static bool