Mesa (master): nir: gather indirect info from lowered IO intrinsics
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Sep 25 06:56:03 UTC 2020
Module: Mesa
Branch: master
Commit: 10be706778bd670197a66765c550cbb3a0cfda6d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10be706778bd670197a66765c550cbb3a0cfda6d
Author: Marek Olšák <marek.olsak at amd.com>
Date: Wed Sep 16 01:11:31 2020 -0400
nir: gather indirect info from lowered IO intrinsics
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6758>
---
src/compiler/nir/nir_gather_info.c | 47 +++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 19 deletions(-)
diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
index 03f0d15f73e..eacaed06cde 100644
--- a/src/compiler/nir/nir_gather_info.c
+++ b/src/compiler/nir/nir_gather_info.c
@@ -354,38 +354,47 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
}
case nir_intrinsic_load_input:
- if (shader->info.stage == MESA_SHADER_TESS_EVAL)
- shader->info.patch_inputs_read |= slot_mask;
- else
- shader->info.inputs_read |= slot_mask;
- break;
-
case nir_intrinsic_load_per_vertex_input:
case nir_intrinsic_load_input_vertex:
case nir_intrinsic_load_interpolated_input:
- shader->info.inputs_read |= slot_mask;
+ if (shader->info.stage == MESA_SHADER_TESS_EVAL &&
+ instr->intrinsic == nir_intrinsic_load_input) {
+ shader->info.patch_inputs_read |= slot_mask;
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.patch_inputs_read_indirectly |= slot_mask;
+ } else {
+ shader->info.inputs_read |= slot_mask;
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.inputs_read_indirectly |= slot_mask;
+ }
break;
case nir_intrinsic_load_output:
- if (shader->info.stage == MESA_SHADER_TESS_CTRL)
+ case nir_intrinsic_load_per_vertex_output:
+ if (shader->info.stage == MESA_SHADER_TESS_CTRL &&
+ instr->intrinsic == nir_intrinsic_load_output) {
shader->info.patch_outputs_read |= slot_mask;
- else
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.patch_outputs_accessed_indirectly |= slot_mask;
+ } else {
shader->info.outputs_read |= slot_mask;
- break;
-
- case nir_intrinsic_load_per_vertex_output:
- shader->info.outputs_read |= slot_mask;
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.outputs_accessed_indirectly |= slot_mask;
+ }
break;
case nir_intrinsic_store_output:
- if (shader->info.stage == MESA_SHADER_TESS_CTRL)
+ case nir_intrinsic_store_per_vertex_output:
+ if (shader->info.stage == MESA_SHADER_TESS_CTRL &&
+ instr->intrinsic == nir_intrinsic_store_output) {
shader->info.patch_outputs_written |= slot_mask;
- else
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.patch_outputs_accessed_indirectly |= slot_mask;
+ } else {
shader->info.outputs_written |= slot_mask;
- break;
-
- case nir_intrinsic_store_per_vertex_output:
- shader->info.outputs_written |= slot_mask;
+ if (!nir_src_is_const(*nir_get_io_offset_src(instr)))
+ shader->info.outputs_accessed_indirectly |= slot_mask;
+ }
break;
case nir_intrinsic_load_draw_id:
More information about the mesa-commit
mailing list