diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/nir/nir.c | 20 | ||||
-rw-r--r-- | src/glsl/nir/nir.h | 13 | ||||
-rw-r--r-- | src/glsl/nir/nir_from_ssa.c | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_alu_to_scalar.c | 6 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_atomics.c | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_io.c | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_locals_to_regs.c | 7 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_vec_to_movs.c | 4 | ||||
-rw-r--r-- | src/glsl/nir/nir_opt_peephole_ffma.c | 3 | ||||
-rw-r--r-- | src/glsl/nir/nir_opt_peephole_select.c | 4 |
10 files changed, 32 insertions, 31 deletions
diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c index 1dc7e12445f..fd675322b12 100644 --- a/src/glsl/nir/nir.c +++ b/src/glsl/nir/nir.c @@ -153,7 +153,7 @@ void nir_src_copy(nir_src *dest, const nir_src *src, void *mem_ctx) } } -void nir_dest_copy(nir_dest *dest, const nir_dest *src, void *mem_ctx) +void nir_dest_copy(nir_dest *dest, const nir_dest *src, nir_instr *instr) { /* Copying an SSA definition makes no sense whatsoever. */ assert(!src->is_ssa); @@ -163,17 +163,18 @@ void nir_dest_copy(nir_dest *dest, const nir_dest *src, void *mem_ctx) dest->reg.base_offset = src->reg.base_offset; dest->reg.reg = src->reg.reg; if (src->reg.indirect) { - dest->reg.indirect = ralloc(mem_ctx, nir_src); - nir_src_copy(dest->reg.indirect, src->reg.indirect, mem_ctx); + dest->reg.indirect = ralloc(instr, nir_src); + nir_src_copy(dest->reg.indirect, src->reg.indirect, instr); } else { dest->reg.indirect = NULL; } } void -nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, void *mem_ctx) +nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, + nir_alu_instr *instr) { - nir_src_copy(&dest->src, &src->src, mem_ctx); + nir_src_copy(&dest->src, &src->src, &instr->instr); dest->abs = src->abs; dest->negate = src->negate; for (unsigned i = 0; i < 4; i++) @@ -181,9 +182,10 @@ nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, void *mem_ctx) } void -nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, void *mem_ctx) +nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, + nir_alu_instr *instr) { - nir_dest_copy(&dest->dest, &src->dest, mem_ctx); + nir_dest_copy(&dest->dest, &src->dest, &instr->instr); dest->write_mask = src->write_mask; dest->saturate = src->saturate; } @@ -1210,14 +1212,14 @@ nir_ssa_def_rewrite_uses(nir_ssa_def *def, nir_src new_src, void *mem_ctx) nir_foreach_use_safe(def, use_src) { nir_instr *src_parent_instr = use_src->parent_instr; list_del(&use_src->use_link); - nir_src_copy(use_src, &new_src, mem_ctx); + nir_src_copy(use_src, &new_src, src_parent_instr); src_add_all_uses(use_src, src_parent_instr, NULL); } nir_foreach_if_use_safe(def, use_src) { nir_if *src_parent_if = use_src->parent_if; list_del(&use_src->use_link); - nir_src_copy(use_src, &new_src, mem_ctx); + nir_src_copy(use_src, &new_src, src_parent_if); src_add_all_uses(use_src, NULL, src_parent_if); } } diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index f9c829570c5..92945f9df7f 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -580,8 +580,8 @@ nir_dest_for_reg(nir_register *reg) return dest; } -void nir_src_copy(nir_src *dest, const nir_src *src, void *mem_ctx); -void nir_dest_copy(nir_dest *dest, const nir_dest *src, void *mem_ctx); +void nir_src_copy(nir_src *dest, const nir_src *src, void *instr_or_if); +void nir_dest_copy(nir_dest *dest, const nir_dest *src, nir_instr *instr); typedef struct { nir_src src; @@ -630,10 +630,6 @@ typedef struct { unsigned write_mask : 4; /* ignored if dest.is_ssa is true */ } nir_alu_dest; -void nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, void *mem_ctx); -void nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, - void *mem_ctx); - typedef enum { nir_type_invalid = 0, /* Not a valid type */ nir_type_float, @@ -702,6 +698,11 @@ typedef struct nir_alu_instr { nir_alu_src src[]; } nir_alu_instr; +void nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, + nir_alu_instr *instr); +void nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, + nir_alu_instr *instr); + /* is this source channel used? */ static inline bool nir_alu_instr_channel_used(nir_alu_instr *instr, unsigned src, unsigned channel) diff --git a/src/glsl/nir/nir_from_ssa.c b/src/glsl/nir/nir_from_ssa.c index 94002f18cd7..d6569d8994a 100644 --- a/src/glsl/nir/nir_from_ssa.c +++ b/src/glsl/nir/nir_from_ssa.c @@ -556,7 +556,7 @@ emit_copy(nir_parallel_copy_instr *pcopy, nir_src src, nir_src dest_src, assert(src.reg.reg->num_components >= dest_src.reg.reg->num_components); nir_alu_instr *mov = nir_alu_instr_create(mem_ctx, nir_op_imov); - nir_src_copy(&mov->src[0].src, &src, mem_ctx); + nir_src_copy(&mov->src[0].src, &src, mov); mov->dest.dest = nir_dest_for_reg(dest_src.reg.reg); mov->dest.write_mask = (1 << dest_src.reg.reg->num_components) - 1; diff --git a/src/glsl/nir/nir_lower_alu_to_scalar.c b/src/glsl/nir/nir_lower_alu_to_scalar.c index efbe9e7175f..1607308abb1 100644 --- a/src/glsl/nir/nir_lower_alu_to_scalar.c +++ b/src/glsl/nir/nir_lower_alu_to_scalar.c @@ -46,11 +46,11 @@ lower_reduction(nir_alu_instr *instr, nir_op chan_op, nir_op merge_op, for (unsigned i = 0; i < num_components; i++) { nir_alu_instr *chan = nir_alu_instr_create(mem_ctx, chan_op); nir_alu_ssa_dest_init(chan, 1); - nir_alu_src_copy(&chan->src[0], &instr->src[0], mem_ctx); + nir_alu_src_copy(&chan->src[0], &instr->src[0], chan); chan->src[0].swizzle[0] = chan->src[0].swizzle[i]; if (nir_op_infos[chan_op].num_inputs > 1) { assert(nir_op_infos[chan_op].num_inputs == 2); - nir_alu_src_copy(&chan->src[1], &instr->src[1], mem_ctx); + nir_alu_src_copy(&chan->src[1], &instr->src[1], chan); chan->src[1].swizzle[0] = chan->src[1].swizzle[i]; } @@ -153,7 +153,7 @@ lower_alu_instr_scalar(nir_alu_instr *instr, void *mem_ctx) unsigned src_chan = (nir_op_infos[instr->op].input_sizes[i] == 1 ? 0 : chan); - nir_alu_src_copy(&lower->src[i], &instr->src[i], mem_ctx); + nir_alu_src_copy(&lower->src[i], &instr->src[i], lower); for (int j = 0; j < 4; j++) lower->src[i].swizzle[j] = instr->src[i].swizzle[src_chan]; } diff --git a/src/glsl/nir/nir_lower_atomics.c b/src/glsl/nir/nir_lower_atomics.c index ce3615a3aa1..7ae8462882a 100644 --- a/src/glsl/nir/nir_lower_atomics.c +++ b/src/glsl/nir/nir_lower_atomics.c @@ -91,7 +91,7 @@ lower_instr(nir_intrinsic_instr *instr, nir_function_impl *impl) nir_alu_instr *mul = nir_alu_instr_create(mem_ctx, nir_op_imul); nir_ssa_dest_init(&mul->instr, &mul->dest.dest, 1, NULL); mul->dest.write_mask = 0x1; - nir_src_copy(&mul->src[0].src, &deref_array->indirect, mem_ctx); + nir_src_copy(&mul->src[0].src, &deref_array->indirect, mul); mul->src[1].src.is_ssa = true; mul->src[1].src.ssa = &atomic_counter_size->def; nir_instr_insert_before(&instr->instr, &mul->instr); diff --git a/src/glsl/nir/nir_lower_io.c b/src/glsl/nir/nir_lower_io.c index afb463040cc..3739fc83f91 100644 --- a/src/glsl/nir/nir_lower_io.c +++ b/src/glsl/nir/nir_lower_io.c @@ -221,7 +221,7 @@ nir_lower_io_block(nir_block *block, void *void_state) store->const_index[0] = offset; - nir_src_copy(&store->src[0], &intrin->src[0], state->mem_ctx); + nir_src_copy(&store->src[0], &intrin->src[0], store); if (has_indirect) store->src[1] = indirect; diff --git a/src/glsl/nir/nir_lower_locals_to_regs.c b/src/glsl/nir/nir_lower_locals_to_regs.c index 28fdec50e04..b77d974f568 100644 --- a/src/glsl/nir/nir_lower_locals_to_regs.c +++ b/src/glsl/nir/nir_lower_locals_to_regs.c @@ -183,8 +183,7 @@ get_deref_reg_src(nir_deref_var *deref, nir_instr *instr, nir_alu_instr *add = nir_alu_instr_create(state->shader, nir_op_iadd); add->src[0].src = *src.reg.indirect; - nir_src_copy(&add->src[1].src, &deref_array->indirect, - state->shader); + nir_src_copy(&add->src[1].src, &deref_array->indirect, add); add->dest.write_mask = 1; nir_ssa_dest_init(&add->instr, &add->dest.dest, 1, NULL); nir_instr_insert_before(instr, &add->instr); @@ -225,7 +224,7 @@ lower_locals_to_regs_block(nir_block *block, void *void_state) nir_src_for_ssa(&mov->dest.dest.ssa), state->shader); } else { - nir_dest_copy(&mov->dest.dest, &intrin->dest, state->shader); + nir_dest_copy(&mov->dest.dest, &intrin->dest, &mov->instr); } nir_instr_insert_before(&intrin->instr, &mov->instr); @@ -241,7 +240,7 @@ lower_locals_to_regs_block(nir_block *block, void *void_state) &intrin->instr, state); nir_alu_instr *mov = nir_alu_instr_create(state->shader, nir_op_imov); - nir_src_copy(&mov->src[0].src, &intrin->src[0], state->shader); + nir_src_copy(&mov->src[0].src, &intrin->src[0], mov); mov->dest.write_mask = (1 << intrin->num_components) - 1; mov->dest.dest.is_ssa = false; mov->dest.dest.reg.reg = reg_src.reg.reg; diff --git a/src/glsl/nir/nir_lower_vec_to_movs.c b/src/glsl/nir/nir_lower_vec_to_movs.c index e6d522f88ce..b7f096d14ff 100644 --- a/src/glsl/nir/nir_lower_vec_to_movs.c +++ b/src/glsl/nir/nir_lower_vec_to_movs.c @@ -60,8 +60,8 @@ insert_mov(nir_alu_instr *vec, unsigned start_channel, assert(src_idx < nir_op_infos[vec->op].num_inputs); nir_alu_instr *mov = nir_alu_instr_create(mem_ctx, nir_op_imov); - nir_alu_src_copy(&mov->src[0], &vec->src[src_idx], mem_ctx); - nir_alu_dest_copy(&mov->dest, &vec->dest, mem_ctx); + nir_alu_src_copy(&mov->src[0], &vec->src[src_idx], mov); + nir_alu_dest_copy(&mov->dest, &vec->dest, mov); mov->dest.write_mask = (1u << start_channel); mov->src[0].swizzle[start_channel] = vec->src[src_idx].swizzle[0]; diff --git a/src/glsl/nir/nir_opt_peephole_ffma.c b/src/glsl/nir/nir_opt_peephole_ffma.c index 97538e5e64a..a23123ea58c 100644 --- a/src/glsl/nir/nir_opt_peephole_ffma.c +++ b/src/glsl/nir/nir_opt_peephole_ffma.c @@ -216,8 +216,7 @@ nir_opt_peephole_ffma_block(nir_block *block, void *void_state) for (unsigned j = 0; j < add->dest.dest.ssa.num_components; j++) ffma->src[i].swizzle[j] = mul->src[i].swizzle[swizzle[j]]; } - nir_alu_src_copy(&ffma->src[2], &add->src[1 - add_mul_src], - state->mem_ctx); + nir_alu_src_copy(&ffma->src[2], &add->src[1 - add_mul_src], ffma); assert(add->dest.dest.is_ssa); diff --git a/src/glsl/nir/nir_opt_peephole_select.c b/src/glsl/nir/nir_opt_peephole_select.c index 26ec4ed92d3..5b6037a6c46 100644 --- a/src/glsl/nir/nir_opt_peephole_select.c +++ b/src/glsl/nir/nir_opt_peephole_select.c @@ -196,7 +196,7 @@ nir_opt_peephole_select_block(nir_block *block, void *void_state) nir_phi_instr *phi = nir_instr_as_phi(instr); nir_alu_instr *sel = nir_alu_instr_create(state->mem_ctx, nir_op_bcsel); - nir_src_copy(&sel->src[0].src, &if_stmt->condition, state->mem_ctx); + nir_src_copy(&sel->src[0].src, &if_stmt->condition, sel); /* Splat the condition to all channels */ memset(sel->src[0].swizzle, 0, sizeof sel->src[0].swizzle); @@ -206,7 +206,7 @@ nir_opt_peephole_select_block(nir_block *block, void *void_state) assert(src->src.is_ssa); unsigned idx = src->pred == then_block ? 1 : 2; - nir_src_copy(&sel->src[idx].src, &src->src, state->mem_ctx); + nir_src_copy(&sel->src[idx].src, &src->src, sel); } nir_ssa_dest_init(&sel->instr, &sel->dest.dest, |