radeonsi: initialize use_ngg* sooner

si_init_screen_get_functions determines NIR options, so it should be before
setting caps.

Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32262>
This commit is contained in:
Marek Olšák 2025-03-16 16:56:09 -04:00 committed by Marge Bot
parent 55db7fc18c
commit 0836e9758b

View file

@ -1348,7 +1348,6 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws,
sscreen->nir_options = CALLOC_STRUCT(nir_shader_compiler_options);
si_init_screen_get_functions(sscreen);
si_init_screen_buffer_functions(sscreen);
si_init_screen_fence_functions(sscreen);
si_init_screen_state_functions(sscreen);
@ -1356,6 +1355,20 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws,
si_init_screen_query_functions(sscreen);
si_init_screen_live_shader_cache(sscreen);
if (sscreen->info.gfx_level >= GFX11) {
sscreen->use_ngg = true;
sscreen->use_ngg_culling = sscreen->info.max_render_backends >= 2 &&
!(sscreen->debug_flags & DBG(NO_NGG_CULLING));
} else {
sscreen->use_ngg = !(sscreen->debug_flags & DBG(NO_NGG)) &&
sscreen->info.gfx_level >= GFX10 &&
(sscreen->info.family != CHIP_NAVI14 ||
sscreen->info.is_pro_graphics);
sscreen->use_ngg_culling = sscreen->use_ngg &&
sscreen->info.max_render_backends >= 2 &&
!(sscreen->debug_flags & DBG(NO_NGG_CULLING));
}
sscreen->has_draw_indirect_multi =
(sscreen->info.family >= CHIP_POLARIS10) ||
(sscreen->info.gfx_level == GFX8 && sscreen->info.pfp_fw_version >= 121 &&
@ -1365,6 +1378,7 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws,
(sscreen->info.gfx_level == GFX6 && sscreen->info.pfp_fw_version >= 79 &&
sscreen->info.me_fw_version >= 142);
si_init_screen_get_functions(sscreen);
si_init_shader_caps(sscreen);
si_init_compute_caps(sscreen);
si_init_screen_caps(sscreen);
@ -1471,20 +1485,6 @@ static struct pipe_screen *radeonsi_screen_create_impl(struct radeon_winsys *ws,
if (sscreen->debug_flags & DBG(NO_OUT_OF_ORDER))
sscreen->info.has_out_of_order_rast = false;
if (sscreen->info.gfx_level >= GFX11) {
sscreen->use_ngg = true;
sscreen->use_ngg_culling = sscreen->info.max_render_backends >= 2 &&
!(sscreen->debug_flags & DBG(NO_NGG_CULLING));
} else {
sscreen->use_ngg = !(sscreen->debug_flags & DBG(NO_NGG)) &&
sscreen->info.gfx_level >= GFX10 &&
(sscreen->info.family != CHIP_NAVI14 ||
sscreen->info.is_pro_graphics);
sscreen->use_ngg_culling = sscreen->use_ngg &&
sscreen->info.max_render_backends >= 2 &&
!(sscreen->debug_flags & DBG(NO_NGG_CULLING));
}
/* Only set this for the cases that are known to work, which are:
* - GFX9 if bpp >= 4 (in bytes)
*/