pan/bi: Emit load_vary ops
[mesa.git] / src / panfrost / bifrost / bifrost.h
index 41bf16cfafcad8608d29f2309c38290bd80f1680..c7e6bcf8630bdc00eeca60fdfa23dd4a6008bb69 100644 (file)
@@ -72,6 +72,17 @@ struct bifrost_header {
         unsigned unk4 : 1; // part of nextClauseType?
 } __attribute__((packed));
 
+enum bifrost_packed_src {
+        BIFROST_SRC_PORT0    = 0,
+        BIFROST_SRC_PORT1    = 1,
+        BIFROST_SRC_PORT3    = 2,
+        BIFROST_SRC_STAGE    = 3,
+        BIFROST_SRC_CONST_LO = 4,
+        BIFROST_SRC_CONST_HI = 5,
+        BIFROST_SRC_PASS_FMA = 6,
+        BIFROST_SRC_PASS_ADD = 7,
+};
+
 struct bifrost_fma_inst {
         unsigned src0 : 3;
         unsigned op   : 20;
@@ -123,6 +134,8 @@ enum bifrost_minmax_mode {
         BIFROST_SRC0_WINS   = 0x3,
 };
 
+#define BIFROST_FMA_OP_FADD32 (0x58 >> 2)
+
 struct bifrost_fma_add {
         unsigned src0 : 3;
         unsigned src1 : 3;
@@ -136,6 +149,22 @@ struct bifrost_fma_add {
         unsigned op : 6;
 } __attribute__((packed));
 
+#define BIFROST_FMA_OP_FMA (0x00)
+
+struct bifrost_fma_fma {
+        unsigned src0 : 3;
+        unsigned src1 : 3;
+        unsigned src2 : 3;
+        unsigned src_expand : 3;
+        unsigned src0_abs : 1;
+        unsigned unk : 4;
+        unsigned src0_neg : 1;
+        unsigned src2_neg : 1;
+        unsigned src1_abs : 1;
+        unsigned src2_abs : 1;
+        unsigned op : 5;
+} __attribute__((packed));
+
 enum bifrost_csel_cond {
         BIFROST_FEQ_F = 0x0,
         BIFROST_FGT_F = 0x1,
@@ -211,6 +240,9 @@ enum bifrost_interp_mode {
         BIFROST_INTERP_EXPLICIT = 0x3
 };
 
+#define BIFROST_ADD_OP_LD_VAR_16 (0x1a << 1)
+#define BIFROST_ADD_OP_LD_VAR_32 (0x0a << 1)
+
 struct bifrost_ld_var {
         unsigned src0 : 3;