[Mesa-dev] [PATCH 1/2] ttn: Update shader->info as we generate code.

Eric Anholt eric at anholt.net
Wed Jul 20 22:19:28 UTC 2016


We could use the nir_shader_gather_info() pass to update it after the
fact, but this is what glsl_to_nir and prog_to_nir do.

Note that this doesn't update all the fields (num_textures, num_ubos
are still missing, for example).
---
 src/gallium/auxiliary/nir/tgsi_to_nir.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index e1d7c682bf62..65eca6f9e864 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -364,6 +364,10 @@ ttn_emit_declaration(struct ttn_compile *c)
             }
 
             exec_list_push_tail(&b->shader->inputs, &var->node);
+
+            for (int i = 0; i < array_size; i++)
+               b->shader->info.inputs_read |= 1 << (var->data.location + i);
+
             break;
          case TGSI_FILE_OUTPUT: {
             int semantic_name = decl->Semantic.Name;
@@ -426,6 +430,9 @@ ttn_emit_declaration(struct ttn_compile *c)
             }
 
             exec_list_push_tail(&b->shader->outputs, &var->node);
+
+            for (int i = 0; i < array_size; i++)
+               b->shader->info.outputs_written |= 1 << (var->data.location + i);
          }
             break;
          case TGSI_FILE_CONSTANT:
@@ -571,6 +578,10 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
       nir_builder_instr_insert(b, &load->instr);
 
       src = nir_src_for_ssa(&load->dest.ssa);
+
+      b->shader->info.system_values_read |=
+         (1 << nir_system_value_from_intrinsic(op));
+
       break;
    }
 
@@ -1036,6 +1047,7 @@ ttn_kill(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
    nir_intrinsic_instr *discard =
       nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard);
    nir_builder_instr_insert(b, &discard->instr);
+   b->shader->info.fs.uses_discard = true;
 }
 
 static void
@@ -1048,6 +1060,7 @@ ttn_kill_if(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
       nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if);
    discard->src[0] = nir_src_for_ssa(cmp);
    nir_builder_instr_insert(b, &discard->instr);
+   b->shader->info.fs.uses_discard = true;
 }
 
 static void
-- 
2.8.1



More information about the mesa-dev mailing list