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;
/* 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
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
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;
}