lima/ppir: add lod-bias support
[mesa.git] / src / gallium / drivers / lima / ir / pp / ppir.h
index ec649e4afa9a12f363118588ef4a533844386af3..5895a696db8f15cb678bf1cc6bb9b0a2df59ddeb 100644 (file)
@@ -99,6 +99,7 @@ typedef enum {
    ppir_op_load_uniform,
    ppir_op_load_varying,
    ppir_op_load_coords,
+   ppir_op_load_coords_reg,
    ppir_op_load_fragcoord,
    ppir_op_load_pointcoord,
    ppir_op_load_frontface,
@@ -113,7 +114,7 @@ typedef enum {
    ppir_op_discard,
    ppir_op_branch,
 
-   ppir_op_dummy,
+   ppir_op_undef,
 
    ppir_op_num,
 } ppir_op;
@@ -136,8 +137,15 @@ typedef struct {
 
 extern const ppir_op_info ppir_op_infos[];
 
+typedef enum {
+   ppir_dep_src,
+   ppir_dep_write_after_read,
+   ppir_dep_sequence,
+} ppir_dep_type;
+
 typedef struct {
    void *pred, *succ;
+   ppir_dep_type type;
    struct list_head pred_link;
    struct list_head succ_link;
 } ppir_dep;
@@ -181,6 +189,7 @@ typedef struct ppir_reg {
    /* instr live range */
    int live_in, live_out;
    bool spilled;
+   bool undef;
 } ppir_reg;
 
 typedef enum {
@@ -248,6 +257,7 @@ typedef struct {
    int num_components;
    ppir_dest dest;
    ppir_src src;
+   int num_src;
 } ppir_load_node;
 
 typedef struct {
@@ -263,6 +273,9 @@ typedef struct {
    ppir_src src_coords; /* not to be used after lowering */
    int sampler;
    int sampler_dim;
+   bool lod_bias_en;
+   bool explicit_lod;
+   ppir_src lod_bias;
 } ppir_load_texture_node;
 
 typedef struct {
@@ -375,7 +388,7 @@ typedef struct ppir_compiler {
 } ppir_compiler;
 
 void *ppir_node_create(ppir_block *block, ppir_op op, int index, unsigned mask);
-void ppir_node_add_dep(ppir_node *succ, ppir_node *pred);
+void ppir_node_add_dep(ppir_node *succ, ppir_node *pred, ppir_dep_type type);
 void ppir_node_remove_dep(ppir_dep *dep);
 void ppir_node_delete(ppir_node *node);
 void ppir_node_print_prog(ppir_compiler *comp);
@@ -389,12 +402,12 @@ ppir_node *ppir_node_insert_mov(ppir_node *node);
 
 static inline bool ppir_node_is_root(ppir_node *node)
 {
-   return list_empty(&node->succ_list);
+   return list_is_empty(&node->succ_list);
 }
 
 static inline bool ppir_node_is_leaf(ppir_node *node)
 {
-   return list_empty(&node->pred_list);
+   return list_is_empty(&node->pred_list);
 }
 
 static inline bool ppir_node_has_single_succ(ppir_node *node)
@@ -402,6 +415,8 @@ static inline bool ppir_node_has_single_succ(ppir_node *node)
    return list_is_singular(&node->succ_list);
 }
 
+bool ppir_node_has_single_src_succ(ppir_node *node);
+
 static inline ppir_node *ppir_node_first_succ(ppir_node *node)
 {
    return list_first_entry(&node->succ_list, ppir_dep, succ_link)->succ;
@@ -457,8 +472,9 @@ static inline int ppir_node_get_src_num(ppir_node *node)
       return ppir_node_to_alu(node)->num_src;
    case ppir_node_type_branch:
       return ppir_node_to_branch(node)->num_src;
-   case ppir_node_type_load_texture:
    case ppir_node_type_load:
+      return ppir_node_to_load(node)->num_src;
+   case ppir_node_type_load_texture:
    case ppir_node_type_store:
       return 1;
    default:
@@ -640,12 +656,12 @@ void ppir_instr_insert_mul_node(ppir_node *add, ppir_node *mul);
 
 static inline bool ppir_instr_is_root(ppir_instr *instr)
 {
-   return list_empty(&instr->succ_list);
+   return list_is_empty(&instr->succ_list);
 }
 
 static inline bool ppir_instr_is_leaf(ppir_instr *instr)
 {
-   return list_empty(&instr->pred_list);
+   return list_is_empty(&instr->pred_list);
 }
 
 bool ppir_lower_prog(ppir_compiler *comp);