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@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15586>
This commit is contained in:
Alyssa Rosenzweig 2022-03-13 17:27:28 -04:00 committed by Marge Bot
parent 42b9295fa6
commit 0c1fde956b
4 changed files with 114 additions and 2 deletions

View file

@ -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

View file

@ -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
};

View file

@ -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 */

View file

@ -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);