summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/lima
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/lima')
-rw-r--r--src/gallium/drivers/lima/ir/pp/node.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/gallium/drivers/lima/ir/pp/node.c b/src/gallium/drivers/lima/ir/pp/node.c
index 280e08e9e2d..841303b8a86 100644
--- a/src/gallium/drivers/lima/ir/pp/node.c
+++ b/src/gallium/drivers/lima/ir/pp/node.c
@@ -394,14 +394,42 @@ static void _ppir_node_replace_child(ppir_src *src, ppir_node *old_child, ppir_n
void ppir_node_replace_child(ppir_node *parent, ppir_node *old_child, ppir_node *new_child)
{
- if (parent->type == ppir_node_type_alu) {
+ switch (parent->type) {
+ case ppir_node_type_alu:
+ {
ppir_alu_node *alu = ppir_node_to_alu(parent);
for (int i = 0; i < alu->num_src; i++)
_ppir_node_replace_child(alu->src + i, old_child, new_child);
+ break;
}
- else if (parent->type == ppir_node_type_store) {
+ case ppir_node_type_branch:
+ {
+ ppir_branch_node *branch = ppir_node_to_branch(parent);
+ for (int i = 0; i < 2; i++)
+ _ppir_node_replace_child(branch->src + i, old_child, new_child);
+ break;
+ }
+ case ppir_node_type_load:
+ {
+ ppir_load_node *load = ppir_node_to_load(parent);
+ _ppir_node_replace_child(&load->src, old_child, new_child);
+ break;
+ }
+ case ppir_node_type_load_texture:
+ {
+ ppir_load_texture_node *load_texture = ppir_node_to_load_texture(parent);
+ _ppir_node_replace_child(&load_texture->src_coords, old_child, new_child);
+ break;
+ }
+ case ppir_node_type_store:
+ {
ppir_store_node *store = ppir_node_to_store(parent);
_ppir_node_replace_child(&store->src, old_child, new_child);
+ break;
+ }
+ default:
+ ppir_debug("unknown node type in %s\n", __func__);
+ break;
}
}