pan/mdg: Implement i/umul_high
[mesa.git] / src / panfrost / include / panfrost-quirks.h
index 83c7c84b02063e470d40f343598dbc4bc7bac7ae..22a79c91f011e18234470638e8cd8874a3dbae51 100644 (file)
 
 #define MIDGARD_SFBD (1 << 1)
 
+/* Whether fp16 is broken in the compiler. Hopefully this quirk will go away
+ * over time */
+
+#define MIDGARD_BROKEN_FP16 (1 << 2)
+
+/* What it says on the tin */
+#define IS_BIFROST (1 << 3)
+
+/* What it says on the tin */
+#define HAS_SWIZZLES (1 << 4)
+
+/* bit 5 unused */
+
+/* Whether this GPU lacks support for any typed stores in blend shader,
+ * requiring packing instead */
+#define MIDGARD_NO_TYPED_BLEND_STORES (1 << 6)
+
+/* Whether this GPU lacks support for any typed loads, requiring packing */
+#define MIDGARD_NO_TYPED_BLEND_LOADS (1 << 7)
+
+/* Lack support for colour pack/unpack opcodes */
+#define NO_BLEND_PACKS (1 << 8)
+
+/* Has some missing formats for typed loads */
+#define MIDGARD_MISSING_LOADS (1 << 9)
+
+/* Lack support for AFBC */
+#define MIDGARD_NO_AFBC (1 << 10)
+
+/* Quirk collections common to particular uarchs */
+
+#define MIDGARD_QUIRKS (MIDGARD_BROKEN_FP16 | HAS_SWIZZLES \
+                | MIDGARD_NO_TYPED_BLEND_STORES \
+                | MIDGARD_MISSING_LOADS)
+
+/* TODO: AFBC on Bifrost */
+#define BIFROST_QUIRKS (IS_BIFROST | NO_BLEND_PACKS | MIDGARD_NO_AFBC)
+
 static inline unsigned
 panfrost_get_quirks(unsigned gpu_id)
 {
         switch (gpu_id) {
         case 0x600:
         case 0x620:
-                return MIDGARD_SFBD;
+                return MIDGARD_QUIRKS | MIDGARD_SFBD
+                        | MIDGARD_NO_TYPED_BLEND_LOADS
+                        | NO_BLEND_PACKS | MIDGARD_NO_AFBC;
 
         case 0x720:
-                return MIDGARD_SFBD | MIDGARD_NO_HIER_TILING;
+                return MIDGARD_QUIRKS | MIDGARD_SFBD | MIDGARD_NO_HIER_TILING
+                        | MIDGARD_NO_AFBC;
 
         case 0x820:
         case 0x830:
-                return MIDGARD_NO_HIER_TILING;
+                return MIDGARD_QUIRKS | MIDGARD_NO_HIER_TILING;
 
         case 0x750:
+                /* Someone should investigate the broken loads? */
+                return MIDGARD_QUIRKS | MIDGARD_NO_TYPED_BLEND_LOADS
+                        | NO_BLEND_PACKS;
+
         case 0x860:
         case 0x880:
-                return 0;
+                return MIDGARD_QUIRKS;
+
+        case 0x6000: /* G71 */
+                return BIFROST_QUIRKS | HAS_SWIZZLES;
+
+        case 0x7093: /* G31 */
+        case 0x7212: /* G52 */
+                return BIFROST_QUIRKS;
 
         default:
-                unreachable("Invalid Midgard GPU ID");
+                unreachable("Unknown Panfrost GPU ID");
         }
 }