From c006bee22d1e984a1da69b29bc5aa7732360f57e Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Fri, 27 Jun 2025 08:46:56 -0700 Subject: [PATCH] brw: Don't use simd_select for BS shaders Since there's only one possible SIMD, don't need to use the helpers to decide which one to compile. Reviewed-by: Ian Romanick Part-of: --- src/intel/compiler/brw_compile_bs.cpp | 66 +++++---------------------- 1 file changed, 12 insertions(+), 54 deletions(-) diff --git a/src/intel/compiler/brw_compile_bs.cpp b/src/intel/compiler/brw_compile_bs.cpp index 4d11d05cd04..861a66cb57c 100644 --- a/src/intel/compiler/brw_compile_bs.cpp +++ b/src/intel/compiler/brw_compile_bs.cpp @@ -87,75 +87,33 @@ compile_single_bs(const struct brw_compiler *compiler, brw_postprocess_nir(shader, compiler, debug_enabled, key->base.robust_flags); - brw_simd_selection_state simd_state{ - .devinfo = compiler->devinfo, - .prog_data = prog_data, - .required_width = required_width, - }; + brw_shader s(compiler, ¶ms->base, &key->base, &prog_data->base, shader, + required_width, stats != NULL, debug_enabled); - std::unique_ptr v[2]; - - for (unsigned simd = 0; simd < ARRAY_SIZE(v); simd++) { - if (!brw_simd_should_compile(simd_state, simd)) - continue; - - const unsigned dispatch_width = 8u << simd; - - if (dispatch_width == 8 && compiler->devinfo->ver >= 20) - continue; - - v[simd] = std::make_unique(compiler, ¶ms->base, - &key->base, - &prog_data->base, shader, - dispatch_width, - stats != NULL, - debug_enabled); - - const bool allow_spilling = !brw_simd_any_compiled(simd_state); - if (run_bs(*v[simd], allow_spilling)) { - brw_simd_mark_compiled(simd_state, simd, v[simd]->spilled_any_registers); - } else { - simd_state.error[simd] = ralloc_strdup(params->base.mem_ctx, - v[simd]->fail_msg); - if (simd > 0) { - brw_shader_perf_log(compiler, params->base.log_data, - "SIMD%u shader failed to compile: %s", - dispatch_width, v[simd]->fail_msg); - } - } - } - - const int selected_simd = brw_simd_select(simd_state); - if (selected_simd < 0) { + const bool allow_spilling = true; + if (!run_bs(s, allow_spilling)) { params->base.error_str = ralloc_asprintf(params->base.mem_ctx, - "Can't compile shader: " - "SIMD8 '%s' and SIMD16 '%s'.\n", - simd_state.error[0], simd_state.error[1]); + "Can't compile shader: '%s'.\n", + s.fail_msg); return 0; } - assert(selected_simd < int(ARRAY_SIZE(v))); - brw_shader *selected = v[selected_simd].get(); - assert(selected); - - const unsigned dispatch_width = selected->dispatch_width; - - int offset = g->generate_code(selected->cfg, dispatch_width, selected->shader_stats, - selected->performance_analysis.require(), stats); + int offset = g->generate_code(s.cfg, s.dispatch_width, s.shader_stats, + s.performance_analysis.require(), stats); if (prog_offset) *prog_offset = offset; else assert(offset == 0); if (bsr) - *bsr = brw_bsr(compiler->devinfo, offset, dispatch_width, 0, - selected->grf_used); + *bsr = brw_bsr(compiler->devinfo, offset, s.dispatch_width, 0, + s.grf_used); else prog_data->base.grf_used = MAX2(prog_data->base.grf_used, - selected->grf_used); + s.grf_used); - return dispatch_width; + return s.dispatch_width; } const unsigned *