lima/ppir: introduce accessors for ppir_node sources
authorVasily Khoruzhick <anarsoul@gmail.com>
Wed, 24 Jul 2019 22:25:33 +0000 (15:25 -0700)
committerVasily Khoruzhick <anarsoul@gmail.com>
Wed, 14 Aug 2019 05:38:07 +0000 (22:38 -0700)
Sometimes we need to walk through ppir_node sources, common
accessor for all node types will simplify code a lot.

Reviewed-by: Qiang Yu <yuq825@gmail.com>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
src/gallium/drivers/lima/ir/pp/ppir.h

index e8c6e015f0efc056e7ac79489498e8ca1d1d82aa..2d37d80715ae1fbd5583e7931e5c3dd1143536d7 100644 (file)
@@ -426,6 +426,47 @@ static inline ppir_dest *ppir_node_get_dest(ppir_node *node)
    }
 }
 
+static inline int ppir_node_get_src_num(ppir_node *node)
+{
+   switch (node->type) {
+   case ppir_node_type_alu:
+      return ppir_node_to_alu(node)->num_src;
+   case ppir_node_type_branch:
+      return 2;
+   case ppir_node_type_load_texture:
+   case ppir_node_type_load:
+   case ppir_node_type_store:
+      return 1;
+   default:
+      return 0;
+   }
+
+   return 0;
+}
+
+static inline ppir_src *ppir_node_get_src(ppir_node *node, int idx)
+{
+   if (idx < 0 || idx >= ppir_node_get_src_num(node))
+      return NULL;
+
+   switch (node->type) {
+   case ppir_node_type_alu:
+      return &ppir_node_to_alu(node)->src[idx];
+   case ppir_node_type_branch:
+      return &ppir_node_to_branch(node)->src[idx];
+   case ppir_node_type_load_texture:
+      return &ppir_node_to_load_texture(node)->src_coords;
+   case ppir_node_type_load:
+      return &ppir_node_to_load(node)->src;
+   case ppir_node_type_store:
+      return &ppir_node_to_store(node)->src;
+   default:
+      break;
+   }
+
+   return NULL;
+}
+
 static inline void ppir_node_target_assign(ppir_src *src, ppir_dest *dest)
 {
    src->type = dest->type;