From 4c08b87fe133c26c99c04e74f1c4aedef3e1dfd8 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Mon, 20 Apr 2026 15:15:01 +0200 Subject: [PATCH] radeonsi: add si_init_screen_nir_options Extract code from si_init_screen_get_functions to new helper. The code assigning nir_options[] is moved out to help future changes. Reviewed-by: David Rosca Reviewed-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_get.c | 8 ++++++-- src/gallium/drivers/radeonsi/si_pipe.c | 3 +++ src/gallium/drivers/radeonsi/si_pipe.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index add10bf68be..9209c5fa171 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -217,7 +217,10 @@ void si_init_screen_get_functions(struct si_screen *sscreen) sscreen->b.get_disk_shader_cache = si_get_disk_shader_cache; si_init_renderer_string(sscreen); +} +void si_init_screen_nir_options(struct si_screen *sscreen) +{ #ifndef HAVE_GFX_COMPUTE return; #endif @@ -297,7 +300,7 @@ void si_init_screen_get_functions(struct si_screen *sscreen) unsigned max_support_shader = enable_mesh_shader(sscreen) ? MESA_SHADER_MESH : MESA_SHADER_COMPUTE; for (unsigned i = 0; i <= max_support_shader; i++) - sscreen->b.nir_options[i] = options; + sscreen->b.nir_options[i] = sscreen->nir_options; } void si_init_shader_caps(struct si_screen *sscreen) @@ -460,6 +463,7 @@ void si_init_screen_caps(struct si_screen *sscreen) { struct pipe_caps *caps = (struct pipe_caps *)&sscreen->b.caps; + /* u_init_pipe_screen_caps depends on shader caps. */ u_init_pipe_screen_caps(&sscreen->b, 1); /* Gfx8 (Polaris11) hangs, so don't enable this on Gfx8 and older chips. */ @@ -612,7 +616,7 @@ void si_init_screen_caps(struct si_screen *sscreen) #ifdef HAVE_GFX_COMPUTE caps->graphics = sscreen->info.has_graphics; - caps->mesh_shader = enable_mesh_shader(sscreen); + caps->mesh_shader = sscreen->b.nir_options[MESA_SHADER_MESH]; caps->compute = true; #else caps->graphics = caps->mesh_shader = caps->compute = false; diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index bb86eb9c427..4d84ee7b078 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -1425,8 +1425,11 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws, sscreen->info.me_fw_version >= 142); si_init_screen_get_functions(sscreen); + si_init_screen_nir_options(sscreen); si_init_shader_caps(sscreen); si_init_compute_caps(sscreen); + + /* si_init_screen_caps depends on shader caps. */ si_init_screen_caps(sscreen); if (sscreen->debug_flags & DBG(INFO)) diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index e05690a1ac7..d00f18de53d 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -1588,6 +1588,7 @@ struct pipe_fence_handle *si_create_fence(struct pipe_context *ctx, /* si_get.c */ void si_init_screen_get_functions(struct si_screen *sscreen); +void si_init_screen_nir_options(struct si_screen *sscreen); void si_init_shader_caps(struct si_screen *sscreen); void si_init_compute_caps(struct si_screen *sscreen); void si_init_screen_caps(struct si_screen *sscreen);