panfrost: Passthrough NATIVE loads/stores
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 25 May 2020 18:00:17 +0000 (14:00 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 3 Jun 2020 15:36:57 +0000 (15:36 +0000)
Now that we handle load_output directly, this works for e.g. RGB565 on
Midgard.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5285>

src/panfrost/util/pan_lower_framebuffer.c

index fe20be1c3f97c779b3f021a86cb5265e4d7adbd0..6e704f7763c65928e8fa1538df8f844d354bfa25 100644 (file)
@@ -126,6 +126,17 @@ pan_format_class_store(const struct util_format_description *desc, unsigned quir
         return PAN_FORMAT_NATIVE;
 }
 
+/* Convenience method */
+
+static enum pan_format_class
+pan_format_class(const struct util_format_description *desc, unsigned quirks, bool is_store)
+{
+        if (is_store)
+                return pan_format_class_store(desc, quirks);
+        else
+                return pan_format_class_load(desc, quirks);
+}
+
 /* Software packs/unpacks, by format class. Packs take in the pixel value typed
  * as `pan_unpacked_type_for_format` of the format and return an i32vec4
  * suitable for storing (with components replicated to fill). Unpacks do the
@@ -668,6 +679,13 @@ pan_lower_framebuffer(nir_shader *shader,
                                 if (!(is_load || is_store))
                                         continue;
 
+                                enum pan_format_class fmt_class =
+                                        pan_format_class(desc, quirks, is_store);
+
+                                /* Don't lower */
+                                if (fmt_class == PAN_FORMAT_NATIVE)
+                                        continue;
+
                                 /* Don't worry about MRT */
                                 nir_variable *var = nir_intrinsic_get_var(intr, 0);