[Mesa-dev] [PATCH 05/78] i965/nir/vec4: Add setup of output variables in NIR->vec4 pass

Eduardo Lima Mitev elima at igalia.com
Fri Jun 26 01:06:21 PDT 2015


This implementation sets up a map of output variable offsets to output indexes
and types.

This map will then be queried when processing store_output intrinsic operations,
to use it as an index into the output_reg array where the output registers are
stored. The original type of the variable is also mapped, as it has to be
transferred to the output register.

The array map setup is fundamentally similar to how fs_nir does.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580
---
 src/mesa/drivers/dri/i965/brw_vec4.h       |  2 ++
 src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 14 +++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
index be47c82..673df4e 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.h
+++ b/src/mesa/drivers/dri/i965/brw_vec4.h
@@ -412,6 +412,8 @@ public:
    virtual void nir_emit_texture(nir_tex_instr *instr);
 
    src_reg *nir_inputs;
+   int *nir_outputs;
+   brw_reg_type *nir_output_types;
 
 protected:
    void emit_vertex();
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
index c2342b6..2d457a6 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
@@ -88,7 +88,19 @@ vec4_visitor::nir_setup_inputs(nir_shader *shader)
 void
 vec4_visitor::nir_setup_outputs(nir_shader *shader)
 {
-   /* @TODO: Not yet implemented */
+   nir_outputs = ralloc_array(mem_ctx, int, shader->num_outputs);
+   nir_output_types = ralloc_array(mem_ctx, brw_reg_type, shader->num_outputs);
+
+   foreach_list_typed(nir_variable, var, node, &shader->outputs) {
+      int offset = var->data.driver_location;
+      unsigned size = type_size(var->type);
+      brw_reg_type type = brw_type_for_base_type(var->type);
+
+      for (unsigned i = 0; i < size; i++) {
+         nir_outputs[offset + i] = var->data.location + i;
+         nir_output_types[offset + i] = type;
+      }
+   }
 }
 
 void
-- 
2.1.4



More information about the mesa-dev mailing list