Module: Mesa Branch: main Commit: ef018b23732e54c132bf537bcbd9544be0e15f63 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef018b23732e54c132bf537bcbd9544be0e15f63
Author: Karol Herbst <[email protected]> Date: Tue Sep 19 14:44:26 2023 +0200 zink: implement get_compute_state_info Signed-off-by: Karol Herbst <[email protected]> Reviewed-by: Mike Blumenkrantz <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24839> --- src/gallium/drivers/zink/zink_program.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 9a26e4bffee..0fc39a26c83 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1954,6 +1954,25 @@ zink_bind_cs_state(struct pipe_context *pctx, zink_select_launch_grid(ctx); } +static void +zink_get_compute_state_info(struct pipe_context *pctx, void *cso, struct pipe_compute_state_object_info *info) +{ + struct zink_compute_program *comp = cso; + struct zink_screen *screen = zink_screen(pctx->screen); + + info->max_threads = screen->info.props.limits.maxComputeWorkGroupInvocations; + info->private_memory = comp->scratch_size; + if (screen->info.props11.subgroupSize) { + info->preferred_simd_size = screen->info.props11.subgroupSize; + info->simd_sizes = info->preferred_simd_size; + } else { + // just guess it + info->preferred_simd_size = 64; + // only used for actual subgroup support + info->simd_sizes = 0; + } +} + static void zink_delete_cs_shader_state(struct pipe_context *pctx, void *cso) { @@ -2242,6 +2261,7 @@ zink_program_init(struct zink_context *ctx) ctx->base.create_compute_state = zink_create_cs_state; ctx->base.bind_compute_state = zink_bind_cs_state; + ctx->base.get_compute_state_info = zink_get_compute_state_info; ctx->base.delete_compute_state = zink_delete_cs_shader_state; if (zink_screen(ctx->base.screen)->info.have_EXT_vertex_input_dynamic_state)
