On Sat, Nov 14, 2015 at 11:55 AM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > On Sat, Nov 14, 2015 at 8:19 AM, Connor Abbott <cwabbo...@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 <ja...@jlekstrand.net> wrote: >>> From: Rob Clark <robcl...@freedesktop.org> >>> >>> This will simplify things somewhat in clone. >>> >>> Signed-off-by: Rob Clark <robcl...@freedesktop.org> >>> Reviewed-by: Jason Ekstrand <jason.ekstr...@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@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