mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 11:00:11 +01:00
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 <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35799>
This commit is contained in:
parent
4be493862d
commit
c006bee22d
1 changed files with 12 additions and 54 deletions
|
|
@ -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<brw_shader> 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<brw_shader>(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 *
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue