unsigned op : 5;
 };
 
+enum bifrost_interp_mode {
+        BIFROST_INTERP_PER_FRAG = 0x0,
+        BIFROST_INTERP_CENTROID = 0x1,
+        BIFROST_INTERP_DEFAULT  = 0x2,
+        BIFROST_INTERP_EXPLICIT = 0x3
+};
+
+struct bifrost_ld_var {
+        unsigned src0 : 3;
+
+        /* If top two bits set, indirect with src in bottom three */
+        unsigned addr : 5;
+
+        unsigned channels : 2; /* MALI_POSITIVE */
+        enum bifrost_interp_mode interp_mode : 2;
+        unsigned reuse : 1;
+        unsigned flat : 1;
+        unsigned op : 6;
+};
+
 struct bifrost_tex_ctrl {
         unsigned sampler_index : 4; // also used to signal indirects
         unsigned tex_index : 7;
 
                 if (ADD.op & 0x400)
                         fprintf(fp, ".flat");
                 switch ((ADD.op >> 7) & 0x3) {
-                case 0:
+                case BIFROST_INTERP_PER_FRAG:
                         fprintf(fp, ".per_frag");
                         break;
-                case 1:
+                case BIFROST_INTERP_CENTROID:
                         fprintf(fp, ".centroid");
                         break;
-                case 2:
+                case BIFROST_INTERP_DEFAULT:
                         break;
-                case 3:
+                case BIFROST_INTERP_EXPLICIT:
                         fprintf(fp, ".explicit");
                         break;
                 }