From 156a26826e423e434f097fc36a3cfd2d53ffebc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Tue, 22 Aug 2023 20:22:32 +0200 Subject: [PATCH] ac/nir: Add done arg to ac_nir_export_position. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This prepares for a workaround where we won't need to add the done flag to the last export in this function, because it will be added in a subsequent call to the same function. Cc: mesa-stable Signed-off-by: Timur Kristóf Reviewed-by: Qiang Yu Reviewed-by: Rhys Perry (cherry picked from commit 838d886d901ab2adc4c317652aebdd0bf3d52481) Part-of: --- .pick_status.json | 2 +- src/amd/common/ac_nir.c | 14 +++++++++----- src/amd/common/ac_nir.h | 1 + src/amd/common/ac_nir_lower_ngg.c | 6 +++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index ad1f884a491..b33fd6b92b6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -414,7 +414,7 @@ "description": "ac/nir: Add done arg to ac_nir_export_position.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index cdb609c05fb..ce9912058e9 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -120,6 +120,7 @@ ac_nir_export_position(nir_builder *b, uint32_t clip_cull_mask, bool no_param_export, bool force_vrs, + bool done, uint64_t outputs_written, nir_ssa_def *(*outputs)[4]) { @@ -252,10 +253,13 @@ ac_nir_export_position(nir_builder *b, } } - /* Specify that this is the last export */ nir_intrinsic_instr *final_exp = exp[exp_num - 1]; - unsigned final_exp_flags = nir_intrinsic_flags(final_exp); - nir_intrinsic_set_flags(final_exp, final_exp_flags | AC_EXP_FLAG_DONE); + + if (done) { + /* Specify that this is the last export */ + const unsigned final_exp_flags = nir_intrinsic_flags(final_exp); + nir_intrinsic_set_flags(final_exp, final_exp_flags | AC_EXP_FLAG_DONE); + } /* If a shader has no param exports, rasterization can start before * the shader finishes and thus memory stores might not finish before @@ -624,7 +628,7 @@ ac_nir_create_gs_copy_shader(const nir_shader *gs_nir, export_outputs &= ~VARYING_BIT_PSIZ; ac_nir_export_position(&b, gfx_level, clip_cull_mask, !has_param_exports, - force_vrs, export_outputs, outputs.data); + force_vrs, true, export_outputs, outputs.data); if (has_param_exports) { ac_nir_export_parameters(&b, param_offsets, @@ -731,7 +735,7 @@ ac_nir_lower_legacy_vs(nir_shader *nir, export_outputs &= ~VARYING_BIT_PSIZ; ac_nir_export_position(&b, gfx_level, clip_cull_mask, !has_param_exports, - force_vrs, export_outputs, outputs.data); + force_vrs, true, export_outputs, outputs.data); if (has_param_exports) { ac_nir_export_parameters(&b, param_offsets, diff --git a/src/amd/common/ac_nir.h b/src/amd/common/ac_nir.h index ae568e52426..9184def3375 100644 --- a/src/amd/common/ac_nir.h +++ b/src/amd/common/ac_nir.h @@ -79,6 +79,7 @@ ac_nir_export_position(nir_builder *b, uint32_t clip_cull_mask, bool no_param_export, bool force_vrs, + bool done, uint64_t outputs_written, nir_ssa_def *(*outputs)[4]); diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index 96e6367aa5f..5338a74b268 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -2505,7 +2505,7 @@ ac_nir_lower_ngg_nogs(nir_shader *shader, const ac_nir_lower_ngg_options *option ac_nir_export_position(b, options->gfx_level, options->clipdist_enable_mask, !options->has_param_exports, - options->force_vrs, + options->force_vrs, true, export_outputs, state.outputs); if (options->has_param_exports) { @@ -3035,7 +3035,7 @@ ngg_gs_export_vertices(nir_builder *b, nir_ssa_def *max_num_out_vtx, nir_ssa_def ac_nir_export_position(b, s->options->gfx_level, s->options->clipdist_enable_mask, !s->options->has_param_exports, - s->options->force_vrs, + s->options->force_vrs, true, export_outputs, s->outputs); nir_pop_if(b, if_vtx_export_thread); @@ -4332,7 +4332,7 @@ emit_ms_finale(nir_builder *b, lower_ngg_ms_state *s) ms_emit_arrayed_outputs(b, invocation_index, per_vertex_outputs, s); ac_nir_export_position(b, s->gfx_level, s->clipdist_enable_mask, - !s->has_param_exports, false, + !s->has_param_exports, false, true, s->per_vertex_outputs, s->outputs); /* Export generic attributes on GFX10.3