mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
nir: don't allocate nir_constant::elements if there are none
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36538>
This commit is contained in:
parent
b1242e6b30
commit
05749922b0
6 changed files with 51 additions and 29 deletions
|
|
@ -384,12 +384,14 @@ nir_visitor::constant_copy(ir_constant *ir, void *mem_ctx)
|
|||
|
||||
case GLSL_TYPE_STRUCT:
|
||||
case GLSL_TYPE_ARRAY:
|
||||
ret->elements = ralloc_array(mem_ctx, nir_constant *,
|
||||
ir->type->length);
|
||||
ret->num_elements = ir->type->length;
|
||||
if (ir->type->length) {
|
||||
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->const_elements[i], mem_ctx);
|
||||
for (i = 0; i < ir->type->length; i++)
|
||||
ret->elements[i] = constant_copy(ir->const_elements[i], mem_ctx);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -133,9 +133,13 @@ nir_constant_clone(const nir_constant *c, nir_variable *nvar)
|
|||
memcpy(nc->values, c->values, sizeof(nc->values));
|
||||
nc->is_null_constant = c->is_null_constant;
|
||||
nc->num_elements = c->num_elements;
|
||||
nc->elements = ralloc_array(nvar, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++) {
|
||||
nc->elements[i] = nir_constant_clone(c->elements[i], nvar);
|
||||
|
||||
if (c->num_elements) {
|
||||
nc->elements = ralloc_array(nvar, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++)
|
||||
nc->elements[i] = nir_constant_clone(c->elements[i], nvar);
|
||||
} else {
|
||||
nc->elements = NULL;
|
||||
}
|
||||
|
||||
return nc;
|
||||
|
|
|
|||
|
|
@ -100,10 +100,13 @@ rebuild_const_array_initialiser(const struct glsl_type *type, void *mem_ctx)
|
|||
|
||||
if (glsl_type_is_matrix(type) && glsl_get_matrix_columns(type) > 1) {
|
||||
ret->num_elements = glsl_get_matrix_columns(type);
|
||||
ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements);
|
||||
|
||||
for (unsigned i = 0; i < ret->num_elements; i++) {
|
||||
ret->elements[i] = rzalloc(mem_ctx, nir_constant);
|
||||
if (ret->num_elements) {
|
||||
ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements);
|
||||
|
||||
for (unsigned i = 0; i < ret->num_elements; i++) {
|
||||
ret->elements[i] = rzalloc(mem_ctx, nir_constant);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
@ -111,15 +114,18 @@ rebuild_const_array_initialiser(const struct glsl_type *type, void *mem_ctx)
|
|||
|
||||
if (glsl_type_is_array(type) || glsl_type_is_struct(type)) {
|
||||
ret->num_elements = glsl_get_length(type);
|
||||
ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements);
|
||||
|
||||
for (unsigned i = 0; i < ret->num_elements; i++) {
|
||||
if (glsl_type_is_array(type)) {
|
||||
ret->elements[i] =
|
||||
rebuild_const_array_initialiser(glsl_get_array_element(type), mem_ctx);
|
||||
} else {
|
||||
ret->elements[i] =
|
||||
rebuild_const_array_initialiser(glsl_get_struct_field(type, i), mem_ctx);
|
||||
if (ret->num_elements) {
|
||||
ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements);
|
||||
|
||||
for (unsigned i = 0; i < ret->num_elements; i++) {
|
||||
if (glsl_type_is_array(type)) {
|
||||
ret->elements[i] =
|
||||
rebuild_const_array_initialiser(glsl_get_array_element(type), mem_ctx);
|
||||
} else {
|
||||
ret->elements[i] =
|
||||
rebuild_const_array_initialiser(glsl_get_struct_field(type, i), mem_ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -195,10 +195,15 @@ read_constant(read_ctx *ctx, nir_variable *nvar)
|
|||
blob_copy_bytes(ctx->blob, (uint8_t *)c->values, sizeof(c->values));
|
||||
c->is_null_constant = memcmp(c->values, zero_vals, sizeof(c->values)) == 0;
|
||||
c->num_elements = blob_read_uint32(ctx->blob);
|
||||
c->elements = ralloc_array(nvar, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++) {
|
||||
c->elements[i] = read_constant(ctx, nvar);
|
||||
c->is_null_constant &= c->elements[i]->is_null_constant;
|
||||
|
||||
if (c->num_elements) {
|
||||
c->elements = ralloc_array(nvar, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++) {
|
||||
c->elements[i] = read_constant(ctx, nvar);
|
||||
c->is_null_constant &= c->elements[i]->is_null_constant;
|
||||
}
|
||||
} else {
|
||||
c->elements = NULL;
|
||||
}
|
||||
|
||||
return c;
|
||||
|
|
|
|||
|
|
@ -129,9 +129,12 @@ gather_constant_initializers(nir_constant *src,
|
|||
assert(src->num_elements == glsl_get_length(type));
|
||||
nir_constant *dst = rzalloc(var, nir_constant);
|
||||
dst->num_elements = src->num_elements;
|
||||
dst->elements = rzalloc_array(var, nir_constant *, src->num_elements);
|
||||
for (unsigned i = 0; i < src->num_elements; ++i) {
|
||||
dst->elements[i] = gather_constant_initializers(src->elements[i], var, element, field, state);
|
||||
if (dst->num_elements) {
|
||||
dst->elements = rzalloc_array(var, nir_constant *, src->num_elements);
|
||||
for (unsigned i = 0; i < src->num_elements; ++i) {
|
||||
dst->elements[i] = gather_constant_initializers(src->elements[i], var,
|
||||
element, field, state);
|
||||
}
|
||||
}
|
||||
return dst;
|
||||
} else if (glsl_type_is_struct(type)) {
|
||||
|
|
|
|||
|
|
@ -2461,9 +2461,11 @@ vtn_null_constant(struct vtn_builder *b, struct vtn_type *type)
|
|||
case vtn_base_type_struct:
|
||||
c->is_null_constant = true;
|
||||
c->num_elements = type->length;
|
||||
c->elements = ralloc_array(b, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++)
|
||||
c->elements[i] = vtn_null_constant(b, type->members[i]);
|
||||
if (c->num_elements) {
|
||||
c->elements = ralloc_array(b, nir_constant *, c->num_elements);
|
||||
for (unsigned i = 0; i < c->num_elements; i++)
|
||||
c->elements[i] = vtn_null_constant(b, type->members[i]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue