diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index 12fbb64841f..e80845d1734 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -895,6 +895,7 @@ struct v3d_compute_prog_data { struct v3d_prog_data base; /* Size in bytes of the workgroup's shared space. */ uint32_t shared_size; + uint16_t local_size[3]; }; static inline bool diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 0cacf808ec1..e06aaa1b259 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -786,6 +786,10 @@ v3d_cs_set_prog_data(struct v3d_compile *c, struct v3d_compute_prog_data *prog_data) { prog_data->shared_size = c->s->info.cs.shared_size; + + prog_data->local_size[0] = c->s->info.cs.local_size[0]; + prog_data->local_size[1] = c->s->info.cs.local_size[1]; + prog_data->local_size[2] = c->s->info.cs.local_size[2]; } static void diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index d9c5155b667..e71566fc0e4 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -5198,7 +5198,7 @@ cmd_buffer_create_csd_job(struct v3dv_cmd_buffer *cmd_buffer, uint32_t *wg_size_out) { struct v3dv_pipeline *pipeline = cmd_buffer->state.compute.pipeline; - assert(pipeline && pipeline->cs && pipeline->cs->nir); + assert(pipeline && pipeline->cs && pipeline->cs->current_variant); struct v3dv_job *job = vk_zalloc(&cmd_buffer->device->vk.alloc, sizeof(struct v3dv_job), 8, @@ -5221,12 +5221,13 @@ cmd_buffer_create_csd_job(struct v3dv_cmd_buffer *cmd_buffer, submit->cfg[1] |= group_count_y << V3D_CSD_CFG012_WG_COUNT_SHIFT; submit->cfg[2] |= group_count_z << V3D_CSD_CFG012_WG_COUNT_SHIFT; - const struct nir_shader *cs = pipeline->cs->nir; + const struct v3d_compute_prog_data *cpd = + pipeline->cs->current_variant->prog_data.cs; const uint32_t wgs_per_sg = 1; /* FIXME */ - const uint32_t wg_size = cs->info.cs.local_size[0] * - cs->info.cs.local_size[1] * - cs->info.cs.local_size[2]; + const uint32_t wg_size = cpd->local_size[0] * + cpd->local_size[1] * + cpd->local_size[2]; submit->cfg[3] |= wgs_per_sg << V3D_CSD_CFG3_WGS_PER_SG_SHIFT; submit->cfg[3] |= ((DIV_ROUND_UP(wgs_per_sg * wg_size, 16) - 1) << V3D_CSD_CFG3_BATCHES_PER_SG_M1_SHIFT);