diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index e8b78038771..07cddb499e4 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -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) */