On Thu, Sep 10, 2015 at 9:08 AM, Eduardo Lima Mitev <el...@igalia.com> wrote:
> On 09/10/2015 02:50 AM, Jason Ekstrand wrote:
>> ---
>>  src/glsl/nir/nir_lower_vec_to_movs.c | 18 ++++++++++++++++--
>>  1 file changed, 16 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/glsl/nir/nir_lower_vec_to_movs.c 
>> b/src/glsl/nir/nir_lower_vec_to_movs.c
>> index e297cb8..7d31e36 100644
>> --- a/src/glsl/nir/nir_lower_vec_to_movs.c
>> +++ b/src/glsl/nir/nir_lower_vec_to_movs.c
>> @@ -34,6 +34,7 @@
>>
>>  struct vec_to_movs_state {
>>     nir_shader *shader;
>> +   nir_function_impl *impl;
>>  };
>>
>>  static bool
>> @@ -107,8 +108,20 @@ lower_vec_to_movs_block(nir_block *block, void 
>> *void_state)
>>           continue; /* The loop */
>>        }
>>
>> -      /* Since we insert multiple MOVs, we have to be non-SSA. */
>> -      assert(!vec->dest.dest.is_ssa);
>> +      if (vec->dest.dest.is_ssa) {
>> +         /* Since we insert multiple MOVs, we have a register destination. 
>> */
>> +         nir_register *reg = nir_local_reg_create(state->impl);
>> +         reg->num_components = vec->dest.dest.ssa.num_components;
>> +
>> +         nir_ssa_def_rewrite_uses(&vec->dest.dest.ssa, 
>> nir_src_for_reg(reg));
>> +
>> +         assert(list_empty(&vec->dest.dest.ssa.uses));
>> +         assert(list_empty(&vec->dest.dest.ssa.if_uses));
>> +
>> +         vec->dest.dest = nir_dest_for_reg(reg);
>> +         vec->dest.dest.reg.parent_instr = &vec->instr;
>> +         list_addtail(&vec->dest.dest.reg.def_link, &reg->defs);
>> +      }
>>
>>        unsigned finished_write_mask = 0;
>>
>> @@ -151,6 +164,7 @@ nir_lower_vec_to_movs_impl(nir_function_impl *impl)
>>     struct vec_to_movs_state state;
>>
>>     state.shader = impl->overload->function->shader;
>> +   state.impl = impl;
>>
>
> Since 'shader' can be dereferenced from 'impl', wouldn't be enough to
> keep 'impl' as state and dereference 'shader' the two times it's needed?

Sure, we can do that.  In fact, we can just pass the impl and drop the
patch to use the state struct all together.  Would that be better?
--Jason

> Eduardo
>
>>     nir_foreach_block(impl, lower_vec_to_movs_block, &state);
>>  }
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to