lima/ppir: simplify select op lowering and scheduling
[mesa.git] / src / gallium / drivers / lima / ir / pp / codegen.c
index 09cf5e623bd9cbb546af45c194283ce36133a23c..615438cfccef74369b8a614b9e90974de9a66fc1 100644 (file)
@@ -56,7 +56,9 @@ static void ppir_codegen_encode_varying(ppir_node *node, void *code)
    if (num_components) {
       assert(node->op == ppir_op_load_varying ||
              node->op == ppir_op_load_coords ||
-             node->op == ppir_op_load_fragcoord);
+             node->op == ppir_op_load_fragcoord ||
+             node->op == ppir_op_load_pointcoord ||
+             node->op == ppir_op_load_frontface);
 
       f->imm.dest = index >> 2;
       f->imm.mask = dest->write_mask << (index & 0x3);
@@ -70,9 +72,20 @@ static void ppir_codegen_encode_varying(ppir_node *node, void *code)
       else
          f->imm.index = load->index >> alignment;
 
-      if (node->op == ppir_op_load_fragcoord) {
-         f->imm.source_type = 2;
-         f->imm.perspective = 3;
+      switch (node->op) {
+         case ppir_op_load_fragcoord:
+            f->imm.source_type = 2;
+            f->imm.perspective = 3;
+            break;
+         case ppir_op_load_pointcoord:
+            f->imm.source_type = 3;
+            break;
+         case ppir_op_load_frontface:
+            f->imm.source_type = 3;
+            f->imm.perspective = 1;
+            break;
+         default:
+            break;
       }
    }
    else {
@@ -230,6 +243,9 @@ static void ppir_codegen_encode_scl_mul(ppir_node *node, void *code)
    case ppir_op_mov:
       f->op = ppir_codegen_float_mul_op_mov;
       break;
+   case ppir_op_sel_cond:
+      f->op = ppir_codegen_float_mul_op_mov;
+      break;
    case ppir_op_max:
       f->op = ppir_codegen_float_mul_op_max;
       break;
@@ -537,8 +553,8 @@ static void ppir_codegen_encode_branch(ppir_node *node, void *code)
    branch = ppir_node_to_branch(node);
 
    b->branch.unknown_0 = 0x0;
-   b->branch.arg0_source = ppir_target_get_src_reg_index(&branch->src[0]);
-   b->branch.arg1_source = ppir_target_get_src_reg_index(&branch->src[1]);
+   b->branch.arg0_source = get_scl_reg_index(&branch->src[0], 0);
+   b->branch.arg1_source = get_scl_reg_index(&branch->src[1], 0);
    b->branch.cond_gt = branch->cond_gt;
    b->branch.cond_eq = branch->cond_eq;
    b->branch.cond_lt = branch->cond_lt;