Mesa (main): panfrost: Add Valhall compressed formats
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Mar 30 17:48:28 UTC 2022
Module: Mesa
Branch: main
Commit: 0c1fde956bf9b91182eca9c244ebc8bc63983481
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c1fde956bf9b91182eca9c244ebc8bc63983481
Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date: Sun Mar 13 17:27:28 2022 -0400
panfrost: Add Valhall compressed formats
We need to map to the interchange format, since there is no longer a pixel
format for the memory layout. Use this new format table on v9.
Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15586>
---
src/panfrost/lib/meson.build | 2 +-
src/panfrost/lib/pan_format.c | 108 ++++++++++++++++++++++++++++++++++++++++++
src/panfrost/lib/pan_format.h | 2 +
src/panfrost/lib/pan_props.c | 4 +-
4 files changed, 114 insertions(+), 2 deletions(-)
diff --git a/src/panfrost/lib/meson.build b/src/panfrost/lib/meson.build
index 298229bf3e1..0c0f0e62d7b 100644
--- a/src/panfrost/lib/meson.build
+++ b/src/panfrost/lib/meson.build
@@ -21,7 +21,7 @@
subdir('genxml')
-pixel_format_versions = ['6', '7']
+pixel_format_versions = ['6', '7', '9']
libpanfrost_pixel_format = []
foreach ver : pixel_format_versions
diff --git a/src/panfrost/lib/pan_format.c b/src/panfrost/lib/pan_format.c
index 1d6ba97e88b..387e150a455 100644
--- a/src/panfrost/lib/pan_format.c
+++ b/src/panfrost/lib/pan_format.c
@@ -171,6 +171,8 @@ GENX(panfrost_blendable_formats)[PIPE_FORMAT_COUNT] = {
const struct panfrost_format GENX(panfrost_pipe_format)[PIPE_FORMAT_COUNT] = {
FMT(NONE, CONSTANT, 0000, L, VTR_),
+
+#if PAN_ARCH <= 7
FMT(ETC1_RGB8, ETC2_RGB8, RGB1, L, _T__),
FMT(ETC2_RGB8, ETC2_RGB8, RGB1, L, _T__),
FMT(ETC2_SRGB8, ETC2_RGB8, RGB1, S, _T__),
@@ -246,6 +248,92 @@ const struct panfrost_format GENX(panfrost_pipe_format)[PIPE_FORMAT_COUNT] = {
FMT(ASTC_6x5x5_SRGB, ASTC_3D_LDR, RGBA, S, _T__),
FMT(ASTC_6x6x5_SRGB, ASTC_3D_LDR, RGBA, S, _T__),
FMT(ASTC_6x6x6_SRGB, ASTC_3D_LDR, RGBA, S, _T__),
+#else
+ /* Map to interchange format, as compression is specified in the plane
+ * descriptor on Valhall.
+ */
+ FMT(ETC1_RGB8, RGBA8_UNORM, RGB1, L, _T__),
+ FMT(ETC2_RGB8, RGBA8_UNORM, RGB1, L, _T__),
+ FMT(ETC2_SRGB8, RGBA8_UNORM, RGB1, S, _T__),
+ FMT(ETC2_R11_UNORM, R16_UNORM, R001, L, _T__),
+ FMT(ETC2_RGBA8, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(ETC2_SRGBA8, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ETC2_RG11_UNORM, RG16_UNORM, RG01, L, _T__),
+ FMT(ETC2_R11_SNORM, R16_SNORM, R001, L, _T__),
+ FMT(ETC2_RG11_SNORM, RG16_SNORM, RG01, L, _T__),
+ FMT(ETC2_RGB8A1, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(ETC2_SRGB8A1, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(DXT1_RGB, RGBA8_UNORM, RGB1, L, _T__),
+ FMT(DXT1_RGBA, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(DXT1_SRGB, RGBA8_UNORM, RGB1, S, _T__),
+ FMT(DXT1_SRGBA, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(DXT3_RGBA, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(DXT3_SRGBA, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(DXT5_RGBA, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(DXT5_SRGBA, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(RGTC1_UNORM, R16_UNORM, R001, L, _T__),
+ FMT(RGTC1_SNORM, R16_SNORM, R001, L, _T__),
+ FMT(RGTC2_UNORM, RG16_UNORM, RG01, L, _T__),
+ FMT(RGTC2_SNORM, RG16_SNORM, RG01, L, _T__),
+ FMT(BPTC_RGB_FLOAT, RGBA16F, RGB1, L, _T__),
+ FMT(BPTC_RGB_UFLOAT, RGBA16F, RGB1, L, _T__),
+ FMT(BPTC_RGBA_UNORM, RGBA8_UNORM, RGBA, L, _T__),
+ FMT(BPTC_SRGBA, RGBA8_UNORM, RGBA, S, _T__),
+
+ /* Mesa does not yet support astc_decode_mode extensions, so non-sRGB
+ * formats must be assumed to be wide.
+ */
+ FMT(ASTC_4x4, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_5x4, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_5x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_6x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_6x6, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_8x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_8x6, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_8x8, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_10x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_10x6, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_10x8, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_10x10, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_12x10, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_12x12, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_3x3x3, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_4x3x3, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_4x4x3, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_4x4x4, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_5x4x4, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_5x5x4, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_5x5x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_6x5x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_6x6x5, RGBA16F, RGBA, L, _T__),
+ FMT(ASTC_6x6x6, RGBA16F, RGBA, L, _T__),
+
+ /* By definition, sRGB formats are narrow */
+ FMT(ASTC_4x4_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_5x4_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_5x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_6x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_6x6_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_8x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_8x6_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_8x8_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_10x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_10x6_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_10x8_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_10x10_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_12x10_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_12x12_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_3x3x3_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_4x3x3_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_4x4x3_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_4x4x4_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_5x4x4_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_5x5x4_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_5x5x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_6x5x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+ FMT(ASTC_6x6x5_SRGB, RGBA8_UNORM, RGBA, S, _T__),
+#endif
+
FMT(R5G6B5_UNORM, RGB565, RGB1, L, VTR_),
FMT(B5G6R5_UNORM, RGB565, BGR1, L, VTR_),
FMT(R5G5B5X1_UNORM, RGB5_A1_UNORM, RGB1, L, VT__),
@@ -466,13 +554,33 @@ const struct panfrost_format GENX(panfrost_pipe_format)[PIPE_FORMAT_COUNT] = {
FMT(Z24_UNORM_S8_UINT, Z24X8_UNORM, RGBA, L, _T_Z),
FMT(Z24X8_UNORM, Z24X8_UNORM, RGBA, L, _T_Z),
FMT(Z32_FLOAT, R32F, RGBA, L, _T_Z),
+
+#if PAN_ARCH >= 9
+ /* Specify interchange formats, the actual format for depth/stencil is
+ * determined by the plane descriptor on Valhall.
+ *
+ * On Valhall, S8 logically acts like "X8S8", so "S8 RGBA" is logically
+ * "0s00" and "S8 GRBA" is logically "s000". For backwards compatibility
+ * we want stencil in the green channel, so we use the RGBA swizzles on
+ * Valhall despite the GRBA swizzles on Bifrost.
+ */
+ FMT(Z32_FLOAT_S8X24_UINT, R32F, RGBA, L, _T_Z),
+ FMT(X32_S8X24_UINT, S8, RGBA, L, _T__),
+ FMT(X24S8_UINT, S8, RGBA, L, _T_Z),
+ FMT(S8_UINT, S8, RGBA, L, _T__),
+
+#else
+ /* Specify real formats on Bifrost */
FMT(Z32_FLOAT_S8X24_UINT, Z32_X32, RGBA, L, _T_Z),
FMT(X32_S8X24_UINT, X32_S8X24, GRBA, L, _T__),
FMT(X24S8_UINT, X24S8, GRBA, L, _T_Z),
FMT(S8_UINT, S8, GRBA, L, _T__),
+ /* Obsolete formats removed in Valhall */
FMT(A8_UNORM, A8_UNORM, 000A, L, VTR_),
FMT(L8A8_UNORM, R8A8_UNORM, RRRA, L, VTR_),
FMT(L8A8_SRGB, R8A8_UNORM, RRRA, S, VTR_),
#endif
+
+#endif
};
diff --git a/src/panfrost/lib/pan_format.h b/src/panfrost/lib/pan_format.h
index b8a505706b1..547e009bb2b 100644
--- a/src/panfrost/lib/pan_format.h
+++ b/src/panfrost/lib/pan_format.h
@@ -51,8 +51,10 @@ struct pan_blendable_format {
extern const struct pan_blendable_format panfrost_blendable_formats_v6[PIPE_FORMAT_COUNT];
extern const struct pan_blendable_format panfrost_blendable_formats_v7[PIPE_FORMAT_COUNT];
+extern const struct pan_blendable_format panfrost_blendable_formats_v9[PIPE_FORMAT_COUNT];
extern const struct panfrost_format panfrost_pipe_format_v6[PIPE_FORMAT_COUNT];
extern const struct panfrost_format panfrost_pipe_format_v7[PIPE_FORMAT_COUNT];
+extern const struct panfrost_format panfrost_pipe_format_v9[PIPE_FORMAT_COUNT];
/* Helpers to construct swizzles */
diff --git a/src/panfrost/lib/pan_props.c b/src/panfrost/lib/pan_props.c
index b5ef6bdb9d3..693b475beb5 100644
--- a/src/panfrost/lib/pan_props.c
+++ b/src/panfrost/lib/pan_props.c
@@ -271,8 +271,10 @@ panfrost_open_device(void *memctx, int fd, struct panfrost_device *dev)
if (dev->arch <= 6)
dev->formats = panfrost_pipe_format_v6;
- else
+ else if (dev->arch <= 7)
dev->formats = panfrost_pipe_format_v7;
+ else
+ dev->formats = panfrost_pipe_format_v9;
util_sparse_array_init(&dev->bo_map, sizeof(struct panfrost_bo), 512);
More information about the mesa-commit
mailing list