ir3: use empirical size for params as used by the shader
[mesa.git] / src / freedreno / ir3 / ir3_parser.y
index 2b024d358cc36dfe7d42adda91180aac49b0e565..27c52bd21e91aeb0097a38d4de44c08aff258300 100644 (file)
@@ -89,7 +89,7 @@ static struct ir3_instruction * new_instr(opc_t opc)
 
 static void new_shader(void)
 {
-       variant->ir = ir3_create(variant->shader->compiler, variant->shader->type);
+       variant->ir = ir3_create(variant->shader->compiler, variant);
        block = ir3_block_create(variant->ir);
        list_addtail(&block->node, &variant->ir->block_list);
 }
@@ -153,13 +153,16 @@ static struct ir3_register * dummy_dst(void)
 
 static void add_const(unsigned reg, unsigned c0, unsigned c1, unsigned c2, unsigned c3)
 {
-       struct ir3_const_state *const_state = &variant->shader->const_state;
+       struct ir3_const_state *const_state = ir3_const_state(variant);
        assert((reg & 0x7) == 0);
        int idx = reg >> (1 + 2); /* low bit is half vs full, next two bits are swiz */
        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]));
        }
        const_state->immediates[idx].val[0] = c0;
        const_state->immediates[idx].val[1] = c1;