ppir_alu_node *alu = ppir_node_to_alu(move);
alu->dest = *dest;
alu->num_src = 1;
- ppir_node_target_assign(alu->src, dest);
+ ppir_node_target_assign(alu->src, node);
for (int i = 0; i < 4; i++)
alu->src->swizzle[i] = i;
}
dest->pipeline = ppir_pipeline_reg_uniform;
alu->num_src = 1;
- ppir_node_target_assign(&alu->src[0], dest);
+ ppir_node_target_assign(&alu->src[0], node);
for (int i = 0; i < 4; i++)
alu->src->swizzle[i] = i;
dest->pipeline = ppir_pipeline_reg_sampler;
alu->num_src = 1;
- ppir_node_target_assign(&alu->src[0], dest);
+ ppir_node_target_assign(&alu->src[0], node);
for (int i = 0; i < 4; i++)
alu->src->swizzle[i] = i;
assert(ppir_node_first_pred(node) == move);
src->swizzle[0] = 0;
- ppir_node_target_assign(alu->src, move_dest);
+ ppir_node_target_assign(alu->src, move);
return true;
}
}
}
- ppir_dest *dest = ppir_node_get_dest(child);
- ppir_node_target_assign(ps, dest);
+ ppir_node_target_assign(ps, child);
}
static int nir_to_ppir_opcodes[nir_num_opcodes] = {
{
ppir_dest *od = ppir_node_get_dest(old_child);
if (ppir_node_target_equal(src, od)) {
- ppir_dest *nd = ppir_node_get_dest(new_child);
- ppir_node_target_assign(src, nd);
+ ppir_node_target_assign(src, new_child);
}
}
ppir_alu_node *alu = ppir_node_to_alu(move);
alu->dest = *dest;
alu->num_src = 1;
- ppir_node_target_assign(alu->src, dest);
+ ppir_node_target_assign(alu->src, node);
for (int i = 0; i < 4; i++)
alu->src->swizzle[i] = i;
}
typedef struct ppir_src {
ppir_target type;
+ ppir_node *node;
union {
ppir_reg *ssa;
return NULL;
}
-static inline void ppir_node_target_assign(ppir_src *src, ppir_dest *dest)
+static inline void ppir_node_target_assign(ppir_src *src, ppir_node *node)
{
+ ppir_dest *dest = ppir_node_get_dest(node);
src->type = dest->type;
switch (src->type) {
case ppir_target_ssa:
src->ssa = &dest->ssa;
+ src->node = node;
break;
case ppir_target_register:
src->reg = dest->reg;
+ /* Registers can be assigned from multiple nodes, so don't keep
+ * pointer to the node here
+ */
+ src->node = NULL;
break;
case ppir_target_pipeline:
src->pipeline = dest->pipeline;
+ src->node = node;
break;
}
}