i965/nir/vec4: Add setup of input variables in NIR->vec4 pass
authorEduardo Lima Mitev <elima@igalia.com>
Tue, 16 Jun 2015 11:50:43 +0000 (13:50 +0200)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 3 Aug 2015 16:40:46 +0000 (09:40 -0700)
This implementation sets up a map of input variable offsets to source registers
that are already initialized with the corresponding register offset.

This map will then be queried when processing load_input intrinsic operations,
to obtain the correct register source from which the input data will be loaded.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_nir.cpp

index 8d688f2764a7134f05c034e39db2a586fa9db470..c286689ed58974844a2ce5e8207d7217dde1ae27 100644 (file)
@@ -410,6 +410,8 @@ public:
    virtual void nir_emit_jump(nir_jump_instr *instr);
    virtual void nir_emit_texture(nir_tex_instr *instr);
 
+   src_reg *nir_inputs;
+
 protected:
    void emit_vertex();
    void lower_attributes_to_hw_regs(const int *attribute_map,
index 7ec297847376f06564ef15810b297a76e4448dbb..15a180519dd9f257dcc7bcb9f1a9eb1a4546d427 100644 (file)
@@ -68,7 +68,16 @@ vec4_visitor::nir_setup_system_values(nir_shader *shader)
 void
 vec4_visitor::nir_setup_inputs(nir_shader *shader)
 {
-   /* @TODO: Not yet implemented */
+   nir_inputs = ralloc_array(mem_ctx, src_reg, shader->num_inputs);
+
+   foreach_list_typed(nir_variable, var, node, &shader->inputs) {
+      int offset = var->data.driver_location;
+      unsigned size = type_size(var->type);
+      for (unsigned i = 0; i < size; i++) {
+         src_reg src = src_reg(ATTR, var->data.location + i, var->type);
+         nir_inputs[offset + i] = src;
+      }
+   }
 }
 
 void