Commit b4da2f66 authored by Hyunjun Ko's avatar Hyunjun Ko Committed by Rob Clark

freedreno/ir3: make immediates array dynamic

Since most shaders wouldn't need that large array of immediates, making
the array dynamic could save unnecessary spaces.

In addition, sometimes we can potentially have a much larger array
of immediates to be lowered, which might be more than 64.
Signed-off-by: Rob Clark's avatarRob Clark <robdclark@gmail.com>
parent c3d9f29b
......@@ -286,6 +286,13 @@ lower_immed(struct ir3_cp_ctx *ctx, struct ir3_register *reg, unsigned new_flags
new_flags &= ~IR3_REG_FNEG;
}
/* Reallocate for 4 more elements whenever it's necessary */
if (ctx->immediate_idx == ctx->so->immediates_size * 4) {
ctx->so->immediates_size += 4;
ctx->so->immediates = realloc (ctx->so->immediates,
ctx->so->immediates_size * sizeof (ctx->so->immediates[0]));
}
for (i = 0; i < ctx->immediate_idx; i++) {
swiz = i % 4;
idx = i / 4;
......
......@@ -54,6 +54,8 @@ delete_variant(struct ir3_shader_variant *v)
ir3_destroy(v->ir);
if (v->bo)
fd_bo_del(v->bo);
if (v->immediates)
free(v->immediates);
free(v);
}
......
......@@ -325,9 +325,10 @@ struct ir3_shader_variant {
} constbase;
unsigned immediates_count;
unsigned immediates_size;
struct {
uint32_t val[4];
} immediates[64];
} *immediates;
/* for astc srgb workaround, the number/base of additional
* alpha tex states we need, and index of original tex states
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment