diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c index 9746d335a64..50e6cd239ce 100644 --- a/src/freedreno/ir3/ir3.c +++ b/src/freedreno/ir3/ir3.c @@ -449,6 +449,10 @@ ir3_collect_info(struct ir3_shader_variant *v) (compiler->gen >= 6 ? ((info->max_half_reg + 2) / 2) : 0); info->double_threadsize = ir3_should_double_threadsize(v, regs_count); + + /* TODO this is different for earlier gens, but earlier gens don't use this */ + info->subgroup_size = v->info.double_threadsize ? 128 : 64; + unsigned reg_independent_max_waves = ir3_get_reg_independent_max_waves(v, info->double_threadsize); unsigned reg_dependent_max_waves = ir3_get_reg_dependent_max_waves( diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h index 722b98f24f9..aace5df184d 100644 --- a/src/freedreno/ir3/ir3.h +++ b/src/freedreno/ir3/ir3.h @@ -72,6 +72,7 @@ struct ir3_info { * assuming that they are all executing this shader. */ int8_t max_waves; + uint8_t subgroup_size; bool double_threadsize; bool multi_dword_ldp_stp; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 2fdb466c57d..b7bd9696318 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -5283,7 +5283,7 @@ tu_compute_pipeline_create(VkDevice device, for (int i = 0; i < 3; i++) pipeline->compute.local_size[i] = v->local_size[i]; - pipeline->compute.subgroup_size = v->info.double_threadsize ? 128 : 64; + pipeline->compute.subgroup_size = v->info.subgroup_size; struct tu_cs prog_cs; uint32_t additional_reserve_size = tu_xs_get_additional_cs_size_dwords(v);