From dd9e002129fe546fd8052c793824cac4068da571 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 10 Oct 2025 01:35:20 -0700 Subject: [PATCH] brw: Fix mesh shader asserts in clip/cull distance setting mesh doesn't use brw_vue_prog_data. Also, I had been catching TCS shaders here, and shouldn't. Fixes: bf76e86bc82 ("brw: Refactor clip/cull distance mask setting into a helper") Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/compiler/brw/brw_from_nir.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/intel/compiler/brw/brw_from_nir.cpp b/src/intel/compiler/brw/brw_from_nir.cpp index d5a3e629a00..5804655c7f9 100644 --- a/src/intel/compiler/brw/brw_from_nir.cpp +++ b/src/intel/compiler/brw/brw_from_nir.cpp @@ -7929,21 +7929,30 @@ set_clip_cull_distance_masks(brw_shader &s) { const shader_info &info = s.nir->info; - if (info.stage >= MESA_SHADER_FRAGMENT && info.stage != MESA_SHADER_MESH) + if (info.stage != MESA_SHADER_VERTEX && + info.stage != MESA_SHADER_TESS_EVAL && + info.stage != MESA_SHADER_GEOMETRY && + info.stage != MESA_SHADER_MESH) return; - struct brw_vue_prog_data *prog_data = brw_vue_prog_data(s.prog_data); - if (info.outputs_written & (VARYING_BIT_CLIP_DIST0 | VARYING_BIT_CLIP_DIST1 | VARYING_BIT_CULL_DIST0 | VARYING_BIT_CULL_DIST1)) { - prog_data->clip_distance_mask = - BITFIELD_MASK(info.clip_distance_array_size); + uint32_t clip_mask = BITFIELD_MASK(info.clip_distance_array_size); - prog_data->cull_distance_mask = - BITFIELD_RANGE(info.clip_distance_array_size, - info.cull_distance_array_size); + uint32_t cull_mask = BITFIELD_RANGE(info.clip_distance_array_size, + info.cull_distance_array_size); + + if (info.stage == MESA_SHADER_MESH) { + struct brw_mesh_prog_data *prog_data = brw_mesh_prog_data(s.prog_data); + prog_data->clip_distance_mask = clip_mask; + prog_data->cull_distance_mask = cull_mask; + } else { + struct brw_vue_prog_data *prog_data = brw_vue_prog_data(s.prog_data); + prog_data->clip_distance_mask = clip_mask; + prog_data->cull_distance_mask = cull_mask; + } } }