From d3c1c638c4928276a672380bb08282314ef81e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 30 May 2025 06:41:14 -0400 Subject: [PATCH] radeonsi: cull against cull distances in the shader and don't export them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Acked-by: Timur Kristóf Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index c285197017b..a54c8323da8 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1122,15 +1122,21 @@ static void si_lower_ngg(struct si_shader *shader, nir_shader *nir, .vs_output_param_offset = temp_info->vs_output_param_offset, .has_param_exports = shader->info.nr_param_exports, .export_clipdist_mask = shader->info.clipdist_mask | shader->info.culldist_mask, + .cull_clipdist_mask = si_shader_culling_enabled(shader) ? + SI_NGG_CULL_GET_CLIP_PLANE_ENABLE(key->ge.opt.ngg_culling) | + shader->info.culldist_mask : 0, + .dont_export_cull_distances = si_shader_culling_enabled(shader), .write_pos_to_clipvertex = shader->key.ge.mono.write_pos_to_clipvertex, .pack_clip_cull_distances = true, - .cull_clipdist_mask = SI_NGG_CULL_GET_CLIP_PLANE_ENABLE(key->ge.opt.ngg_culling), .force_vrs = sel->screen->options.vrs2x2, .use_gfx12_xfb_intrinsic = !nir->info.use_aco_amd, .skip_viewport_state_culling = sel->info.writes_viewport_index, .use_point_tri_intersection = sel->screen->info.num_cu / sel->screen->info.num_se >= 12, }; + if (options.dont_export_cull_distances) + shader->info.culldist_mask = 0; + if (nir->info.stage == MESA_SHADER_VERTEX || nir->info.stage == MESA_SHADER_TESS_EVAL) { /* Per instance inputs, used to remove instance load after culling. */