ir3: Support variants with different constlen's
[mesa.git] / src / freedreno / ir3 / ir3_cp.c
index a9562af25aa0cc23050e7167d2ca9c9945e4c149..56f6b2b215d90e6b61dda8a885179b9559f223c2 100644 (file)
@@ -199,9 +199,12 @@ lower_immed(struct ir3_cp_ctx *ctx, struct ir3_instruction *instr, unsigned n,
        /* Reallocate for 4 more elements whenever it's necessary */
        struct ir3_const_state *const_state = ir3_const_state(ctx->so);
        if (const_state->immediate_idx == const_state->immediates_size * 4) {
+               const_state->immediates = rerzalloc(const_state,
+                               const_state->immediates,
+                               __typeof__(const_state->immediates[0]),
+                               const_state->immediates_size,
+                               const_state->immediates_size + 4);
                const_state->immediates_size += 4;
-               const_state->immediates = realloc (const_state->immediates,
-                       const_state->immediates_size * sizeof(const_state->immediates[0]));
 
                for (int i = const_state->immediate_idx; i < const_state->immediates_size * 4; i++)
                        const_state->immediates[i / 4].val[i % 4] = 0xd0d0d0d0;
@@ -217,12 +220,11 @@ lower_immed(struct ir3_cp_ctx *ctx, struct ir3_instruction *instr, unsigned n,
        }
 
        if (i == const_state->immediate_idx) {
-               struct ir3_compiler *compiler = instr->block->shader->compiler;
                /* Add on a new immediate to be pushed, if we have space left in the
                 * constbuf.
                 */
                if (const_state->offsets.immediate + const_state->immediate_idx / 4 >=
-                               compiler->max_const)
+                               ir3_max_const(ctx->so))
                        return false;
 
                swiz = i % 4;