[Mesa-dev] [PATCH 02/11] nir: add array length field
Connor Abbott
cwabbott0 at gmail.com
Sat Nov 14 09:22:15 PST 2015
On Sat, Nov 14, 2015 at 11:55 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> On Sat, Nov 14, 2015 at 8:19 AM, Connor Abbott <cwabbott0 at gmail.com> wrote:
>> I think it would be better if we kept track of the type of the
>> constant instead. That would also allow us to simplify the constant
>> construction code in, err, something else...
>
> We do keep track of the type. It's in the variable. Do you mean put
> a type field in nir_constant?
Yes.
>
>> On Wed, Nov 11, 2015 at 8:23 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
>>> From: Rob Clark <robclark at freedesktop.org>
>>>
>>> This will simplify things somewhat in clone.
>>>
>>> Signed-off-by: Rob Clark <robclark at freedesktop.org>
>>> Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
>>> ---
>>> src/glsl/nir/glsl_to_nir.cpp | 5 +++++
>>> src/glsl/nir/nir.h | 5 +++++
>>> 2 files changed, 10 insertions(+)
>>>
>>> diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
>>> index 8e53e22..13fa987 100644
>>> --- a/src/glsl/nir/glsl_to_nir.cpp
>>> +++ b/src/glsl/nir/glsl_to_nir.cpp
>>> @@ -241,6 +241,8 @@ constant_copy(ir_constant *ir, void *mem_ctx)
>>>
>>> unsigned total_elems = ir->type->components();
>>> unsigned i;
>>> +
>>> + ret->num_elements = 0;
>>> switch (ir->type->base_type) {
>>> case GLSL_TYPE_UINT:
>>> for (i = 0; i < total_elems; i++)
>>> @@ -265,6 +267,8 @@ constant_copy(ir_constant *ir, void *mem_ctx)
>>> case GLSL_TYPE_STRUCT:
>>> ret->elements = ralloc_array(mem_ctx, nir_constant *,
>>> ir->type->length);
>>> + ret->num_elements = ir->type->length;
>>> +
>>> i = 0;
>>> foreach_in_list(ir_constant, field, &ir->components) {
>>> ret->elements[i] = constant_copy(field, mem_ctx);
>>> @@ -275,6 +279,7 @@ constant_copy(ir_constant *ir, void *mem_ctx)
>>> case GLSL_TYPE_ARRAY:
>>> ret->elements = ralloc_array(mem_ctx, nir_constant *,
>>> ir->type->length);
>>> + ret->num_elements = ir->type->length;
>>>
>>> for (i = 0; i < ir->type->length; i++)
>>> ret->elements[i] = constant_copy(ir->array_elements[i], mem_ctx);
>>> diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
>>> index 6ffa60b..f99af4e 100644
>>> --- a/src/glsl/nir/nir.h
>>> +++ b/src/glsl/nir/nir.h
>>> @@ -111,6 +111,11 @@ typedef struct nir_constant {
>>> */
>>> union nir_constant_data value;
>>>
>>> + /* we could get this from the var->type but makes clone *much* easier to
>>> + * not have to care about the type.
>>> + */
>>> + unsigned num_elements;
>>> +
>>> /* Array elements / Structure Fields */
>>> struct nir_constant **elements;
>>> } nir_constant;
>>> --
>>> 2.5.0.400.gff86faf
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list