mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 18:40:13 +01:00
aco/gfx10: Emit barrier at the start of NGG VS and TES.
The Navi 1x NGG hardware can hang in certain conditions when not every wave launched before s_sendmsg(GS_ALLOC_REQ). As a workaround, to ensure this never happens, let's emit a workgroup barrier at the beginning of NGG VS and TES. Note that NGG GS already has a workgroup barrier so it doesn't need this. Cc: mesa-stable Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10837>
This commit is contained in:
parent
f9447abb36
commit
e6bf5cfe59
1 changed files with 7 additions and 0 deletions
|
|
@ -11290,6 +11290,13 @@ void select_program(Program *program,
|
|||
bool check_merged_wave_info = ctx.tcs_in_out_eq ? i == 0 : (shader_count >= 2 && !empty_shader && !(ngg_gs && i == 1));
|
||||
bool endif_merged_wave_info = ctx.tcs_in_out_eq ? i == 1 : (check_merged_wave_info && !(ngg_gs && i == 1));
|
||||
|
||||
if (program->chip_class == GFX10 &&
|
||||
program->stage.hw == HWStage::NGG &&
|
||||
program->stage.num_sw_stages() == 1) {
|
||||
/* Workaround for Navi 1x HW bug to ensure all NGG waves launch before s_sendmsg(GS_ALLOC_REQ). */
|
||||
Builder(ctx.program, ctx.block).sopp(aco_opcode::s_barrier, -1u, 0u);
|
||||
}
|
||||
|
||||
if (check_merged_wave_info) {
|
||||
Temp cond = merged_wave_info_to_mask(&ctx, i);
|
||||
begin_divergent_if_then(&ctx, &ic_merged_wave_info, cond);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue