Module: Mesa Branch: main Commit: 5a8d86f69efa4723f703d135a9cd27a982a62861 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5a8d86f69efa4723f703d135a9cd27a982a62861
Author: Alyssa Rosenzweig <[email protected]> Date: Tue Jan 25 18:08:55 2022 -0500 panfrost: Simplify format class selection This was made way more complicated than it needs to be for a Midgard-only pass. The only caller doesn't care about the class, only if it's native or not. Simplify it appropriately. It really isn't that hard. Signed-off-by: Alyssa Rosenzweig <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14724> --- src/panfrost/util/pan_lower_framebuffer.c | 51 +++++++------------------------ src/panfrost/util/pan_lower_framebuffer.h | 9 ------ 2 files changed, 11 insertions(+), 49 deletions(-) diff --git a/src/panfrost/util/pan_lower_framebuffer.c b/src/panfrost/util/pan_lower_framebuffer.c index 72f2cb580c0..6baa9189b58 100644 --- a/src/panfrost/util/pan_lower_framebuffer.c +++ b/src/panfrost/util/pan_lower_framebuffer.c @@ -87,49 +87,23 @@ pan_unpacked_type_for_format(const struct util_format_description *desc) } } -static enum pan_format_class -pan_format_class_load(const struct util_format_description *desc, unsigned quirks) +static bool +pan_is_format_native(const struct util_format_description *desc, unsigned quirks, bool is_store) { - /* Pure integers can be loaded via EXT_framebuffer_fetch and should be - * handled as a raw load with a size conversion (it's cheap). Likewise, - * since float framebuffers are internally implemented as raw (i.e. - * integer) framebuffers with blend shaders to go back and forth, they - * should be s/w as well */ + if (is_store) + return false; if (util_format_is_pure_integer(desc->format) || util_format_is_float(desc->format)) - return PAN_FORMAT_SOFTWARE; + return false; - /* Check if we can do anything better than software architecturally */ - if (quirks & MIDGARD_NO_TYPED_BLEND_LOADS) { - return (quirks & NO_BLEND_PACKS) - ? PAN_FORMAT_SOFTWARE : PAN_FORMAT_PACK; - } + if (quirks & MIDGARD_NO_TYPED_BLEND_LOADS) + return false; /* Some formats are missing as typed but have unpacks */ - switch (desc->format) { - case PIPE_FORMAT_R11G11B10_FLOAT: - return PAN_FORMAT_PACK; - default: - return PAN_FORMAT_NATIVE; - } -} + if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT) + return false; -static enum pan_format_class -pan_format_class_store(const struct util_format_description *desc, unsigned quirks) -{ - return (quirks & NO_BLEND_PACKS) ? PAN_FORMAT_SOFTWARE : - PAN_FORMAT_PACK; -} - -/* 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); + return true; } /* Software packs/unpacks, by format class. Packs take in the pixel value typed @@ -619,11 +593,8 @@ pan_lower_framebuffer(nir_shader *shader, const enum pipe_format *rt_fmts, const struct util_format_description *desc = util_format_description(rt_fmts[rt]); - enum pan_format_class fmt_class = - pan_format_class(desc, quirks, is_store); - /* Don't lower */ - if (fmt_class == PAN_FORMAT_NATIVE) + if (pan_is_format_native(desc, quirks, is_store)) continue; /* EXT_shader_framebuffer_fetch requires diff --git a/src/panfrost/util/pan_lower_framebuffer.h b/src/panfrost/util/pan_lower_framebuffer.h index 93f448e34a6..23230b648d3 100644 --- a/src/panfrost/util/pan_lower_framebuffer.h +++ b/src/panfrost/util/pan_lower_framebuffer.h @@ -30,15 +30,6 @@ #include "compiler/nir/nir.h" #include "util/format/u_format.h" -/* NATIVE formats can use a typed load/store. PACK formats cannot but can use a - * typed pack/unpack instruction. SOFTWARE formats are lowered */ - -enum pan_format_class { - PAN_FORMAT_NATIVE, - PAN_FORMAT_PACK, - PAN_FORMAT_SOFTWARE -}; - nir_alu_type pan_unpacked_type_for_format(const struct util_format_description *desc); bool pan_lower_framebuffer(nir_shader *shader,
