vc4: Add a QIR value for the QPU element register.
authorEric Anholt <eric@anholt.net>
Thu, 25 Aug 2016 20:48:21 +0000 (13:48 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 26 Aug 2016 00:24:11 +0000 (17:24 -0700)
This will be used in the ddx/ddy support for "Am I the top half?" or "Am I
the left half?" checks.

src/gallium/drivers/vc4/vc4_qir.c
src/gallium/drivers/vc4/vc4_qir.h
src/gallium/drivers/vc4/vc4_qir_validate.c
src/gallium/drivers/vc4/vc4_qpu_emit.c

index 9ff1561..0919d32 100644 (file)
@@ -292,6 +292,7 @@ qir_print_reg(struct vc4_compile *c, struct qreg reg, bool write)
                 [QFILE_FRAG_X] = "frag_x",
                 [QFILE_FRAG_Y] = "frag_y",
                 [QFILE_FRAG_REV_FLAG] = "frag_rev_flag",
+                [QFILE_QPU_ELEMENT] = "elem",
         };
 
         switch (reg.file) {
index 6b48959..9e61200 100644 (file)
@@ -61,6 +61,7 @@ enum qfile {
         QFILE_FRAG_X,
         QFILE_FRAG_Y,
         QFILE_FRAG_REV_FLAG,
+        QFILE_QPU_ELEMENT,
 
         /**
          * Stores an immediate value in the index field that will be used
index e8d4372..e7cfe5a 100644 (file)
@@ -79,6 +79,7 @@ void qir_validate(struct vc4_compile *c)
                 case QFILE_FRAG_X:
                 case QFILE_FRAG_Y:
                 case QFILE_FRAG_REV_FLAG:
+                case QFILE_QPU_ELEMENT:
                 case QFILE_SMALL_IMM:
                 case QFILE_LOAD_IMM:
                         fail_instr(c, inst, "Bad dest file");
@@ -98,6 +99,7 @@ void qir_validate(struct vc4_compile *c)
                         case QFILE_UNIF:
                         case QFILE_VPM:
                         case QFILE_LOAD_IMM:
+                        case QFILE_QPU_ELEMENT:
                                 break;
 
                         case QFILE_SMALL_IMM:
index 8249929..77aa4f6 100644 (file)
@@ -339,6 +339,9 @@ vc4_generate_code_block(struct vc4_compile *c,
                         case QFILE_FRAG_REV_FLAG:
                                 src[i] = qpu_rb(QPU_R_MS_REV_FLAGS);
                                 break;
+                        case QFILE_QPU_ELEMENT:
+                                src[i] = qpu_ra(QPU_R_ELEM_QPU);
+                                break;
 
                         case QFILE_TLB_COLOR_WRITE:
                         case QFILE_TLB_COLOR_WRITE_MS:
@@ -383,6 +386,7 @@ vc4_generate_code_block(struct vc4_compile *c,
                 case QFILE_FRAG_X:
                 case QFILE_FRAG_Y:
                 case QFILE_FRAG_REV_FLAG:
+                case QFILE_QPU_ELEMENT:
                         assert(!"not reached");
                         break;
                 }