Mesa (main): ac/nir: Update TCS output barriers with nir_var_mem_shared.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 21 08:52:58 UTC 2021
Module: Mesa
Branch: main
Commit: 72174a3eef230883444e7f7c77a89c4919bb38d5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72174a3eef230883444e7f7c77a89c4919bb38d5
Author: Timur Kristóf <timur.kristof at gmail.com>
Date: Sat Jun 19 16:09:38 2021 +0200
ac/nir: Update TCS output barriers with nir_var_mem_shared.
Output loads and stores are lowered to shared memory access,
so we have to update the barriers to also reflect this.
Closes: #4955
Fixes: bf966d1c1dd968116b8b547ca2739f5113caccb5
Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11484>
---
src/amd/common/ac_nir_lower_tess_io_to_mem.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/amd/common/ac_nir_lower_tess_io_to_mem.c b/src/amd/common/ac_nir_lower_tess_io_to_mem.c
index e9cd737e6ee..58d489e3776 100644
--- a/src/amd/common/ac_nir_lower_tess_io_to_mem.c
+++ b/src/amd/common/ac_nir_lower_tess_io_to_mem.c
@@ -430,6 +430,18 @@ lower_hs_output_load(nir_builder *b,
.align_mul = 16u, .align_offset = (nir_intrinsic_component(intrin) * 4u) % 16u);
}
+static void
+update_hs_scoped_barrier(nir_intrinsic_instr *intrin)
+{
+ /* Output loads and stores are lowered to shared memory access,
+ * so we have to update the barriers to also reflect this.
+ */
+ unsigned mem_modes = nir_intrinsic_memory_modes(intrin);
+ if (mem_modes & nir_var_shader_out)
+ mem_modes |= nir_var_mem_shared;
+ nir_intrinsic_set_memory_modes(intrin, mem_modes);
+}
+
static nir_ssa_def *
lower_hs_output_access(nir_builder *b,
nir_instr *instr,
@@ -442,8 +454,14 @@ lower_hs_output_access(nir_builder *b,
intrin->intrinsic == nir_intrinsic_store_per_vertex_output) {
lower_hs_output_store(b, intrin, st);
return NIR_LOWER_INSTR_PROGRESS_REPLACE;
- } else {
+ } else if (intrin->intrinsic == nir_intrinsic_load_output ||
+ intrin->intrinsic == nir_intrinsic_load_per_vertex_output) {
return lower_hs_output_load(b, intrin, st);
+ } else if (intrin->intrinsic == nir_intrinsic_scoped_barrier) {
+ update_hs_scoped_barrier(intrin);
+ return NIR_LOWER_INSTR_PROGRESS;
+ } else {
+ unreachable("intrinsic not supported by lower_hs_output_access");
}
}
@@ -571,7 +589,7 @@ lower_tes_input_load(nir_builder *b,
}
static bool
-filter_any_output_access(const nir_instr *instr,
+filter_hs_output_access(const nir_instr *instr,
UNUSED const void *st)
{
if (instr->type != nir_instr_type_intrinsic)
@@ -581,7 +599,8 @@ filter_any_output_access(const nir_instr *instr,
return intrin->intrinsic == nir_intrinsic_store_output ||
intrin->intrinsic == nir_intrinsic_store_per_vertex_output ||
intrin->intrinsic == nir_intrinsic_load_output ||
- intrin->intrinsic == nir_intrinsic_load_per_vertex_output;
+ intrin->intrinsic == nir_intrinsic_load_per_vertex_output ||
+ intrin->intrinsic == nir_intrinsic_scoped_barrier;
}
static bool
@@ -658,7 +677,7 @@ ac_nir_lower_hs_outputs_to_mem(nir_shader *shader,
};
nir_shader_lower_instructions(shader,
- filter_any_output_access,
+ filter_hs_output_access,
lower_hs_output_access,
&state);
More information about the mesa-commit
mailing list