diff --git a/src/panfrost/lib/pan_format.h b/src/panfrost/lib/pan_format.h index 9a1d1a53a03..dafb9963014 100644 --- a/src/panfrost/lib/pan_format.h +++ b/src/panfrost/lib/pan_format.h @@ -66,6 +66,24 @@ extern const struct pan_blendable_format panfrost_blendable_formats_v9[PIPE_FORMAT_COUNT]; #define panfrost_blendable_formats_v10 panfrost_blendable_formats_v9 +static inline const struct pan_blendable_format * +panfrost_blendable_format_table(unsigned arch) +{ + switch (arch) { +#define FMT_TABLE(x) case x: return panfrost_blendable_formats_v ## x + FMT_TABLE(4); + FMT_TABLE(5); + FMT_TABLE(6); + FMT_TABLE(7); + FMT_TABLE(9); + FMT_TABLE(10); +#undef FMT_TABLE + default: + assert(!"Unsupported architecture"); + return NULL; + } +} + #define panfrost_pipe_format_v4 panfrost_pipe_format_v5 extern const struct panfrost_format panfrost_pipe_format_v5[PIPE_FORMAT_COUNT]; extern const struct panfrost_format panfrost_pipe_format_v6[PIPE_FORMAT_COUNT]; @@ -73,6 +91,24 @@ extern const struct panfrost_format panfrost_pipe_format_v7[PIPE_FORMAT_COUNT]; extern const struct panfrost_format panfrost_pipe_format_v9[PIPE_FORMAT_COUNT]; #define panfrost_pipe_format_v10 panfrost_pipe_format_v9 +static inline const struct panfrost_format * +panfrost_format_table(unsigned arch) +{ + switch (arch) { +#define FMT_TABLE(x) case x: return panfrost_pipe_format_v ## x + FMT_TABLE(4); + FMT_TABLE(5); + FMT_TABLE(6); + FMT_TABLE(7); + FMT_TABLE(9); + FMT_TABLE(10); +#undef FMT_TABLE + default: + assert(!"Unsupported architecture"); + return NULL; + } +} + /* Helpers to construct swizzles */ #define PAN_V6_SWIZZLE(R, G, B, A) \ diff --git a/src/panfrost/lib/pan_props.c b/src/panfrost/lib/pan_props.c index 4a1912b099d..5650c338cde 100644 --- a/src/panfrost/lib/pan_props.c +++ b/src/panfrost/lib/pan_props.c @@ -249,20 +249,8 @@ panfrost_open_device(void *memctx, int fd, struct panfrost_device *dev) dev->compressed_formats = panfrost_query_compressed_formats(dev); dev->tiler_features = panfrost_query_tiler_features(dev); dev->has_afbc = panfrost_query_afbc(dev, dev->arch); - - if (dev->arch <= 5) { - dev->formats = panfrost_pipe_format_v5; - dev->blendable_formats = panfrost_blendable_formats_v5; - } else if (dev->arch == 6) { - dev->formats = panfrost_pipe_format_v6; - dev->blendable_formats = panfrost_blendable_formats_v6; - } else if (dev->arch <= 7) { - dev->formats = panfrost_pipe_format_v7; - dev->blendable_formats = panfrost_blendable_formats_v7; - } else { - dev->formats = panfrost_pipe_format_v9; - dev->blendable_formats = panfrost_blendable_formats_v9; - } + dev->formats = panfrost_format_table(dev->arch); + dev->blendable_formats = panfrost_blendable_format_table(dev->arch); util_sparse_array_init(&dev->bo_map, sizeof(struct panfrost_bo), 512);