turnip: subpass rework
[mesa.git] / src / mesa / program / prog_opt_constant_fold.c
index 1d796dcf2e43b809101ca5aa8ea1c5cfc55849a7..638bdbd1507636ab5c6b2f3448dac4ff89571a18 100644 (file)
@@ -90,8 +90,9 @@ src_regs_are_same(const struct prog_src_register *a,
 static void
 get_value(struct gl_program *prog, struct prog_src_register *r, float *data)
 {
+   unsigned pvo = prog->Parameters->ParameterValueOffset[r->Index];
    const gl_constant_value *const value =
-      prog->Parameters->ParameterValues[r->Index];
+      prog->Parameters->ParameterValues + pvo;
 
    data[0] = value[GET_SWZ(r->Swizzle, 0)].f;
    data[1] = value[GET_SWZ(r->Swizzle, 1)].f;
@@ -127,8 +128,8 @@ _mesa_constant_fold(struct gl_program *prog)
    bool progress = false;
    unsigned i;
 
-   for (i = 0; i < prog->NumInstructions; i++) {
-      struct prog_instruction *const inst = &prog->Instructions[i];
+   for (i = 0; i < prog->arb.NumInstructions; i++) {
+      struct prog_instruction *const inst = &prog->arb.Instructions[i];
 
       switch (inst->Opcode) {
       case OPCODE_ADD:
@@ -240,38 +241,6 @@ _mesa_constant_fold(struct gl_program *prog)
         }
         break;
 
-      case OPCODE_SEQ:
-        if (src_regs_are_constant(inst, 2)) {
-           float a[4];
-           float b[4];
-           float result[4];
-
-           get_value(prog, &inst->SrcReg[0], a);
-           get_value(prog, &inst->SrcReg[1], b);
-
-           result[0] = (a[0] == b[0]) ? 1.0f : 0.0f;
-           result[1] = (a[1] == b[1]) ? 1.0f : 0.0f;
-           result[2] = (a[2] == b[2]) ? 1.0f : 0.0f;
-           result[3] = (a[3] == b[3]) ? 1.0f : 0.0f;
-
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_vec4(prog, result);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        } else if (src_regs_are_same(&inst->SrcReg[0], &inst->SrcReg[1])) {
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_float(prog, 1.0f);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        }
-        break;
-
       case OPCODE_SGE:
         if (src_regs_are_constant(inst, 2)) {
            float a[4];
@@ -304,70 +273,6 @@ _mesa_constant_fold(struct gl_program *prog)
         }
         break;
 
-      case OPCODE_SGT:
-        if (src_regs_are_constant(inst, 2)) {
-           float a[4];
-           float b[4];
-           float result[4];
-
-           get_value(prog, &inst->SrcReg[0], a);
-           get_value(prog, &inst->SrcReg[1], b);
-
-           result[0] = (a[0] > b[0]) ? 1.0f : 0.0f;
-           result[1] = (a[1] > b[1]) ? 1.0f : 0.0f;
-           result[2] = (a[2] > b[2]) ? 1.0f : 0.0f;
-           result[3] = (a[3] > b[3]) ? 1.0f : 0.0f;
-
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_vec4(prog, result);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        } else if (src_regs_are_same(&inst->SrcReg[0], &inst->SrcReg[1])) {
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_float(prog, 0.0f);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        }
-        break;
-
-      case OPCODE_SLE:
-        if (src_regs_are_constant(inst, 2)) {
-           float a[4];
-           float b[4];
-           float result[4];
-
-           get_value(prog, &inst->SrcReg[0], a);
-           get_value(prog, &inst->SrcReg[1], b);
-
-           result[0] = (a[0] <= b[0]) ? 1.0f : 0.0f;
-           result[1] = (a[1] <= b[1]) ? 1.0f : 0.0f;
-           result[2] = (a[2] <= b[2]) ? 1.0f : 0.0f;
-           result[3] = (a[3] <= b[3]) ? 1.0f : 0.0f;
-
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_vec4(prog, result);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        } else if (src_regs_are_same(&inst->SrcReg[0], &inst->SrcReg[1])) {
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_float(prog, 1.0f);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        }
-        break;
-
       case OPCODE_SLT:
         if (src_regs_are_constant(inst, 2)) {
            float a[4];
@@ -400,38 +305,6 @@ _mesa_constant_fold(struct gl_program *prog)
         }
         break;
 
-      case OPCODE_SNE:
-        if (src_regs_are_constant(inst, 2)) {
-           float a[4];
-           float b[4];
-           float result[4];
-
-           get_value(prog, &inst->SrcReg[0], a);
-           get_value(prog, &inst->SrcReg[1], b);
-
-           result[0] = (a[0] != b[0]) ? 1.0f : 0.0f;
-           result[1] = (a[1] != b[1]) ? 1.0f : 0.0f;
-           result[2] = (a[2] != b[2]) ? 1.0f : 0.0f;
-           result[3] = (a[3] != b[3]) ? 1.0f : 0.0f;
-
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_vec4(prog, result);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        } else if (src_regs_are_same(&inst->SrcReg[0], &inst->SrcReg[1])) {
-           inst->Opcode = OPCODE_MOV;
-           inst->SrcReg[0] = src_reg_for_float(prog, 0.0f);
-
-           inst->SrcReg[1].File = PROGRAM_UNDEFINED;
-           inst->SrcReg[1].Swizzle = SWIZZLE_NOOP;
-
-           progress = true;
-        }
-        break;
-
       default:
         break;
       }