diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 0eb1863c961..363c323b383 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -584,27 +584,13 @@ panfrost_create_vertex_elements_state( for (int i = 0; i < num_elements; ++i) { enum pipe_format fmt = elements[i].src_format; const struct util_format_description *desc = util_format_description(fmt); - unsigned swizzle = 0; - if (dev->quirks & HAS_SWIZZLES) - swizzle = panfrost_translate_swizzle_4(desc->swizzle); - else - swizzle = panfrost_bifrost_swizzle(desc->nr_channels); - - enum mali_format hw_format = panfrost_pipe_format_table[desc->format].hw; - so->formats[i] = (hw_format << 12) | swizzle; - assert(hw_format); + so->formats[i] = dev->formats[desc->format].hw; + assert(so->formats[i]); } /* Let's also prepare vertex builtins */ - if (dev->quirks & HAS_SWIZZLES) - so->formats[PAN_VERTEX_ID] = (MALI_R32UI << 12) | panfrost_get_default_swizzle(1); - else - so->formats[PAN_VERTEX_ID] = (MALI_R32UI << 12) | panfrost_bifrost_swizzle(1); - - if (dev->quirks & HAS_SWIZZLES) - so->formats[PAN_INSTANCE_ID] = (MALI_R32UI << 12) | panfrost_get_default_swizzle(1); - else - so->formats[PAN_INSTANCE_ID] = (MALI_R32UI << 12) | panfrost_bifrost_swizzle(1); + so->formats[PAN_VERTEX_ID] = dev->formats[PIPE_FORMAT_R32_UINT].hw; + so->formats[PAN_INSTANCE_ID] = dev->formats[PIPE_FORMAT_R32_UINT].hw; return so; } diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index ac0554d8dc5..2920da4306f 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -487,19 +487,20 @@ panfrost_is_format_supported( struct pipe_screen *screen, ( PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_RENDER_TARGET | PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_SAMPLER_VIEW); - struct panfrost_format fmt = panfrost_pipe_format_table[format]; + struct panfrost_format fmt = dev->formats[format]; + enum mali_format indexed = MALI_EXTRACT_INDEX(fmt.hw); /* Also check that compressed texture formats are supported on this * particular chip. They may not be depending on system integration * differences. RGTC can be emulated so is always supported. */ bool is_rgtc = format_desc->layout == UTIL_FORMAT_LAYOUT_RGTC; - bool supported = panfrost_supports_compressed_format(dev, fmt.hw); + bool supported = panfrost_supports_compressed_format(dev, indexed); if (!is_rgtc && !supported) return false; - return fmt.hw && ((relevant_bind & ~fmt.bind) == 0); + return indexed && ((relevant_bind & ~fmt.bind) == 0); } /* We always support linear and tiled operations, both external and internal. diff --git a/src/panfrost/lib/pan_blit.c b/src/panfrost/lib/pan_blit.c index 0a15161f609..8d0a1612167 100644 --- a/src/panfrost/lib/pan_blit.c +++ b/src/panfrost/lib/pan_blit.c @@ -283,11 +283,7 @@ panfrost_load_emit_varying(struct pan_pool *pool, struct MALI_DRAW *draw, pan_pack(varying.cpu, ATTRIBUTE, cfg) { cfg.buffer_index = 0; cfg.offset_enable = !is_bifrost; - cfg.format = (MALI_RGBA32F << 12); - if (pool->dev->quirks & HAS_SWIZZLES) - cfg.format |= panfrost_get_default_swizzle(2); - else - cfg.format |= panfrost_bifrost_swizzle(2); + cfg.format = pool->dev->formats[PIPE_FORMAT_R32G32_FLOAT].hw; } draw->varyings = varying.gpu; diff --git a/src/panfrost/lib/pan_device.h b/src/panfrost/lib/pan_device.h index 664204ede97..3d16c5b3472 100644 --- a/src/panfrost/lib/pan_device.h +++ b/src/panfrost/lib/pan_device.h @@ -89,6 +89,13 @@ struct pan_blit_shaders { struct pan_blit_shader loads[PAN_BLIT_NUM_TARGETS][PAN_BLIT_NUM_TYPES][2]; }; +typedef uint32_t mali_pixel_format; + +struct panfrost_format { + mali_pixel_format hw; + unsigned bind; +}; + struct panfrost_device { /* For ralloc */ void *memctx; @@ -102,6 +109,9 @@ struct panfrost_device { unsigned thread_tls_alloc; unsigned quirks; + /* Table of formats, indexed by a PIPE format */ + const struct panfrost_format *formats; + /* Bitmask of supported compressed texture formats */ uint32_t compressed_formats; diff --git a/src/panfrost/lib/pan_format.c b/src/panfrost/lib/pan_format.c index 3df72158f12..6a85dddcf0d 100644 --- a/src/panfrost/lib/pan_format.c +++ b/src/panfrost/lib/pan_format.c @@ -87,306 +87,548 @@ panfrost_blend_format(enum pipe_format format) #define _T PIPE_BIND_SAMPLER_VIEW #define _R PIPE_BIND_RENDER_TARGET #define _Z PIPE_BIND_DEPTH_STENCIL -#define _VT (_V | _T) -#define _VTR (_V | _T | _R) -#define _TZ (_T | _Z) -struct panfrost_format panfrost_pipe_format_table[PIPE_FORMAT_COUNT] = { - [PIPE_FORMAT_ETC1_RGB8] = { MALI_ETC2_RGB8, _T }, - [PIPE_FORMAT_ETC2_RGB8] = { MALI_ETC2_RGB8, _T }, - [PIPE_FORMAT_ETC2_SRGB8] = { MALI_ETC2_RGB8, _T }, - [PIPE_FORMAT_ETC2_R11_UNORM] = { MALI_ETC2_R11_UNORM, _T }, - [PIPE_FORMAT_ETC2_RGBA8] = { MALI_ETC2_RGBA8, _T }, - [PIPE_FORMAT_ETC2_SRGBA8] = { MALI_ETC2_RGBA8, _T }, - [PIPE_FORMAT_ETC2_RG11_UNORM] = { MALI_ETC2_RG11_UNORM, _T }, - [PIPE_FORMAT_ETC2_R11_SNORM] = { MALI_ETC2_R11_SNORM, _T }, - [PIPE_FORMAT_ETC2_RG11_SNORM] = { MALI_ETC2_RG11_SNORM, _T }, - [PIPE_FORMAT_ETC2_RGB8A1] = { MALI_ETC2_RGB8A1, _T }, - [PIPE_FORMAT_ETC2_SRGB8A1] = { MALI_ETC2_RGB8A1, _T }, +#define FLAGS_V___ (_V) +#define FLAGS__T__ (_T) +#define FLAGS_VTR_ (_V | _T | _R) +#define FLAGS_VT__ (_V | _T) +#define FLAGS__T_Z (_T | _Z) - [PIPE_FORMAT_DXT1_RGB] = { MALI_BC1_UNORM, _T }, - [PIPE_FORMAT_DXT1_RGBA] = { MALI_BC1_UNORM, _T }, - [PIPE_FORMAT_DXT1_SRGB] = { MALI_BC1_UNORM, _T }, - [PIPE_FORMAT_DXT1_SRGBA] = { MALI_BC1_UNORM, _T }, - [PIPE_FORMAT_DXT3_RGBA] = { MALI_BC2_UNORM, _T }, - [PIPE_FORMAT_DXT3_SRGBA] = { MALI_BC2_UNORM, _T }, - [PIPE_FORMAT_DXT5_RGBA] = { MALI_BC3_UNORM, _T }, - [PIPE_FORMAT_DXT5_SRGBA] = { MALI_BC3_UNORM, _T }, +#define V6_000R PAN_V6_SWIZZLE(0, 0, 0, R) +#define V6_A001 PAN_V6_SWIZZLE(A, 0, 0, 1) +#define V6_ABG1 PAN_V6_SWIZZLE(A, B, G, 1) +#define V6_ABGR PAN_V6_SWIZZLE(A, B, G, R) +#define V6_BGR1 PAN_V6_SWIZZLE(B, G, R, 1) +#define V6_BGRA PAN_V6_SWIZZLE(B, G, R, A) +#define V6_GBA1 PAN_V6_SWIZZLE(G, B, A, 1) +#define V6_GBAR PAN_V6_SWIZZLE(G, B, A, R) +#define V6_R000 PAN_V6_SWIZZLE(R, 0, 0, 0) +#define V6_R001 PAN_V6_SWIZZLE(R, 0, 0, 1) +#define V6_RG01 PAN_V6_SWIZZLE(R, G, 0, 1) +#define V6_RGB1 PAN_V6_SWIZZLE(R, G, B, 1) +#define V6_RGBA PAN_V6_SWIZZLE(R, G, B, A) +#define V6_RRR1 PAN_V6_SWIZZLE(R, R, R, 1) +#define V6_RRRG PAN_V6_SWIZZLE(R, R, R, G) +#define V6_RRRR PAN_V6_SWIZZLE(R, R, R, R) - [PIPE_FORMAT_RGTC1_UNORM] = { MALI_BC4_UNORM, _T }, - [PIPE_FORMAT_RGTC1_SNORM] = { MALI_BC4_SNORM, _T }, - [PIPE_FORMAT_RGTC2_UNORM] = { MALI_BC5_UNORM, _T }, - [PIPE_FORMAT_RGTC2_SNORM] = { MALI_BC5_SNORM, _T }, +#define SRGB_L (0) +#define SRGB_S (1) - [PIPE_FORMAT_BPTC_RGB_FLOAT] = { MALI_BC6H_SF16, _T }, - [PIPE_FORMAT_BPTC_RGB_UFLOAT] = { MALI_BC6H_UF16, _T }, - [PIPE_FORMAT_BPTC_RGBA_UNORM] = { MALI_BC7_UNORM, _T }, - [PIPE_FORMAT_BPTC_SRGBA] = { MALI_BC7_UNORM, _T }, +#define PAN_V6(pipe, mali, swizzle, srgb, flags) \ + [PIPE_FORMAT_ ## pipe] = { \ + .hw = ( V6_ ## swizzle ) | \ + (( MALI_ ## mali ) << 12) | \ + ((( SRGB_ ## srgb)) << 20), \ + .bind = FLAGS_ ## flags \ + } - [PIPE_FORMAT_ASTC_4x4] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_5x4] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_5x5] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_6x5] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_6x6] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_8x5] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_8x6] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_8x8] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_10x5] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_10x6] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_10x8] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_10x10] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_12x10] = { MALI_ASTC_2D_HDR, _T }, - [PIPE_FORMAT_ASTC_12x12] = { MALI_ASTC_2D_HDR, _T }, +#define PAN_V7(pipe, mali, swizzle, srgb, flags) \ + [PIPE_FORMAT_ ## pipe] = { \ + .hw = ( MALI_RGB_COMPONENT_ORDER_ ## swizzle ) | \ + (( MALI_ ## mali ) << 12) | \ + ((( SRGB_ ## srgb)) << 20), \ + .bind = FLAGS_ ## flags \ + } - [PIPE_FORMAT_ASTC_4x4_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_5x4_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_5x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_6x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_6x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_8x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_8x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_8x8_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_10x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_10x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_10x8_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_10x10_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_12x10_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_ASTC_12x12_SRGB] = { MALI_ASTC_2D_LDR, _T }, - [PIPE_FORMAT_B5G6R5_UNORM] = { MALI_RGB565, _VTR }, - [PIPE_FORMAT_B5G5R5X1_UNORM] = { MALI_RGB5_X1_UNORM, _VT }, - [PIPE_FORMAT_R5G5B5A1_UNORM] = { MALI_RGB5_A1_UNORM, _VTR }, - - [PIPE_FORMAT_R10G10B10X2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, - [PIPE_FORMAT_B10G10R10X2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, - [PIPE_FORMAT_R10G10B10A2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, - [PIPE_FORMAT_B10G10R10A2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, - [PIPE_FORMAT_R10G10B10X2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, - [PIPE_FORMAT_R10G10B10A2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, - [PIPE_FORMAT_B10G10R10A2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, - [PIPE_FORMAT_R10G10B10A2_UINT] = { MALI_RGB10_A2UI, _VTR }, - [PIPE_FORMAT_B10G10R10A2_UINT] = { MALI_RGB10_A2UI, _VTR }, - [PIPE_FORMAT_R10G10B10A2_USCALED] = { MALI_RGB10_A2UI, _VTR }, - [PIPE_FORMAT_B10G10R10A2_USCALED] = { MALI_RGB10_A2UI, _VTR }, - [PIPE_FORMAT_R10G10B10A2_SINT] = { MALI_RGB10_A2I, _VTR}, - [PIPE_FORMAT_B10G10R10A2_SINT] = { MALI_RGB10_A2I, _VTR }, - [PIPE_FORMAT_R10G10B10A2_SSCALED] = { MALI_RGB10_A2I, _VTR }, - [PIPE_FORMAT_B10G10R10A2_SSCALED] = { MALI_RGB10_A2I, _VTR }, - - [PIPE_FORMAT_R8_SSCALED] = { MALI_R8I, _V }, - [PIPE_FORMAT_R8G8_SSCALED] = { MALI_RG8I, _V }, - [PIPE_FORMAT_R8G8B8_SSCALED] = { MALI_RGB8I, _V }, - [PIPE_FORMAT_B8G8R8_SSCALED] = { MALI_RGB8I, _V }, - [PIPE_FORMAT_R8G8B8A8_SSCALED] = { MALI_RGBA8I, _V }, - [PIPE_FORMAT_B8G8R8A8_SSCALED] = { MALI_RGBA8I, _V }, - [PIPE_FORMAT_A8B8G8R8_SSCALED] = { MALI_RGBA8I, _V }, - - [PIPE_FORMAT_R8_USCALED] = { MALI_R8UI, _V }, - [PIPE_FORMAT_R8G8_USCALED] = { MALI_RG8UI, _V }, - [PIPE_FORMAT_R8G8B8_USCALED] = { MALI_RGB8UI, _V }, - [PIPE_FORMAT_B8G8R8_USCALED] = { MALI_RGB8UI, _V }, - [PIPE_FORMAT_R8G8B8A8_USCALED] = { MALI_RGBA8UI, _V }, - [PIPE_FORMAT_B8G8R8A8_USCALED] = { MALI_RGBA8UI, _V }, - [PIPE_FORMAT_A8B8G8R8_USCALED] = { MALI_RGBA8UI, _V }, - - [PIPE_FORMAT_R16_USCALED] = { MALI_R16UI, _V }, - [PIPE_FORMAT_R16G16_USCALED] = { MALI_RG16UI, _V }, - [PIPE_FORMAT_R16G16B16_USCALED] = { MALI_RGB16UI, _V }, - [PIPE_FORMAT_R16G16B16A16_USCALED] = { MALI_RGBA16UI, _V }, - [PIPE_FORMAT_R16_SSCALED] = { MALI_R16I, _V }, - [PIPE_FORMAT_R16G16_SSCALED] = { MALI_RG16I, _V }, - [PIPE_FORMAT_R16G16B16_SSCALED] = { MALI_RGB16I, _V }, - [PIPE_FORMAT_R16G16B16A16_SSCALED] = { MALI_RGBA16I, _V }, - - [PIPE_FORMAT_R32_USCALED] = { MALI_R32UI, _V }, - [PIPE_FORMAT_R32G32_USCALED] = { MALI_RG32UI, _V }, - [PIPE_FORMAT_R32G32B32_USCALED] = { MALI_RGB32UI, _V }, - [PIPE_FORMAT_R32G32B32A32_USCALED] = { MALI_RGBA32UI, _V }, - [PIPE_FORMAT_R32_SSCALED] = { MALI_R32I, _V }, - [PIPE_FORMAT_R32G32_SSCALED] = { MALI_RG32I, _V }, - [PIPE_FORMAT_R32G32B32_SSCALED] = { MALI_RGB32I, _V }, - [PIPE_FORMAT_R32G32B32A32_SSCALED] = { MALI_RGBA32I, _V }, - - [PIPE_FORMAT_R3G3B2_UNORM] = { MALI_RGB332_UNORM, _VT }, - - [PIPE_FORMAT_Z16_UNORM] = { MALI_R16_UNORM, _TZ }, - [PIPE_FORMAT_Z24_UNORM_S8_UINT] = { MALI_Z24X8_UNORM, _TZ }, - [PIPE_FORMAT_Z24X8_UNORM] = { MALI_Z24X8_UNORM, _TZ }, - [PIPE_FORMAT_Z32_FLOAT] = { MALI_R32F, _TZ }, - [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = { MALI_R32F, _TZ }, - [PIPE_FORMAT_X32_S8X24_UINT] = { MALI_R8UI, _T }, - [PIPE_FORMAT_X24S8_UINT] = { MALI_RGBA8UI, _TZ }, - [PIPE_FORMAT_S8_UINT] = { MALI_R8UI, _T }, - - [PIPE_FORMAT_R32_FIXED] = { MALI_R32_FIXED, _V }, - [PIPE_FORMAT_R32G32_FIXED] = { MALI_RG32_FIXED, _V }, - [PIPE_FORMAT_R32G32B32_FIXED] = { MALI_RGB32_FIXED, _V }, - [PIPE_FORMAT_R32G32B32A32_FIXED] = { MALI_RGBA32_FIXED, _V }, - - [PIPE_FORMAT_R11G11B10_FLOAT] = { MALI_R11F_G11F_B10F, _VTR}, - [PIPE_FORMAT_R9G9B9E5_FLOAT] = { MALI_R9F_G9F_B9F_E5F, _VT }, - - [PIPE_FORMAT_R8_SNORM] = { MALI_R8_SNORM, _VT }, - [PIPE_FORMAT_R16_SNORM] = { MALI_R16_SNORM, _VT }, - [PIPE_FORMAT_R32_SNORM] = { MALI_R32_SNORM, _VT }, - [PIPE_FORMAT_R8G8_SNORM] = { MALI_RG8_SNORM, _VT }, - [PIPE_FORMAT_R16G16_SNORM] = { MALI_RG16_SNORM, _VT }, - [PIPE_FORMAT_R32G32_SNORM] = { MALI_RG32_SNORM, _VT }, - [PIPE_FORMAT_R8G8B8_SNORM] = { MALI_RGB8_SNORM, _VT }, - [PIPE_FORMAT_R16G16B16_SNORM] = { MALI_RGB16_SNORM, _VT }, - [PIPE_FORMAT_R32G32B32_SNORM] = { MALI_RGB32_SNORM, _VT }, - [PIPE_FORMAT_R8G8B8A8_SNORM] = { MALI_RGBA8_SNORM, _VT }, - [PIPE_FORMAT_R16G16B16A16_SNORM] = { MALI_RGBA16_SNORM, _VT }, - [PIPE_FORMAT_R32G32B32A32_SNORM] = { MALI_RGBA32_SNORM, _VT }, - - [PIPE_FORMAT_A8_SINT] = { MALI_R8I, _VTR }, - [PIPE_FORMAT_I8_SINT] = { MALI_R8I, _VTR }, - [PIPE_FORMAT_L8_SINT] = { MALI_R8I, _VTR }, - [PIPE_FORMAT_L8A8_SINT] = { MALI_RG8I, _VTR }, - [PIPE_FORMAT_A8_UINT] = { MALI_R8UI, _VTR }, - [PIPE_FORMAT_I8_UINT] = { MALI_R8UI, _VTR }, - [PIPE_FORMAT_L8_UINT] = { MALI_R8UI, _VTR }, - [PIPE_FORMAT_L8A8_UINT] = { MALI_RG8UI, _VTR }, - - [PIPE_FORMAT_A16_SINT] = { MALI_R16I, _VTR }, - [PIPE_FORMAT_I16_SINT] = { MALI_R16I, _VTR }, - [PIPE_FORMAT_L16_SINT] = { MALI_R16I, _VTR }, - [PIPE_FORMAT_L16A16_SINT] = { MALI_RG16I, _VTR }, - [PIPE_FORMAT_A16_UINT] = { MALI_R16UI, _VTR }, - [PIPE_FORMAT_I16_UINT] = { MALI_R16UI, _VTR }, - [PIPE_FORMAT_L16_UINT] = { MALI_R16UI, _VTR }, - [PIPE_FORMAT_L16A16_UINT] = { MALI_RG16UI, _VTR }, - - [PIPE_FORMAT_A32_SINT] = { MALI_R32I, _VTR }, - [PIPE_FORMAT_I32_SINT] = { MALI_R32I, _VTR }, - [PIPE_FORMAT_L32_SINT] = { MALI_R32I, _VTR }, - [PIPE_FORMAT_L32A32_SINT] = { MALI_RG32I, _VTR }, - [PIPE_FORMAT_A32_UINT] = { MALI_R32UI, _VTR }, - [PIPE_FORMAT_I32_UINT] = { MALI_R32UI, _VTR }, - [PIPE_FORMAT_L32_UINT] = { MALI_R32UI, _VTR }, - [PIPE_FORMAT_L32A32_UINT] = { MALI_RG32UI, _VTR }, - - [PIPE_FORMAT_B8G8R8_UINT] = { MALI_RGB8UI, _VTR }, - [PIPE_FORMAT_B8G8R8A8_UINT] = { MALI_RGBA8UI, _VTR }, - [PIPE_FORMAT_B8G8R8_SINT] = { MALI_RGB8I, _VTR }, - [PIPE_FORMAT_B8G8R8A8_SINT] = { MALI_RGBA8I, _VTR }, - [PIPE_FORMAT_A8R8G8B8_UINT] = { MALI_RGBA8UI, _VTR }, - [PIPE_FORMAT_A8B8G8R8_UINT] = { MALI_RGBA8UI, _VTR }, - - [PIPE_FORMAT_R8_UINT] = { MALI_R8UI, _VTR }, - [PIPE_FORMAT_R16_UINT] = { MALI_R16UI, _VTR }, - [PIPE_FORMAT_R32_UINT] = { MALI_R32UI, _VTR }, - [PIPE_FORMAT_R8G8_UINT] = { MALI_RG8UI, _VTR }, - [PIPE_FORMAT_R16G16_UINT] = { MALI_RG16UI, _VTR }, - [PIPE_FORMAT_R32G32_UINT] = { MALI_RG32UI, _VTR }, - [PIPE_FORMAT_R8G8B8_UINT] = { MALI_RGB8UI, _VTR }, - [PIPE_FORMAT_R16G16B16_UINT] = { MALI_RGB16UI, _VTR }, - [PIPE_FORMAT_R32G32B32_UINT] = { MALI_RGB32UI, _VTR }, - [PIPE_FORMAT_R8G8B8A8_UINT] = { MALI_RGBA8UI, _VTR }, - [PIPE_FORMAT_R16G16B16A16_UINT] = { MALI_RGBA16UI, _VTR }, - [PIPE_FORMAT_R32G32B32A32_UINT] = { MALI_RGBA32UI, _VTR }, - - [PIPE_FORMAT_R32_FLOAT] = { MALI_R32F, _VTR }, - [PIPE_FORMAT_R32G32_FLOAT] = { MALI_RG32F, _VTR }, - [PIPE_FORMAT_R32G32B32_FLOAT] = { MALI_RGB32F, _VTR }, - [PIPE_FORMAT_R32G32B32A32_FLOAT] = { MALI_RGBA32F, _VTR }, - - [PIPE_FORMAT_R8_UNORM] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_R16_UNORM] = { MALI_R16_UNORM, _VTR }, - [PIPE_FORMAT_R32_UNORM] = { MALI_R32_UNORM, _VTR }, - [PIPE_FORMAT_R8G8_UNORM] = { MALI_RG8_UNORM, _VTR }, - [PIPE_FORMAT_R16G16_UNORM] = { MALI_RG16_UNORM, _VTR }, - [PIPE_FORMAT_R32G32_UNORM] = { MALI_RG32_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8_UNORM] = { MALI_RGB8_UNORM, _VTR }, - [PIPE_FORMAT_R16G16B16_UNORM] = { MALI_RGB16_UNORM, _VTR }, - [PIPE_FORMAT_R32G32B32_UNORM] = { MALI_RGB32_UNORM, _VTR }, - [PIPE_FORMAT_R4G4B4A4_UNORM] = { MALI_RGBA4_UNORM, _VTR }, - [PIPE_FORMAT_R16G16B16A16_UNORM] = { MALI_RGBA16_UNORM, _VTR }, - [PIPE_FORMAT_R32G32B32A32_UNORM] = { MALI_RGBA32_UNORM, _VTR }, - - [PIPE_FORMAT_B8G8R8A8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_B8G8R8X8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_A8R8G8B8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_X8R8G8B8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_A8B8G8R8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_X8B8G8R8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8X8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8A8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, - - [PIPE_FORMAT_R8G8B8X8_SNORM] = { MALI_RGBA8_SNORM, _VT }, - [PIPE_FORMAT_R8G8B8X8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8X8_UINT] = { MALI_RGBA8UI, _VTR }, - [PIPE_FORMAT_R8G8B8X8_SINT] = { MALI_RGBA8I, _VTR }, - - [PIPE_FORMAT_L8_UNORM] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_A8_UNORM] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_I8_UNORM] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_L8A8_UNORM] = { MALI_RG8_UNORM, _VTR }, - [PIPE_FORMAT_L16_UNORM] = { MALI_R16_UNORM, _VTR }, - [PIPE_FORMAT_A16_UNORM] = { MALI_R16_UNORM, _VTR }, - [PIPE_FORMAT_I16_UNORM] = { MALI_R16_UNORM, _VTR }, - [PIPE_FORMAT_L16A16_UNORM] = { MALI_RG16_UNORM, _VTR }, - - [PIPE_FORMAT_L8_SNORM] = { MALI_R8_SNORM, _VT }, - [PIPE_FORMAT_A8_SNORM] = { MALI_R8_SNORM, _VT }, - [PIPE_FORMAT_I8_SNORM] = { MALI_R8_SNORM, _VT }, - [PIPE_FORMAT_L8A8_SNORM] = { MALI_RG8_SNORM, _VT }, - [PIPE_FORMAT_L16_SNORM] = { MALI_R16_SNORM, _VT }, - [PIPE_FORMAT_A16_SNORM] = { MALI_R16_SNORM, _VT }, - [PIPE_FORMAT_I16_SNORM] = { MALI_R16_SNORM, _VT }, - [PIPE_FORMAT_L16A16_SNORM] = { MALI_RG16_SNORM, _VT }, - - [PIPE_FORMAT_L16_FLOAT] = { MALI_R16F, _VTR }, - [PIPE_FORMAT_A16_FLOAT] = { MALI_R16F, _VTR }, - [PIPE_FORMAT_I16_FLOAT] = { MALI_RG16F, _VTR }, - [PIPE_FORMAT_L16A16_FLOAT] = { MALI_RG16F, _VTR }, - - [PIPE_FORMAT_L8_SRGB] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_R8_SRGB] = { MALI_R8_UNORM, _VTR }, - [PIPE_FORMAT_L8A8_SRGB] = { MALI_RG8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8_SRGB] = { MALI_RG8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8_SRGB] = { MALI_RGB8_UNORM, _VTR }, - [PIPE_FORMAT_B8G8R8_SRGB] = { MALI_RGB8_UNORM, _VTR }, - [PIPE_FORMAT_R8G8B8A8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_A8B8G8R8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_X8B8G8R8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_B8G8R8A8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_B8G8R8X8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_A8R8G8B8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - [PIPE_FORMAT_X8R8G8B8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, - - [PIPE_FORMAT_R8_SINT] = { MALI_R8I, _VTR }, - [PIPE_FORMAT_R16_SINT] = { MALI_R16I, _VTR }, - [PIPE_FORMAT_R32_SINT] = { MALI_R32I, _VTR }, - [PIPE_FORMAT_R16_FLOAT] = { MALI_R16F, _VTR }, - [PIPE_FORMAT_R8G8_SINT] = { MALI_RG8I, _VTR }, - [PIPE_FORMAT_R16G16_SINT] = { MALI_RG16I, _VTR }, - [PIPE_FORMAT_R32G32_SINT] = { MALI_RG32I, _VTR }, - [PIPE_FORMAT_R16G16_FLOAT] = { MALI_RG16F, _VTR }, - [PIPE_FORMAT_R8G8B8_SINT] = { MALI_RGB8I, _VTR }, - [PIPE_FORMAT_R16G16B16_SINT] = { MALI_RGB16I, _VTR }, - [PIPE_FORMAT_R32G32B32_SINT] = { MALI_RGB32I, _VTR }, - [PIPE_FORMAT_R16G16B16_FLOAT] = { MALI_RGB16F, _VTR }, - [PIPE_FORMAT_R8G8B8A8_SINT] = { MALI_RGBA8I, _VTR }, - [PIPE_FORMAT_R16G16B16A16_SINT] = { MALI_RGBA16I, _VTR }, - [PIPE_FORMAT_R32G32B32A32_SINT] = { MALI_RGBA32I, _VTR }, - [PIPE_FORMAT_R16G16B16A16_FLOAT] = { MALI_RGBA16F, _VTR }, - - [PIPE_FORMAT_R16G16B16X16_UNORM] = { MALI_RGBA16_UNORM, _VTR }, - [PIPE_FORMAT_R16G16B16X16_SNORM] = { MALI_RGBA16_SNORM, _VT }, - [PIPE_FORMAT_R16G16B16X16_FLOAT] = { MALI_RGBA16F, _VTR }, - [PIPE_FORMAT_R16G16B16X16_UINT] = { MALI_RGBA16UI, _VTR }, - [PIPE_FORMAT_R16G16B16X16_SINT] = { MALI_RGBA16I, _VTR }, - - [PIPE_FORMAT_R32G32B32X32_FLOAT] = { MALI_RGBA32F, _VTR }, - [PIPE_FORMAT_R32G32B32X32_UINT] = { MALI_RGBA32UI, _VTR }, - [PIPE_FORMAT_R32G32B32X32_SINT] = { MALI_RGBA32I, _VTR }, +const struct panfrost_format panfrost_pipe_format_v6[PIPE_FORMAT_COUNT] = { + PAN_V6(ETC1_RGB8, ETC2_RGB8, RGB1, L, _T__), + PAN_V6(ETC2_RGB8, ETC2_RGB8, RGB1, L, _T__), + PAN_V6(ETC2_SRGB8, ETC2_RGB8, RGB1, S, _T__), + PAN_V6(ETC2_R11_UNORM, ETC2_R11_UNORM, R001, L, _T__), + PAN_V6(ETC2_RGBA8, ETC2_RGBA8, RGBA, L, _T__), + PAN_V6(ETC2_SRGBA8, ETC2_RGBA8, RGBA, S, _T__), + PAN_V6(ETC2_RG11_UNORM, ETC2_RG11_UNORM, RG01, L, _T__), + PAN_V6(ETC2_R11_SNORM, ETC2_R11_SNORM, R001, L, _T__), + PAN_V6(ETC2_RG11_SNORM, ETC2_RG11_SNORM, RG01, L, _T__), + PAN_V6(ETC2_RGB8A1, ETC2_RGB8A1, RGBA, L, _T__), + PAN_V6(ETC2_SRGB8A1, ETC2_RGB8A1, RGBA, S, _T__), + PAN_V6(DXT1_RGB, BC1_UNORM, RGB1, L, _T__), + PAN_V6(DXT1_RGBA, BC1_UNORM, RGBA, L, _T__), + PAN_V6(DXT1_SRGB, BC1_UNORM, RGB1, S, _T__), + PAN_V6(DXT1_SRGBA, BC1_UNORM, RGBA, S, _T__), + PAN_V6(DXT3_RGBA, BC2_UNORM, RGBA, L, _T__), + PAN_V6(DXT3_SRGBA, BC2_UNORM, RGBA, S, _T__), + PAN_V6(DXT5_RGBA, BC3_UNORM, RGBA, L, _T__), + PAN_V6(DXT5_SRGBA, BC3_UNORM, RGBA, S, _T__), + PAN_V6(RGTC1_UNORM, BC4_UNORM, R001, L, _T__), + PAN_V6(RGTC1_SNORM, BC4_SNORM, R001, L, _T__), + PAN_V6(RGTC2_UNORM, BC5_UNORM, RG01, L, _T__), + PAN_V6(RGTC2_SNORM, BC5_SNORM, RG01, L, _T__), + PAN_V6(BPTC_RGB_FLOAT, BC6H_SF16, RGB1, L, _T__), + PAN_V6(BPTC_RGB_UFLOAT, BC6H_UF16, RGB1, L, _T__), + PAN_V6(BPTC_RGBA_UNORM, BC7_UNORM, RGBA, L, _T__), + PAN_V6(BPTC_SRGBA, BC7_UNORM, RGBA, S, _T__), + PAN_V6(ASTC_4x4, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_5x4, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_5x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_6x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_6x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_8x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_8x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_8x8, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_10x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_10x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_10x8, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_10x10, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_12x10, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_12x12, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V6(ASTC_4x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_5x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_5x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_6x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_6x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_8x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_8x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_8x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_10x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_10x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_10x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_10x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_12x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(ASTC_12x12_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V6(B5G6R5_UNORM, RGB565, BGR1, L, VTR_), + PAN_V6(B5G5R5X1_UNORM, RGB5_X1_UNORM, BGR1, L, VT__), + PAN_V6(R5G5B5A1_UNORM, RGB5_A1_UNORM, RGBA, L, VTR_), + PAN_V6(R10G10B10X2_UNORM, RGB10_A2_UNORM, RGB1, L, VTR_), + PAN_V6(B10G10R10X2_UNORM, RGB10_A2_UNORM, BGR1, L, VTR_), + PAN_V6(R10G10B10A2_UNORM, RGB10_A2_UNORM, RGBA, L, VTR_), + PAN_V6(B10G10R10A2_UNORM, RGB10_A2_UNORM, BGRA, L, VTR_), + PAN_V6(R10G10B10X2_SNORM, RGB10_A2_SNORM, RGB1, L, VT__), + PAN_V6(R10G10B10A2_SNORM, RGB10_A2_SNORM, RGBA, L, VT__), + PAN_V6(B10G10R10A2_SNORM, RGB10_A2_SNORM, BGRA, L, VT__), + PAN_V6(R10G10B10A2_UINT, RGB10_A2UI, RGBA, L, VTR_), + PAN_V6(B10G10R10A2_UINT, RGB10_A2UI, BGRA, L, VTR_), + PAN_V6(R10G10B10A2_USCALED, RGB10_A2UI, RGBA, L, VTR_), + PAN_V6(B10G10R10A2_USCALED, RGB10_A2UI, BGRA, L, VTR_), + PAN_V6(R10G10B10A2_SINT, RGB10_A2I, RGBA, L, VTR_), + PAN_V6(B10G10R10A2_SINT, RGB10_A2I, BGRA, L, VTR_), + PAN_V6(R10G10B10A2_SSCALED, RGB10_A2I, RGBA, L, VTR_), + PAN_V6(B10G10R10A2_SSCALED, RGB10_A2I, BGRA, L, VTR_), + PAN_V6(R8_SSCALED, R8I, R001, L, V___), + PAN_V6(R8G8_SSCALED, RG8I, RG01, L, V___), + PAN_V6(R8G8B8_SSCALED, RGB8I, RGB1, L, V___), + PAN_V6(B8G8R8_SSCALED, RGB8I, BGR1, L, V___), + PAN_V6(R8G8B8A8_SSCALED, RGBA8I, RGBA, L, V___), + PAN_V6(B8G8R8A8_SSCALED, RGBA8I, BGRA, L, V___), + PAN_V6(A8B8G8R8_SSCALED, RGBA8I, ABGR, L, V___), + PAN_V6(R8_USCALED, R8UI, R001, L, V___), + PAN_V6(R8G8_USCALED, RG8UI, RG01, L, V___), + PAN_V6(R8G8B8_USCALED, RGB8UI, RGB1, L, V___), + PAN_V6(B8G8R8_USCALED, RGB8UI, BGR1, L, V___), + PAN_V6(R8G8B8A8_USCALED, RGBA8UI, RGBA, L, V___), + PAN_V6(B8G8R8A8_USCALED, RGBA8UI, BGRA, L, V___), + PAN_V6(A8B8G8R8_USCALED, RGBA8UI, ABGR, L, V___), + PAN_V6(R16_USCALED, R16UI, R001, L, V___), + PAN_V6(R16G16_USCALED, RG16UI, RG01, L, V___), + PAN_V6(R16G16B16_USCALED, RGB16UI, RGB1, L, V___), + PAN_V6(R16G16B16A16_USCALED, RGBA16UI, RGBA, L, V___), + PAN_V6(R16_SSCALED, R16I, R001, L, V___), + PAN_V6(R16G16_SSCALED, RG16I, RG01, L, V___), + PAN_V6(R16G16B16_SSCALED, RGB16I, RGB1, L, V___), + PAN_V6(R16G16B16A16_SSCALED, RGBA16I, RGBA, L, V___), + PAN_V6(R32_USCALED, R32UI, R001, L, V___), + PAN_V6(R32G32_USCALED, RG32UI, RG01, L, V___), + PAN_V6(R32G32B32_USCALED, RGB32UI, RGB1, L, V___), + PAN_V6(R32G32B32A32_USCALED, RGBA32UI, RGBA, L, V___), + PAN_V6(R32_SSCALED, R32I, R001, L, V___), + PAN_V6(R32G32_SSCALED, RG32I, RG01, L, V___), + PAN_V6(R32G32B32_SSCALED, RGB32I, RGB1, L, V___), + PAN_V6(R32G32B32A32_SSCALED, RGBA32I, RGBA, L, V___), + PAN_V6(R3G3B2_UNORM, RGB332_UNORM, RGB1, L, VT__), + PAN_V6(Z16_UNORM, R16_UNORM, R000, L, _T_Z), + PAN_V6(Z24_UNORM_S8_UINT, Z24X8_UNORM, R000, L, _T_Z), + PAN_V6(Z24X8_UNORM, Z24X8_UNORM, R000, L, _T_Z), + PAN_V6(Z32_FLOAT, R32F, R000, L, _T_Z), + PAN_V6(Z32_FLOAT_S8X24_UINT, R32F, R000, L, _T_Z), + PAN_V6(X32_S8X24_UINT, R32UI, R001, L, _T__), + PAN_V6(X24S8_UINT, RGBA8UI, A001, L, _T_Z), + PAN_V6(S8_UINT, R8UI, R001, L, _T__), + PAN_V6(R32_FIXED, R32_FIXED, R001, L, V___), + PAN_V6(R32G32_FIXED, RG32_FIXED, RG01, L, V___), + PAN_V6(R32G32B32_FIXED, RGB32_FIXED, RGB1, L, V___), + PAN_V6(R32G32B32A32_FIXED, RGBA32_FIXED, RGBA, L, V___), + PAN_V6(R11G11B10_FLOAT, R11F_G11F_B10F, RGB1, L, VTR_), + PAN_V6(R9G9B9E5_FLOAT, R9F_G9F_B9F_E5F, RGB1, L, VT__), + PAN_V6(R8_SNORM, R8_SNORM, R001, L, VT__), + PAN_V6(R16_SNORM, R16_SNORM, R001, L, VT__), + PAN_V6(R32_SNORM, R32_SNORM, R001, L, VT__), + PAN_V6(R8G8_SNORM, RG8_SNORM, RG01, L, VT__), + PAN_V6(R16G16_SNORM, RG16_SNORM, RG01, L, VT__), + PAN_V6(R32G32_SNORM, RG32_SNORM, RG01, L, VT__), + PAN_V6(R8G8B8_SNORM, RGB8_SNORM, RGB1, L, VT__), + PAN_V6(R16G16B16_SNORM, RGB16_SNORM, RGB1, L, VT__), + PAN_V6(R32G32B32_SNORM, RGB32_SNORM, RGB1, L, VT__), + PAN_V6(R8G8B8A8_SNORM, RGBA8_SNORM, RGBA, L, VT__), + PAN_V6(R16G16B16A16_SNORM, RGBA16_SNORM, RGBA, L, VT__), + PAN_V6(R32G32B32A32_SNORM, RGBA32_SNORM, RGBA, L, VT__), + PAN_V6(A8_SINT, R8I, 000R, L, VTR_), + PAN_V6(I8_SINT, R8I, RRRR, L, VTR_), + PAN_V6(L8_SINT, R8I, RRR1, L, VTR_), + PAN_V6(A8_UINT, R8UI, 000R, L, VTR_), + PAN_V6(I8_UINT, R8UI, RRRR, L, VTR_), + PAN_V6(L8_UINT, R8UI, RRR1, L, VTR_), + PAN_V6(A16_SINT, R16I, 000R, L, VTR_), + PAN_V6(I16_SINT, R16I, RRRR, L, VTR_), + PAN_V6(L16_SINT, R16I, RRR1, L, VTR_), + PAN_V6(A16_UINT, R16UI, 000R, L, VTR_), + PAN_V6(I16_UINT, R16UI, RRRR, L, VTR_), + PAN_V6(L16_UINT, R16UI, RRR1, L, VTR_), + PAN_V6(A32_SINT, R32I, 000R, L, VTR_), + PAN_V6(I32_SINT, R32I, RRRR, L, VTR_), + PAN_V6(L32_SINT, R32I, RRR1, L, VTR_), + PAN_V6(A32_UINT, R32UI, 000R, L, VTR_), + PAN_V6(I32_UINT, R32UI, RRRR, L, VTR_), + PAN_V6(L32_UINT, R32UI, RRR1, L, VTR_), + PAN_V6(B8G8R8_UINT, RGB8UI, BGR1, L, VTR_), + PAN_V6(B8G8R8A8_UINT, RGBA8UI, BGRA, L, VTR_), + PAN_V6(B8G8R8_SINT, RGB8I, BGR1, L, VTR_), + PAN_V6(B8G8R8A8_SINT, RGBA8I, BGRA, L, VTR_), + PAN_V6(A8R8G8B8_UINT, RGBA8UI, GBAR, L, VTR_), + PAN_V6(A8B8G8R8_UINT, RGBA8UI, ABGR, L, VTR_), + PAN_V6(R8_UINT, R8UI, R001, L, VTR_), + PAN_V6(R16_UINT, R16UI, R001, L, VTR_), + PAN_V6(R32_UINT, R32UI, R001, L, VTR_), + PAN_V6(R8G8_UINT, RG8UI, RG01, L, VTR_), + PAN_V6(R16G16_UINT, RG16UI, RG01, L, VTR_), + PAN_V6(R32G32_UINT, RG32UI, RG01, L, VTR_), + PAN_V6(R8G8B8_UINT, RGB8UI, RGB1, L, VTR_), + PAN_V6(R16G16B16_UINT, RGB16UI, RGB1, L, VTR_), + PAN_V6(R32G32B32_UINT, RGB32UI, RGB1, L, VTR_), + PAN_V6(R8G8B8A8_UINT, RGBA8UI, RGBA, L, VTR_), + PAN_V6(R16G16B16A16_UINT, RGBA16UI, RGBA, L, VTR_), + PAN_V6(R32G32B32A32_UINT, RGBA32UI, RGBA, L, VTR_), + PAN_V6(R32_FLOAT, R32F, R001, L, VTR_), + PAN_V6(R32G32_FLOAT, RG32F, RG01, L, VTR_), + PAN_V6(R32G32B32_FLOAT, RGB32F, RGB1, L, VTR_), + PAN_V6(R32G32B32A32_FLOAT, RGBA32F, RGBA, L, VTR_), + PAN_V6(R8_UNORM, R8_UNORM, R001, L, VTR_), + PAN_V6(R16_UNORM, R16_UNORM, R001, L, VTR_), + PAN_V6(R32_UNORM, R32_UNORM, R001, L, VTR_), + PAN_V6(R8G8_UNORM, RG8_UNORM, RG01, L, VTR_), + PAN_V6(R16G16_UNORM, RG16_UNORM, RG01, L, VTR_), + PAN_V6(R32G32_UNORM, RG32_UNORM, RG01, L, VTR_), + PAN_V6(R8G8B8_UNORM, RGB8_UNORM, RGB1, L, VTR_), + PAN_V6(R16G16B16_UNORM, RGB16_UNORM, RGB1, L, VTR_), + PAN_V6(R32G32B32_UNORM, RGB32_UNORM, RGB1, L, VTR_), + PAN_V6(R4G4B4A4_UNORM, RGBA4_UNORM, RGBA, L, VTR_), + PAN_V6(R16G16B16A16_UNORM, RGBA16_UNORM, RGBA, L, VTR_), + PAN_V6(R32G32B32A32_UNORM, RGBA32_UNORM, RGBA, L, VTR_), + PAN_V6(B8G8R8A8_UNORM, RGBA8_UNORM, BGRA, L, VTR_), + PAN_V6(B8G8R8X8_UNORM, RGBA8_UNORM, BGR1, L, VTR_), + PAN_V6(A8R8G8B8_UNORM, RGBA8_UNORM, GBAR, L, VTR_), + PAN_V6(X8R8G8B8_UNORM, RGBA8_UNORM, GBA1, L, VTR_), + PAN_V6(A8B8G8R8_UNORM, RGBA8_UNORM, ABGR, L, VTR_), + PAN_V6(X8B8G8R8_UNORM, RGBA8_UNORM, ABG1, L, VTR_), + PAN_V6(R8G8B8X8_UNORM, RGBA8_UNORM, RGB1, L, VTR_), + PAN_V6(R8G8B8A8_UNORM, RGBA8_UNORM, RGBA, L, VTR_), + PAN_V6(R8G8B8X8_SNORM, RGBA8_SNORM, RGB1, L, VT__), + PAN_V6(R8G8B8X8_SRGB, RGBA8_UNORM, RGB1, S, VTR_), + PAN_V6(R8G8B8X8_UINT, RGBA8UI, RGB1, L, VTR_), + PAN_V6(R8G8B8X8_SINT, RGBA8I, RGB1, L, VTR_), + PAN_V6(L8_UNORM, R8_UNORM, RRR1, L, VTR_), + PAN_V6(A8_UNORM, R8_UNORM, 000R, L, VTR_), + PAN_V6(I8_UNORM, R8_UNORM, RRRR, L, VTR_), + PAN_V6(L8A8_UNORM, RG8_UNORM, RRRG, L, VTR_), + PAN_V6(L16_UNORM, R16_UNORM, RRR1, L, VTR_), + PAN_V6(A16_UNORM, R16_UNORM, 000R, L, VTR_), + PAN_V6(I16_UNORM, R16_UNORM, RRRR, L, VTR_), + PAN_V6(L8_SNORM, R8_SNORM, RRR1, L, VT__), + PAN_V6(A8_SNORM, R8_SNORM, 000R, L, VT__), + PAN_V6(I8_SNORM, R8_SNORM, RRRR, L, VT__), + PAN_V6(L16_SNORM, R16_SNORM, RRR1, L, VT__), + PAN_V6(A16_SNORM, R16_SNORM, 000R, L, VT__), + PAN_V6(I16_SNORM, R16_SNORM, RRRR, L, VT__), + PAN_V6(L16_FLOAT, R16F, RRR1, L, VTR_), + PAN_V6(A16_FLOAT, R16F, 000R, L, VTR_), + PAN_V6(I16_FLOAT, RG16F, RRRR, L, VTR_), + PAN_V6(L8_SRGB, R8_UNORM, RRR1, S, VTR_), + PAN_V6(R8_SRGB, R8_UNORM, R001, S, VTR_), + PAN_V6(L8A8_SRGB, RG8_UNORM, RRRG, S, VTR_), + PAN_V6(R8G8_SRGB, RG8_UNORM, RG01, S, VTR_), + PAN_V6(R8G8B8_SRGB, RGB8_UNORM, RGB1, S, VTR_), + PAN_V6(B8G8R8_SRGB, RGB8_UNORM, BGR1, S, VTR_), + PAN_V6(R8G8B8A8_SRGB, RGBA8_UNORM, RGBA, S, VTR_), + PAN_V6(A8B8G8R8_SRGB, RGBA8_UNORM, ABGR, S, VTR_), + PAN_V6(X8B8G8R8_SRGB, RGBA8_UNORM, ABG1, S, VTR_), + PAN_V6(B8G8R8A8_SRGB, RGBA8_UNORM, BGRA, S, VTR_), + PAN_V6(B8G8R8X8_SRGB, RGBA8_UNORM, BGR1, S, VTR_), + PAN_V6(A8R8G8B8_SRGB, RGBA8_UNORM, GBAR, S, VTR_), + PAN_V6(X8R8G8B8_SRGB, RGBA8_UNORM, GBA1, S, VTR_), + PAN_V6(R8_SINT, R8I, R001, L, VTR_), + PAN_V6(R16_SINT, R16I, R001, L, VTR_), + PAN_V6(R32_SINT, R32I, R001, L, VTR_), + PAN_V6(R16_FLOAT, R16F, R001, L, VTR_), + PAN_V6(R8G8_SINT, RG8I, RG01, L, VTR_), + PAN_V6(R16G16_SINT, RG16I, RG01, L, VTR_), + PAN_V6(R32G32_SINT, RG32I, RG01, L, VTR_), + PAN_V6(R16G16_FLOAT, RG16F, RG01, L, VTR_), + PAN_V6(R8G8B8_SINT, RGB8I, RGB1, L, VTR_), + PAN_V6(R16G16B16_SINT, RGB16I, RGB1, L, VTR_), + PAN_V6(R32G32B32_SINT, RGB32I, RGB1, L, VTR_), + PAN_V6(R16G16B16_FLOAT, RGB16F, RGB1, L, VTR_), + PAN_V6(R8G8B8A8_SINT, RGBA8I, RGBA, L, VTR_), + PAN_V6(R16G16B16A16_SINT, RGBA16I, RGBA, L, VTR_), + PAN_V6(R32G32B32A32_SINT, RGBA32I, RGBA, L, VTR_), + PAN_V6(R16G16B16A16_FLOAT, RGBA16F, RGBA, L, VTR_), + PAN_V6(R16G16B16X16_UNORM, RGBA16_UNORM, RGB1, L, VTR_), + PAN_V6(R16G16B16X16_SNORM, RGBA16_SNORM, RGB1, L, VT__), + PAN_V6(R16G16B16X16_FLOAT, RGBA16F, RGB1, L, VTR_), + PAN_V6(R16G16B16X16_UINT, RGBA16UI, RGB1, L, VTR_), + PAN_V6(R16G16B16X16_SINT, RGBA16I, RGB1, L, VTR_), + PAN_V6(R32G32B32X32_FLOAT, RGBA32F, RGB1, L, VTR_), + PAN_V6(R32G32B32X32_UINT, RGBA32UI, RGB1, L, VTR_), + PAN_V6(R32G32B32X32_SINT, RGBA32I, RGB1, L, VTR_), }; -#undef _VTR -#undef _VT -#undef _V -#undef _T -#undef _R +const struct panfrost_format panfrost_pipe_format_v7[PIPE_FORMAT_COUNT] = { + PAN_V7(ETC1_RGB8, ETC2_RGB8, RGB1, L, _T__), + PAN_V7(ETC2_RGB8, ETC2_RGB8, RGB1, L, _T__), + PAN_V7(ETC2_SRGB8, ETC2_RGB8, RGB1, S, _T__), + PAN_V7(ETC2_R11_UNORM, ETC2_R11_UNORM, RGB1, L, _T__), + PAN_V7(ETC2_RGBA8, ETC2_RGBA8, RGBA, L, _T__), + PAN_V7(ETC2_SRGBA8, ETC2_RGBA8, RGBA, S, _T__), + PAN_V7(ETC2_RG11_UNORM, ETC2_RG11_UNORM, RGB1, L, _T__), + PAN_V7(ETC2_R11_SNORM, ETC2_R11_SNORM, RGB1, L, _T__), + PAN_V7(ETC2_RG11_SNORM, ETC2_RG11_SNORM, RGB1, L, _T__), + PAN_V7(ETC2_RGB8A1, ETC2_RGB8A1, RGBA, L, _T__), + PAN_V7(ETC2_SRGB8A1, ETC2_RGB8A1, RGBA, S, _T__), + PAN_V7(DXT1_RGB, BC1_UNORM, RGB1, L, _T__), + PAN_V7(DXT1_RGBA, BC1_UNORM, RGBA, L, _T__), + PAN_V7(DXT1_SRGB, BC1_UNORM, RGB1, S, _T__), + PAN_V7(DXT1_SRGBA, BC1_UNORM, RGBA, S, _T__), + PAN_V7(DXT3_RGBA, BC2_UNORM, RGBA, L, _T__), + PAN_V7(DXT3_SRGBA, BC2_UNORM, RGBA, S, _T__), + PAN_V7(DXT5_RGBA, BC3_UNORM, RGBA, L, _T__), + PAN_V7(DXT5_SRGBA, BC3_UNORM, RGBA, S, _T__), + PAN_V7(RGTC1_UNORM, BC4_UNORM, RGB1, L, _T__), + PAN_V7(RGTC1_SNORM, BC4_SNORM, RGB1, L, _T__), + PAN_V7(RGTC2_UNORM, BC5_UNORM, RGB1, L, _T__), + PAN_V7(RGTC2_SNORM, BC5_SNORM, RGB1, L, _T__), + PAN_V7(BPTC_RGB_FLOAT, BC6H_SF16, RGB1, L, _T__), + PAN_V7(BPTC_RGB_UFLOAT, BC6H_UF16, RGB1, L, _T__), + PAN_V7(BPTC_RGBA_UNORM, BC7_UNORM, RGBA, L, _T__), + PAN_V7(BPTC_SRGBA, BC7_UNORM, RGBA, S, _T__), + PAN_V7(ASTC_4x4, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_5x4, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_5x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_6x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_6x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_8x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_8x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_8x8, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_10x5, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_10x6, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_10x8, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_10x10, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_12x10, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_12x12, ASTC_2D_HDR, RGBA, L, _T__), + PAN_V7(ASTC_4x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_5x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_5x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_6x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_6x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_8x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_8x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_8x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_10x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_10x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_10x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_10x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_12x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(ASTC_12x12_SRGB, ASTC_2D_LDR, RGBA, S, _T__), + PAN_V7(B5G6R5_UNORM, RGB565, BGR1, L, VTR_), + PAN_V7(B5G5R5X1_UNORM, RGB5_X1_UNORM, BGR1, L, VT__), + PAN_V7(R5G5B5A1_UNORM, RGB5_A1_UNORM, RGBA, L, VTR_), + PAN_V7(R10G10B10X2_UNORM, RGB10_A2_UNORM, RGB1, L, VTR_), + PAN_V7(B10G10R10X2_UNORM, RGB10_A2_UNORM, BGR1, L, VTR_), + PAN_V7(R10G10B10A2_UNORM, RGB10_A2_UNORM, RGBA, L, VTR_), + PAN_V7(B10G10R10A2_UNORM, RGB10_A2_UNORM, BGRA, L, VTR_), + PAN_V7(R10G10B10X2_SNORM, RGB10_A2_SNORM, RGB1, L, VT__), + PAN_V7(R10G10B10A2_SNORM, RGB10_A2_SNORM, RGBA, L, VT__), + PAN_V7(B10G10R10A2_SNORM, RGB10_A2_SNORM, BGRA, L, VT__), + PAN_V7(R10G10B10A2_UINT, RGB10_A2UI, RGBA, L, VTR_), + PAN_V7(B10G10R10A2_UINT, RGB10_A2UI, BGRA, L, VTR_), + PAN_V7(R10G10B10A2_USCALED, RGB10_A2UI, RGBA, L, VTR_), + PAN_V7(B10G10R10A2_USCALED, RGB10_A2UI, BGRA, L, VTR_), + PAN_V7(R10G10B10A2_SINT, RGB10_A2I, RGBA, L, VTR_), + PAN_V7(B10G10R10A2_SINT, RGB10_A2I, BGRA, L, VTR_), + PAN_V7(R10G10B10A2_SSCALED, RGB10_A2I, RGBA, L, VTR_), + PAN_V7(B10G10R10A2_SSCALED, RGB10_A2I, BGRA, L, VTR_), + PAN_V7(R8_SSCALED, R8I, RGB1, L, V___), + PAN_V7(R8G8_SSCALED, RG8I, RGB1, L, V___), + PAN_V7(R8G8B8_SSCALED, RGB8I, RGB1, L, V___), + PAN_V7(B8G8R8_SSCALED, RGB8I, BGR1, L, V___), + PAN_V7(R8G8B8A8_SSCALED, RGBA8I, RGBA, L, V___), + PAN_V7(B8G8R8A8_SSCALED, RGBA8I, BGRA, L, V___), + PAN_V7(A8B8G8R8_SSCALED, RGBA8I, ABGR, L, V___), + PAN_V7(R8_USCALED, R8UI, RGB1, L, V___), + PAN_V7(R8G8_USCALED, RG8UI, RGB1, L, V___), + PAN_V7(R8G8B8_USCALED, RGB8UI, RGB1, L, V___), + PAN_V7(B8G8R8_USCALED, RGB8UI, BGR1, L, V___), + PAN_V7(R8G8B8A8_USCALED, RGBA8UI, RGBA, L, V___), + PAN_V7(B8G8R8A8_USCALED, RGBA8UI, BGRA, L, V___), + PAN_V7(A8B8G8R8_USCALED, RGBA8UI, ABGR, L, V___), + PAN_V7(R16_USCALED, R16UI, RGB1, L, V___), + PAN_V7(R16G16_USCALED, RG16UI, RGB1, L, V___), + PAN_V7(R16G16B16_USCALED, RGB16UI, RGB1, L, V___), + PAN_V7(R16G16B16A16_USCALED, RGBA16UI, RGBA, L, V___), + PAN_V7(R16_SSCALED, R16I, RGB1, L, V___), + PAN_V7(R16G16_SSCALED, RG16I, RGB1, L, V___), + PAN_V7(R16G16B16_SSCALED, RGB16I, RGB1, L, V___), + PAN_V7(R16G16B16A16_SSCALED, RGBA16I, RGBA, L, V___), + PAN_V7(R32_USCALED, R32UI, RGB1, L, V___), + PAN_V7(R32G32_USCALED, RG32UI, RGB1, L, V___), + PAN_V7(R32G32B32_USCALED, RGB32UI, RGB1, L, V___), + PAN_V7(R32G32B32A32_USCALED, RGBA32UI, RGBA, L, V___), + PAN_V7(R32_SSCALED, R32I, RGB1, L, V___), + PAN_V7(R32G32_SSCALED, RG32I, RGB1, L, V___), + PAN_V7(R32G32B32_SSCALED, RGB32I, RGB1, L, V___), + PAN_V7(R32G32B32A32_SSCALED, RGBA32I, RGBA, L, V___), + PAN_V7(R3G3B2_UNORM, RGB332_UNORM, RGB1, L, VT__), + PAN_V7(Z16_UNORM, R16_UNORM, RGBA, L, _T_Z), + PAN_V7(Z24_UNORM_S8_UINT, Z24X8_UNORM, RGBA, L, _T_Z), + PAN_V7(Z24X8_UNORM, Z24X8_UNORM, RGBA, L, _T_Z), + PAN_V7(Z32_FLOAT, R32F, RGBA, L, _T_Z), + PAN_V7(Z32_FLOAT_S8X24_UINT, R32F, RGBA, L, _T_Z), + PAN_V7(X32_S8X24_UINT, S8X24, GRBA, L, _T__), + PAN_V7(X24S8_UINT, TILEBUFFER_NATIVE /* XXX: Deduplicate enum */, GRBA, L, _T_Z), + PAN_V7(S8_UINT, S8, GRBA, L, _T__), + PAN_V7(R32_FIXED, R32_FIXED, RGB1, L, V___), + PAN_V7(R32G32_FIXED, RG32_FIXED, RGB1, L, V___), + PAN_V7(R32G32B32_FIXED, RGB32_FIXED, RGB1, L, V___), + PAN_V7(R32G32B32A32_FIXED, RGBA32_FIXED, RGBA, L, V___), + PAN_V7(R11G11B10_FLOAT, R11F_G11F_B10F, RGB1, L, VTR_), + PAN_V7(R9G9B9E5_FLOAT, R9F_G9F_B9F_E5F, RGB1, L, VT__), + PAN_V7(R8_SNORM, R8_SNORM, RGB1, L, VT__), + PAN_V7(R16_SNORM, R16_SNORM, RGB1, L, VT__), + PAN_V7(R32_SNORM, R32_SNORM, RGB1, L, VT__), + PAN_V7(R8G8_SNORM, RG8_SNORM, RGB1, L, VT__), + PAN_V7(R16G16_SNORM, RG16_SNORM, RGB1, L, VT__), + PAN_V7(R32G32_SNORM, RG32_SNORM, RGB1, L, VT__), + PAN_V7(R8G8B8_SNORM, RGB8_SNORM, RGB1, L, VT__), + PAN_V7(R16G16B16_SNORM, RGB16_SNORM, RGB1, L, VT__), + PAN_V7(R32G32B32_SNORM, RGB32_SNORM, RGB1, L, VT__), + PAN_V7(R8G8B8A8_SNORM, RGBA8_SNORM, RGBA, L, VT__), + PAN_V7(R16G16B16A16_SNORM, RGBA16_SNORM, RGBA, L, VT__), + PAN_V7(R32G32B32A32_SNORM, RGBA32_SNORM, RGBA, L, VT__), + /* A8_SINT dropped on v7 */ + PAN_V7(I8_SINT, R8I, RRRR, L, VTR_), + PAN_V7(L8_SINT, R8I, RRR1, L, VTR_), + /* A8_UINT dropped on v7 */ + PAN_V7(I8_UINT, R8UI, RRRR, L, VTR_), + PAN_V7(L8_UINT, R8UI, RRR1, L, VTR_), + /* A16_SINT dropped on v7 */ + PAN_V7(I16_SINT, R16I, RRRR, L, VTR_), + PAN_V7(L16_SINT, R16I, RRR1, L, VTR_), + /* A16_UINT dropped on v7 */ + PAN_V7(I16_UINT, R16UI, RRRR, L, VTR_), + PAN_V7(L16_UINT, R16UI, RRR1, L, VTR_), + /* A32_SINT dropped on v7 */ + PAN_V7(I32_SINT, R32I, RRRR, L, VTR_), + PAN_V7(L32_SINT, R32I, RRR1, L, VTR_), + /* A32_UINT dropped on v7 */ + PAN_V7(I32_UINT, R32UI, RRRR, L, VTR_), + PAN_V7(L32_UINT, R32UI, RRR1, L, VTR_), + PAN_V7(B8G8R8_UINT, RGB8UI, BGR1, L, VTR_), + PAN_V7(B8G8R8A8_UINT, RGBA8UI, BGRA, L, VTR_), + PAN_V7(B8G8R8_SINT, RGB8I, BGR1, L, VTR_), + PAN_V7(B8G8R8A8_SINT, RGBA8I, BGRA, L, VTR_), + PAN_V7(A8R8G8B8_UINT, RGBA8UI, ARGB, L, VTR_), + PAN_V7(A8B8G8R8_UINT, RGBA8UI, ABGR, L, VTR_), + PAN_V7(R8_UINT, R8UI, RGB1, L, VTR_), + PAN_V7(R16_UINT, R16UI, RGB1, L, VTR_), + PAN_V7(R32_UINT, R32UI, RGB1, L, VTR_), + PAN_V7(R8G8_UINT, RG8UI, RGB1, L, VTR_), + PAN_V7(R16G16_UINT, RG16UI, RGB1, L, VTR_), + PAN_V7(R32G32_UINT, RG32UI, RGB1, L, VTR_), + PAN_V7(R8G8B8_UINT, RGB8UI, RGB1, L, VTR_), + PAN_V7(R16G16B16_UINT, RGB16UI, RGB1, L, VTR_), + PAN_V7(R32G32B32_UINT, RGB32UI, RGB1, L, VTR_), + PAN_V7(R8G8B8A8_UINT, RGBA8UI, RGBA, L, VTR_), + PAN_V7(R16G16B16A16_UINT, RGBA16UI, RGBA, L, VTR_), + PAN_V7(R32G32B32A32_UINT, RGBA32UI, RGBA, L, VTR_), + PAN_V7(R32_FLOAT, R32F, RGB1, L, VTR_), + PAN_V7(R32G32_FLOAT, RG32F, RGB1, L, VTR_), + PAN_V7(R32G32B32_FLOAT, RGB32F, RGB1, L, VTR_), + PAN_V7(R32G32B32A32_FLOAT, RGBA32F, RGBA, L, VTR_), + PAN_V7(R8_UNORM, R8_UNORM, RGB1, L, VTR_), + PAN_V7(R16_UNORM, R16_UNORM, RGB1, L, VTR_), + PAN_V7(R32_UNORM, R32_UNORM, RGB1, L, VTR_), + PAN_V7(R8G8_UNORM, RG8_UNORM, RGB1, L, VTR_), + PAN_V7(R16G16_UNORM, RG16_UNORM, RGB1, L, VTR_), + PAN_V7(R32G32_UNORM, RG32_UNORM, RGB1, L, VTR_), + PAN_V7(R8G8B8_UNORM, RGB8_UNORM, RGB1, L, VTR_), + PAN_V7(R16G16B16_UNORM, RGB16_UNORM, RGB1, L, VTR_), + PAN_V7(R32G32B32_UNORM, RGB32_UNORM, RGB1, L, VTR_), + PAN_V7(R4G4B4A4_UNORM, RGBA4_UNORM, RGBA, L, VTR_), + PAN_V7(R16G16B16A16_UNORM, RGBA16_UNORM, RGBA, L, VTR_), + PAN_V7(R32G32B32A32_UNORM, RGBA32_UNORM, RGBA, L, VTR_), + PAN_V7(B8G8R8A8_UNORM, RGBA8_UNORM, BGRA, L, VTR_), + PAN_V7(B8G8R8X8_UNORM, RGBA8_UNORM, BGR1, L, VTR_), + PAN_V7(A8R8G8B8_UNORM, RGBA8_UNORM, ARGB, L, VTR_), + PAN_V7(X8R8G8B8_UNORM, RGBA8_UNORM, 1RGB, L, VTR_), + PAN_V7(A8B8G8R8_UNORM, RGBA8_UNORM, ABGR, L, VTR_), + PAN_V7(X8B8G8R8_UNORM, RGBA8_UNORM, 1BGR, L, VTR_), + PAN_V7(R8G8B8X8_UNORM, RGBA8_UNORM, RGB1, L, VTR_), + PAN_V7(R8G8B8A8_UNORM, RGBA8_UNORM, RGBA, L, VTR_), + PAN_V7(R8G8B8X8_SNORM, RGBA8_SNORM, RGB1, L, VT__), + PAN_V7(R8G8B8X8_SRGB, RGBA8_UNORM, RGB1, S, VTR_), + PAN_V7(R8G8B8X8_UINT, RGBA8UI, RGB1, L, VTR_), + PAN_V7(R8G8B8X8_SINT, RGBA8I, RGB1, L, VTR_), + PAN_V7(L8_UNORM, R8_UNORM, RRR1, L, VTR_), + PAN_V7(A8_UNORM, A8_UNORM, 000A, L, VTR_), + PAN_V7(I8_UNORM, R8_UNORM, RRRR, L, VTR_), + PAN_V7(L8A8_UNORM, R8A8_UNORM, RRRA, L, VTR_), + PAN_V7(L16_UNORM, R16_UNORM, RRR1, L, VTR_), + /* A16_UNORM dropped on v7 */ + PAN_V7(I16_UNORM, R16_UNORM, RRRR, L, VTR_), + PAN_V7(L8_SNORM, R8_SNORM, RRR1, L, VT__), + /* A8_SNORM dropped on v7 */ + PAN_V7(I8_SNORM, R8_SNORM, RRRR, L, VT__), + PAN_V7(L16_SNORM, R16_SNORM, RRR1, L, VT__), + /* A16_SNORM dropped on v7 */ + PAN_V7(I16_SNORM, R16_SNORM, RRRR, L, VT__), + PAN_V7(L16_FLOAT, R16F, RRR1, L, VTR_), + /* A16_FLOAT dropped on v7 */ + PAN_V7(I16_FLOAT, RG16F, RRRR, L, VTR_), + PAN_V7(L8_SRGB, R8_UNORM, RRR1, S, VTR_), + PAN_V7(R8_SRGB, R8_UNORM, RGB1, S, VTR_), + PAN_V7(L8A8_SRGB, R8A8_UNORM, RRRA, S, VTR_), + PAN_V7(R8G8_SRGB, RG8_UNORM, RGB1, S, VTR_), + PAN_V7(R8G8B8_SRGB, RGB8_UNORM, RGB1, S, VTR_), + PAN_V7(B8G8R8_SRGB, RGB8_UNORM, BGR1, S, VTR_), + PAN_V7(R8G8B8A8_SRGB, RGBA8_UNORM, RGBA, S, VTR_), + PAN_V7(A8B8G8R8_SRGB, RGBA8_UNORM, ABGR, S, VTR_), + PAN_V7(X8B8G8R8_SRGB, RGBA8_UNORM, 1BGR, S, VTR_), + PAN_V7(B8G8R8A8_SRGB, RGBA8_UNORM, BGRA, S, VTR_), + PAN_V7(B8G8R8X8_SRGB, RGBA8_UNORM, BGR1, S, VTR_), + PAN_V7(A8R8G8B8_SRGB, RGBA8_UNORM, ARGB, S, VTR_), + PAN_V7(X8R8G8B8_SRGB, RGBA8_UNORM, 1RGB, S, VTR_), + PAN_V7(R8_SINT, R8I, RGB1, L, VTR_), + PAN_V7(R16_SINT, R16I, RGB1, L, VTR_), + PAN_V7(R32_SINT, R32I, RGB1, L, VTR_), + PAN_V7(R16_FLOAT, R16F, RGB1, L, VTR_), + PAN_V7(R8G8_SINT, RG8I, RGB1, L, VTR_), + PAN_V7(R16G16_SINT, RG16I, RGB1, L, VTR_), + PAN_V7(R32G32_SINT, RG32I, RGB1, L, VTR_), + PAN_V7(R16G16_FLOAT, RG16F, RGB1, L, VTR_), + PAN_V7(R8G8B8_SINT, RGB8I, RGB1, L, VTR_), + PAN_V7(R16G16B16_SINT, RGB16I, RGB1, L, VTR_), + PAN_V7(R32G32B32_SINT, RGB32I, RGB1, L, VTR_), + PAN_V7(R16G16B16_FLOAT, RGB16F, RGB1, L, VTR_), + PAN_V7(R8G8B8A8_SINT, RGBA8I, RGBA, L, VTR_), + PAN_V7(R16G16B16A16_SINT, RGBA16I, RGBA, L, VTR_), + PAN_V7(R32G32B32A32_SINT, RGBA32I, RGBA, L, VTR_), + PAN_V7(R16G16B16A16_FLOAT, RGBA16F, RGBA, L, VTR_), + PAN_V7(R16G16B16X16_UNORM, RGBA16_UNORM, RGB1, L, VTR_), + PAN_V7(R16G16B16X16_SNORM, RGBA16_SNORM, RGB1, L, VT__), + PAN_V7(R16G16B16X16_FLOAT, RGBA16F, RGB1, L, VTR_), + PAN_V7(R16G16B16X16_UINT, RGBA16UI, RGB1, L, VTR_), + PAN_V7(R16G16B16X16_SINT, RGBA16I, RGB1, L, VTR_), + PAN_V7(R32G32B32X32_FLOAT, RGBA32F, RGB1, L, VTR_), + PAN_V7(R32G32B32X32_UINT, RGBA32UI, RGB1, L, VTR_), + PAN_V7(R32G32B32X32_SINT, RGBA32I, RGB1, L, VTR_), +}; /* Translate a PIPE swizzle quad to a 12-bit Mali swizzle code. PIPE * swizzles line up with Mali swizzles for the XYZW01, but PIPE swizzles have diff --git a/src/panfrost/lib/pan_props.c b/src/panfrost/lib/pan_props.c index e207f1d6676..c40d9c014f5 100644 --- a/src/panfrost/lib/pan_props.c +++ b/src/panfrost/lib/pan_props.c @@ -35,6 +35,7 @@ #include "pan_device.h" #include "panfrost-quirks.h" #include "pan_bo.h" +#include "pan_texture.h" /* Abstraction over the raw drm_panfrost_get_param ioctl for fetching * information about devices */ @@ -210,6 +211,11 @@ panfrost_open_device(void *memctx, int fd, struct panfrost_device *dev) dev->quirks = panfrost_get_quirks(dev->gpu_id); dev->compressed_formats = panfrost_query_compressed_formats(fd); + if (dev->quirks & HAS_SWIZZLES) + dev->formats = panfrost_pipe_format_v6; + else + dev->formats = panfrost_pipe_format_v7; + util_sparse_array_init(&dev->bo_map, sizeof(struct panfrost_bo), 512); pthread_mutex_init(&dev->bo_cache.lock, NULL); diff --git a/src/panfrost/lib/pan_texture.c b/src/panfrost/lib/pan_texture.c index ff5aee372fc..efeb9ec8b00 100644 --- a/src/panfrost/lib/pan_texture.c +++ b/src/panfrost/lib/pan_texture.c @@ -339,27 +339,16 @@ panfrost_new_texture( unsigned bytes_per_pixel = util_format_get_blocksize(format); - enum mali_format mali_format = panfrost_pipe_format_table[desc->format].hw; - assert(mali_format); - bool manual_stride = (modifier == DRM_FORMAT_MOD_LINEAR) && panfrost_needs_explicit_stride(slices, width, first_level, last_level, bytes_per_pixel); - unsigned format_swizzle = (format == PIPE_FORMAT_X24S8_UINT) ? - MALI_SWIZZLE_A001 : - (format == PIPE_FORMAT_S8_UINT) ? - MALI_SWIZZLE_R001 : - panfrost_translate_swizzle_4(desc->swizzle); - - bool srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB); - pan_pack(out, MIDGARD_TEXTURE, cfg) { cfg.width = u_minify(width, first_level); cfg.height = u_minify(height, first_level); cfg.depth = u_minify(depth, first_level); cfg.array_size = array_size; - cfg.format = format_swizzle | (mali_format << 12) | (srgb << 20); + cfg.format = panfrost_pipe_format_v6[format].hw; cfg.dimension = dim; cfg.texel_ordering = panfrost_modifier_to_layout(modifier); cfg.manual_stride = manual_stride; @@ -403,9 +392,6 @@ panfrost_new_texture_bifrost( const struct util_format_description *desc = util_format_description(format); - enum mali_format mali_format = panfrost_pipe_format_table[desc->format].hw; - assert(mali_format); - panfrost_emit_texture_payload( payload->cpu, desc, @@ -420,16 +406,9 @@ panfrost_new_texture_bifrost( base, slices); - bool srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB); - bool swap_rb = desc->swizzle[0] == 2 && desc->swizzle[2] == 0; - pan_pack(out, BIFROST_TEXTURE, cfg) { cfg.dimension = dim; - cfg.format = (mali_format << 12) | (srgb << 20); - if (dev->quirks & HAS_SWIZZLES) - cfg.format |= panfrost_get_default_swizzle(desc->nr_channels); - else if (swap_rb) - cfg.format |= MALI_RGB_COMPONENT_ORDER_BGRA; + cfg.format = dev->formats[format].hw; cfg.width = u_minify(width, first_level); cfg.height = u_minify(height, first_level); diff --git a/src/panfrost/lib/pan_texture.h b/src/panfrost/lib/pan_texture.h index e6ea7012258..07fbbd0b96a 100644 --- a/src/panfrost/lib/pan_texture.h +++ b/src/panfrost/lib/pan_texture.h @@ -138,11 +138,6 @@ panfrost_texture_offset(struct panfrost_slice *slices, bool is_3d, unsigned cube /* Formats */ -struct panfrost_format { - enum mali_format hw; - unsigned bind; -}; - struct pan_blendable_format { enum mali_color_buffer_internal_format internal; enum mali_mfbd_color_format writeback; @@ -151,7 +146,8 @@ struct pan_blendable_format { struct pan_blendable_format panfrost_blend_format(enum pipe_format format); -extern struct panfrost_format panfrost_pipe_format_table[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]; enum mali_z_internal_format panfrost_get_z_internal_format(enum pipe_format fmt); @@ -162,6 +158,14 @@ panfrost_translate_swizzle_4(const unsigned char swizzle[4]); void panfrost_invert_swizzle(const unsigned char *in, unsigned char *out); +/* Helpers to construct swizzles */ + +#define PAN_V6_SWIZZLE(R, G, B, A) ( \ + ((MALI_CHANNEL_ ## R) << 0) | \ + ((MALI_CHANNEL_ ## G) << 3) | \ + ((MALI_CHANNEL_ ## B) << 6) | \ + ((MALI_CHANNEL_ ## A) << 9)) + static inline unsigned panfrost_get_default_swizzle(unsigned components) {