panfrost: Split out v6/v7 format tables

Midgard (v4, v5) and Bifrost v6 have swizzles on every pixel format
descriptor, allowing for arbitrary component reordering. With v7,
reordering is limited to a fixed set of common swizzles, which
simplifies the hardware but to some extent limits the formats available.

To handle, we split out the format tables, with the correct table for
the current hardware loaded as dev->formats.

v2: Switch sRGB flag from T/F to S/L per icecream's suggestion

v3: Add back Z16_UNORM formats to fix trace changes.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tested-by: Christian Hewitt <christianshewitt@gmail.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7352>
This commit is contained in:
Alyssa Rosenzweig 2020-08-12 17:45:05 -04:00 committed by Marge Bot
parent 29bb2812c1
commit c6bdd976e6
8 changed files with 571 additions and 347 deletions

View File

@ -584,27 +584,13 @@ panfrost_create_vertex_elements_state(
for (int i = 0; i < num_elements; ++i) { for (int i = 0; i < num_elements; ++i) {
enum pipe_format fmt = elements[i].src_format; enum pipe_format fmt = elements[i].src_format;
const struct util_format_description *desc = util_format_description(fmt); const struct util_format_description *desc = util_format_description(fmt);
unsigned swizzle = 0; so->formats[i] = dev->formats[desc->format].hw;
if (dev->quirks & HAS_SWIZZLES) assert(so->formats[i]);
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);
} }
/* Let's also prepare vertex builtins */ /* Let's also prepare vertex builtins */
if (dev->quirks & HAS_SWIZZLES) so->formats[PAN_VERTEX_ID] = dev->formats[PIPE_FORMAT_R32_UINT].hw;
so->formats[PAN_VERTEX_ID] = (MALI_R32UI << 12) | panfrost_get_default_swizzle(1); so->formats[PAN_INSTANCE_ID] = dev->formats[PIPE_FORMAT_R32_UINT].hw;
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);
return so; return so;
} }

View File

@ -487,19 +487,20 @@ panfrost_is_format_supported( struct pipe_screen *screen,
( PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_RENDER_TARGET ( PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_RENDER_TARGET
| PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_SAMPLER_VIEW); | 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 /* Also check that compressed texture formats are supported on this
* particular chip. They may not be depending on system integration * particular chip. They may not be depending on system integration
* differences. RGTC can be emulated so is always supported. */ * differences. RGTC can be emulated so is always supported. */
bool is_rgtc = format_desc->layout == UTIL_FORMAT_LAYOUT_RGTC; 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) if (!is_rgtc && !supported)
return false; 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. /* We always support linear and tiled operations, both external and internal.

View File

@ -283,11 +283,7 @@ panfrost_load_emit_varying(struct pan_pool *pool, struct MALI_DRAW *draw,
pan_pack(varying.cpu, ATTRIBUTE, cfg) { pan_pack(varying.cpu, ATTRIBUTE, cfg) {
cfg.buffer_index = 0; cfg.buffer_index = 0;
cfg.offset_enable = !is_bifrost; cfg.offset_enable = !is_bifrost;
cfg.format = (MALI_RGBA32F << 12); cfg.format = pool->dev->formats[PIPE_FORMAT_R32G32_FLOAT].hw;
if (pool->dev->quirks & HAS_SWIZZLES)
cfg.format |= panfrost_get_default_swizzle(2);
else
cfg.format |= panfrost_bifrost_swizzle(2);
} }
draw->varyings = varying.gpu; draw->varyings = varying.gpu;

View File

@ -89,6 +89,13 @@ struct pan_blit_shaders {
struct pan_blit_shader loads[PAN_BLIT_NUM_TARGETS][PAN_BLIT_NUM_TYPES][2]; 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 { struct panfrost_device {
/* For ralloc */ /* For ralloc */
void *memctx; void *memctx;
@ -102,6 +109,9 @@ struct panfrost_device {
unsigned thread_tls_alloc; unsigned thread_tls_alloc;
unsigned quirks; unsigned quirks;
/* Table of formats, indexed by a PIPE format */
const struct panfrost_format *formats;
/* Bitmask of supported compressed texture formats */ /* Bitmask of supported compressed texture formats */
uint32_t compressed_formats; uint32_t compressed_formats;

View File

@ -87,306 +87,548 @@ panfrost_blend_format(enum pipe_format format)
#define _T PIPE_BIND_SAMPLER_VIEW #define _T PIPE_BIND_SAMPLER_VIEW
#define _R PIPE_BIND_RENDER_TARGET #define _R PIPE_BIND_RENDER_TARGET
#define _Z PIPE_BIND_DEPTH_STENCIL #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] = { #define FLAGS_V___ (_V)
[PIPE_FORMAT_ETC1_RGB8] = { MALI_ETC2_RGB8, _T }, #define FLAGS__T__ (_T)
[PIPE_FORMAT_ETC2_RGB8] = { MALI_ETC2_RGB8, _T }, #define FLAGS_VTR_ (_V | _T | _R)
[PIPE_FORMAT_ETC2_SRGB8] = { MALI_ETC2_RGB8, _T }, #define FLAGS_VT__ (_V | _T)
[PIPE_FORMAT_ETC2_R11_UNORM] = { MALI_ETC2_R11_UNORM, _T }, #define FLAGS__T_Z (_T | _Z)
[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 },
[PIPE_FORMAT_DXT1_RGB] = { MALI_BC1_UNORM, _T }, #define V6_000R PAN_V6_SWIZZLE(0, 0, 0, R)
[PIPE_FORMAT_DXT1_RGBA] = { MALI_BC1_UNORM, _T }, #define V6_A001 PAN_V6_SWIZZLE(A, 0, 0, 1)
[PIPE_FORMAT_DXT1_SRGB] = { MALI_BC1_UNORM, _T }, #define V6_ABG1 PAN_V6_SWIZZLE(A, B, G, 1)
[PIPE_FORMAT_DXT1_SRGBA] = { MALI_BC1_UNORM, _T }, #define V6_ABGR PAN_V6_SWIZZLE(A, B, G, R)
[PIPE_FORMAT_DXT3_RGBA] = { MALI_BC2_UNORM, _T }, #define V6_BGR1 PAN_V6_SWIZZLE(B, G, R, 1)
[PIPE_FORMAT_DXT3_SRGBA] = { MALI_BC2_UNORM, _T }, #define V6_BGRA PAN_V6_SWIZZLE(B, G, R, A)
[PIPE_FORMAT_DXT5_RGBA] = { MALI_BC3_UNORM, _T }, #define V6_GBA1 PAN_V6_SWIZZLE(G, B, A, 1)
[PIPE_FORMAT_DXT5_SRGBA] = { MALI_BC3_UNORM, _T }, #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 }, #define SRGB_L (0)
[PIPE_FORMAT_RGTC1_SNORM] = { MALI_BC4_SNORM, _T }, #define SRGB_S (1)
[PIPE_FORMAT_RGTC2_UNORM] = { MALI_BC5_UNORM, _T },
[PIPE_FORMAT_RGTC2_SNORM] = { MALI_BC5_SNORM, _T },
[PIPE_FORMAT_BPTC_RGB_FLOAT] = { MALI_BC6H_SF16, _T }, #define PAN_V6(pipe, mali, swizzle, srgb, flags) \
[PIPE_FORMAT_BPTC_RGB_UFLOAT] = { MALI_BC6H_UF16, _T }, [PIPE_FORMAT_ ## pipe] = { \
[PIPE_FORMAT_BPTC_RGBA_UNORM] = { MALI_BC7_UNORM, _T }, .hw = ( V6_ ## swizzle ) | \
[PIPE_FORMAT_BPTC_SRGBA] = { MALI_BC7_UNORM, _T }, (( MALI_ ## mali ) << 12) | \
((( SRGB_ ## srgb)) << 20), \
.bind = FLAGS_ ## flags \
}
[PIPE_FORMAT_ASTC_4x4] = { MALI_ASTC_2D_HDR, _T }, #define PAN_V7(pipe, mali, swizzle, srgb, flags) \
[PIPE_FORMAT_ASTC_5x4] = { MALI_ASTC_2D_HDR, _T }, [PIPE_FORMAT_ ## pipe] = { \
[PIPE_FORMAT_ASTC_5x5] = { MALI_ASTC_2D_HDR, _T }, .hw = ( MALI_RGB_COMPONENT_ORDER_ ## swizzle ) | \
[PIPE_FORMAT_ASTC_6x5] = { MALI_ASTC_2D_HDR, _T }, (( MALI_ ## mali ) << 12) | \
[PIPE_FORMAT_ASTC_6x6] = { MALI_ASTC_2D_HDR, _T }, ((( SRGB_ ## srgb)) << 20), \
[PIPE_FORMAT_ASTC_8x5] = { MALI_ASTC_2D_HDR, _T }, .bind = FLAGS_ ## flags \
[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 },
[PIPE_FORMAT_ASTC_4x4_SRGB] = { MALI_ASTC_2D_LDR, _T }, const struct panfrost_format panfrost_pipe_format_v6[PIPE_FORMAT_COUNT] = {
[PIPE_FORMAT_ASTC_5x4_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC1_RGB8, ETC2_RGB8, RGB1, L, _T__),
[PIPE_FORMAT_ASTC_5x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_RGB8, ETC2_RGB8, RGB1, L, _T__),
[PIPE_FORMAT_ASTC_6x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_SRGB8, ETC2_RGB8, RGB1, S, _T__),
[PIPE_FORMAT_ASTC_6x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_R11_UNORM, ETC2_R11_UNORM, R001, L, _T__),
[PIPE_FORMAT_ASTC_8x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_RGBA8, ETC2_RGBA8, RGBA, L, _T__),
[PIPE_FORMAT_ASTC_8x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_SRGBA8, ETC2_RGBA8, RGBA, S, _T__),
[PIPE_FORMAT_ASTC_8x8_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_RG11_UNORM, ETC2_RG11_UNORM, RG01, L, _T__),
[PIPE_FORMAT_ASTC_10x5_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_R11_SNORM, ETC2_R11_SNORM, R001, L, _T__),
[PIPE_FORMAT_ASTC_10x6_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_RG11_SNORM, ETC2_RG11_SNORM, RG01, L, _T__),
[PIPE_FORMAT_ASTC_10x8_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_RGB8A1, ETC2_RGB8A1, RGBA, L, _T__),
[PIPE_FORMAT_ASTC_10x10_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(ETC2_SRGB8A1, ETC2_RGB8A1, RGBA, S, _T__),
[PIPE_FORMAT_ASTC_12x10_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(DXT1_RGB, BC1_UNORM, RGB1, L, _T__),
[PIPE_FORMAT_ASTC_12x12_SRGB] = { MALI_ASTC_2D_LDR, _T }, PAN_V6(DXT1_RGBA, BC1_UNORM, RGBA, L, _T__),
[PIPE_FORMAT_B5G6R5_UNORM] = { MALI_RGB565, _VTR }, PAN_V6(DXT1_SRGB, BC1_UNORM, RGB1, S, _T__),
[PIPE_FORMAT_B5G5R5X1_UNORM] = { MALI_RGB5_X1_UNORM, _VT }, PAN_V6(DXT1_SRGBA, BC1_UNORM, RGBA, S, _T__),
[PIPE_FORMAT_R5G5B5A1_UNORM] = { MALI_RGB5_A1_UNORM, _VTR }, PAN_V6(DXT3_RGBA, BC2_UNORM, RGBA, L, _T__),
PAN_V6(DXT3_SRGBA, BC2_UNORM, RGBA, S, _T__),
[PIPE_FORMAT_R10G10B10X2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, PAN_V6(DXT5_RGBA, BC3_UNORM, RGBA, L, _T__),
[PIPE_FORMAT_B10G10R10X2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, PAN_V6(DXT5_SRGBA, BC3_UNORM, RGBA, S, _T__),
[PIPE_FORMAT_R10G10B10A2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, PAN_V6(RGTC1_UNORM, BC4_UNORM, R001, L, _T__),
[PIPE_FORMAT_B10G10R10A2_UNORM] = { MALI_RGB10_A2_UNORM, _VTR }, PAN_V6(RGTC1_SNORM, BC4_SNORM, R001, L, _T__),
[PIPE_FORMAT_R10G10B10X2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, PAN_V6(RGTC2_UNORM, BC5_UNORM, RG01, L, _T__),
[PIPE_FORMAT_R10G10B10A2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, PAN_V6(RGTC2_SNORM, BC5_SNORM, RG01, L, _T__),
[PIPE_FORMAT_B10G10R10A2_SNORM] = { MALI_RGB10_A2_SNORM, _VT }, PAN_V6(BPTC_RGB_FLOAT, BC6H_SF16, RGB1, L, _T__),
[PIPE_FORMAT_R10G10B10A2_UINT] = { MALI_RGB10_A2UI, _VTR }, PAN_V6(BPTC_RGB_UFLOAT, BC6H_UF16, RGB1, L, _T__),
[PIPE_FORMAT_B10G10R10A2_UINT] = { MALI_RGB10_A2UI, _VTR }, PAN_V6(BPTC_RGBA_UNORM, BC7_UNORM, RGBA, L, _T__),
[PIPE_FORMAT_R10G10B10A2_USCALED] = { MALI_RGB10_A2UI, _VTR }, PAN_V6(BPTC_SRGBA, BC7_UNORM, RGBA, S, _T__),
[PIPE_FORMAT_B10G10R10A2_USCALED] = { MALI_RGB10_A2UI, _VTR }, PAN_V6(ASTC_4x4, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R10G10B10A2_SINT] = { MALI_RGB10_A2I, _VTR}, PAN_V6(ASTC_5x4, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_B10G10R10A2_SINT] = { MALI_RGB10_A2I, _VTR }, PAN_V6(ASTC_5x5, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R10G10B10A2_SSCALED] = { MALI_RGB10_A2I, _VTR }, PAN_V6(ASTC_6x5, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_B10G10R10A2_SSCALED] = { MALI_RGB10_A2I, _VTR }, PAN_V6(ASTC_6x6, ASTC_2D_HDR, RGBA, L, _T__),
PAN_V6(ASTC_8x5, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R8_SSCALED] = { MALI_R8I, _V }, PAN_V6(ASTC_8x6, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R8G8_SSCALED] = { MALI_RG8I, _V }, PAN_V6(ASTC_8x8, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R8G8B8_SSCALED] = { MALI_RGB8I, _V }, PAN_V6(ASTC_10x5, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_B8G8R8_SSCALED] = { MALI_RGB8I, _V }, PAN_V6(ASTC_10x6, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R8G8B8A8_SSCALED] = { MALI_RGBA8I, _V }, PAN_V6(ASTC_10x8, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_B8G8R8A8_SSCALED] = { MALI_RGBA8I, _V }, PAN_V6(ASTC_10x10, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_A8B8G8R8_SSCALED] = { MALI_RGBA8I, _V }, PAN_V6(ASTC_12x10, ASTC_2D_HDR, RGBA, L, _T__),
PAN_V6(ASTC_12x12, ASTC_2D_HDR, RGBA, L, _T__),
[PIPE_FORMAT_R8_USCALED] = { MALI_R8UI, _V }, PAN_V6(ASTC_4x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R8G8_USCALED] = { MALI_RG8UI, _V }, PAN_V6(ASTC_5x4_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R8G8B8_USCALED] = { MALI_RGB8UI, _V }, PAN_V6(ASTC_5x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_B8G8R8_USCALED] = { MALI_RGB8UI, _V }, PAN_V6(ASTC_6x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R8G8B8A8_USCALED] = { MALI_RGBA8UI, _V }, PAN_V6(ASTC_6x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_B8G8R8A8_USCALED] = { MALI_RGBA8UI, _V }, PAN_V6(ASTC_8x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_A8B8G8R8_USCALED] = { MALI_RGBA8UI, _V }, PAN_V6(ASTC_8x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
PAN_V6(ASTC_8x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16_USCALED] = { MALI_R16UI, _V }, PAN_V6(ASTC_10x5_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16G16_USCALED] = { MALI_RG16UI, _V }, PAN_V6(ASTC_10x6_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16G16B16_USCALED] = { MALI_RGB16UI, _V }, PAN_V6(ASTC_10x8_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16G16B16A16_USCALED] = { MALI_RGBA16UI, _V }, PAN_V6(ASTC_10x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16_SSCALED] = { MALI_R16I, _V }, PAN_V6(ASTC_12x10_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16G16_SSCALED] = { MALI_RG16I, _V }, PAN_V6(ASTC_12x12_SRGB, ASTC_2D_LDR, RGBA, S, _T__),
[PIPE_FORMAT_R16G16B16_SSCALED] = { MALI_RGB16I, _V }, PAN_V6(B5G6R5_UNORM, RGB565, BGR1, L, VTR_),
[PIPE_FORMAT_R16G16B16A16_SSCALED] = { MALI_RGBA16I, _V }, PAN_V6(B5G5R5X1_UNORM, RGB5_X1_UNORM, BGR1, L, VT__),
PAN_V6(R5G5B5A1_UNORM, RGB5_A1_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_R32_USCALED] = { MALI_R32UI, _V }, PAN_V6(R10G10B10X2_UNORM, RGB10_A2_UNORM, RGB1, L, VTR_),
[PIPE_FORMAT_R32G32_USCALED] = { MALI_RG32UI, _V }, PAN_V6(B10G10R10X2_UNORM, RGB10_A2_UNORM, BGR1, L, VTR_),
[PIPE_FORMAT_R32G32B32_USCALED] = { MALI_RGB32UI, _V }, PAN_V6(R10G10B10A2_UNORM, RGB10_A2_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_R32G32B32A32_USCALED] = { MALI_RGBA32UI, _V }, PAN_V6(B10G10R10A2_UNORM, RGB10_A2_UNORM, BGRA, L, VTR_),
[PIPE_FORMAT_R32_SSCALED] = { MALI_R32I, _V }, PAN_V6(R10G10B10X2_SNORM, RGB10_A2_SNORM, RGB1, L, VT__),
[PIPE_FORMAT_R32G32_SSCALED] = { MALI_RG32I, _V }, PAN_V6(R10G10B10A2_SNORM, RGB10_A2_SNORM, RGBA, L, VT__),
[PIPE_FORMAT_R32G32B32_SSCALED] = { MALI_RGB32I, _V }, PAN_V6(B10G10R10A2_SNORM, RGB10_A2_SNORM, BGRA, L, VT__),
[PIPE_FORMAT_R32G32B32A32_SSCALED] = { MALI_RGBA32I, _V }, PAN_V6(R10G10B10A2_UINT, RGB10_A2UI, RGBA, L, VTR_),
PAN_V6(B10G10R10A2_UINT, RGB10_A2UI, BGRA, L, VTR_),
[PIPE_FORMAT_R3G3B2_UNORM] = { MALI_RGB332_UNORM, _VT }, PAN_V6(R10G10B10A2_USCALED, RGB10_A2UI, RGBA, L, VTR_),
PAN_V6(B10G10R10A2_USCALED, RGB10_A2UI, BGRA, L, VTR_),
[PIPE_FORMAT_Z16_UNORM] = { MALI_R16_UNORM, _TZ }, PAN_V6(R10G10B10A2_SINT, RGB10_A2I, RGBA, L, VTR_),
[PIPE_FORMAT_Z24_UNORM_S8_UINT] = { MALI_Z24X8_UNORM, _TZ }, PAN_V6(B10G10R10A2_SINT, RGB10_A2I, BGRA, L, VTR_),
[PIPE_FORMAT_Z24X8_UNORM] = { MALI_Z24X8_UNORM, _TZ }, PAN_V6(R10G10B10A2_SSCALED, RGB10_A2I, RGBA, L, VTR_),
[PIPE_FORMAT_Z32_FLOAT] = { MALI_R32F, _TZ }, PAN_V6(B10G10R10A2_SSCALED, RGB10_A2I, BGRA, L, VTR_),
[PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = { MALI_R32F, _TZ }, PAN_V6(R8_SSCALED, R8I, R001, L, V___),
[PIPE_FORMAT_X32_S8X24_UINT] = { MALI_R8UI, _T }, PAN_V6(R8G8_SSCALED, RG8I, RG01, L, V___),
[PIPE_FORMAT_X24S8_UINT] = { MALI_RGBA8UI, _TZ }, PAN_V6(R8G8B8_SSCALED, RGB8I, RGB1, L, V___),
[PIPE_FORMAT_S8_UINT] = { MALI_R8UI, _T }, PAN_V6(B8G8R8_SSCALED, RGB8I, BGR1, L, V___),
PAN_V6(R8G8B8A8_SSCALED, RGBA8I, RGBA, L, V___),
[PIPE_FORMAT_R32_FIXED] = { MALI_R32_FIXED, _V }, PAN_V6(B8G8R8A8_SSCALED, RGBA8I, BGRA, L, V___),
[PIPE_FORMAT_R32G32_FIXED] = { MALI_RG32_FIXED, _V }, PAN_V6(A8B8G8R8_SSCALED, RGBA8I, ABGR, L, V___),
[PIPE_FORMAT_R32G32B32_FIXED] = { MALI_RGB32_FIXED, _V }, PAN_V6(R8_USCALED, R8UI, R001, L, V___),
[PIPE_FORMAT_R32G32B32A32_FIXED] = { MALI_RGBA32_FIXED, _V }, PAN_V6(R8G8_USCALED, RG8UI, RG01, L, V___),
PAN_V6(R8G8B8_USCALED, RGB8UI, RGB1, L, V___),
[PIPE_FORMAT_R11G11B10_FLOAT] = { MALI_R11F_G11F_B10F, _VTR}, PAN_V6(B8G8R8_USCALED, RGB8UI, BGR1, L, V___),
[PIPE_FORMAT_R9G9B9E5_FLOAT] = { MALI_R9F_G9F_B9F_E5F, _VT }, PAN_V6(R8G8B8A8_USCALED, RGBA8UI, RGBA, L, V___),
PAN_V6(B8G8R8A8_USCALED, RGBA8UI, BGRA, L, V___),
[PIPE_FORMAT_R8_SNORM] = { MALI_R8_SNORM, _VT }, PAN_V6(A8B8G8R8_USCALED, RGBA8UI, ABGR, L, V___),
[PIPE_FORMAT_R16_SNORM] = { MALI_R16_SNORM, _VT }, PAN_V6(R16_USCALED, R16UI, R001, L, V___),
[PIPE_FORMAT_R32_SNORM] = { MALI_R32_SNORM, _VT }, PAN_V6(R16G16_USCALED, RG16UI, RG01, L, V___),
[PIPE_FORMAT_R8G8_SNORM] = { MALI_RG8_SNORM, _VT }, PAN_V6(R16G16B16_USCALED, RGB16UI, RGB1, L, V___),
[PIPE_FORMAT_R16G16_SNORM] = { MALI_RG16_SNORM, _VT }, PAN_V6(R16G16B16A16_USCALED, RGBA16UI, RGBA, L, V___),
[PIPE_FORMAT_R32G32_SNORM] = { MALI_RG32_SNORM, _VT }, PAN_V6(R16_SSCALED, R16I, R001, L, V___),
[PIPE_FORMAT_R8G8B8_SNORM] = { MALI_RGB8_SNORM, _VT }, PAN_V6(R16G16_SSCALED, RG16I, RG01, L, V___),
[PIPE_FORMAT_R16G16B16_SNORM] = { MALI_RGB16_SNORM, _VT }, PAN_V6(R16G16B16_SSCALED, RGB16I, RGB1, L, V___),
[PIPE_FORMAT_R32G32B32_SNORM] = { MALI_RGB32_SNORM, _VT }, PAN_V6(R16G16B16A16_SSCALED, RGBA16I, RGBA, L, V___),
[PIPE_FORMAT_R8G8B8A8_SNORM] = { MALI_RGBA8_SNORM, _VT }, PAN_V6(R32_USCALED, R32UI, R001, L, V___),
[PIPE_FORMAT_R16G16B16A16_SNORM] = { MALI_RGBA16_SNORM, _VT }, PAN_V6(R32G32_USCALED, RG32UI, RG01, L, V___),
[PIPE_FORMAT_R32G32B32A32_SNORM] = { MALI_RGBA32_SNORM, _VT }, PAN_V6(R32G32B32_USCALED, RGB32UI, RGB1, L, V___),
PAN_V6(R32G32B32A32_USCALED, RGBA32UI, RGBA, L, V___),
[PIPE_FORMAT_A8_SINT] = { MALI_R8I, _VTR }, PAN_V6(R32_SSCALED, R32I, R001, L, V___),
[PIPE_FORMAT_I8_SINT] = { MALI_R8I, _VTR }, PAN_V6(R32G32_SSCALED, RG32I, RG01, L, V___),
[PIPE_FORMAT_L8_SINT] = { MALI_R8I, _VTR }, PAN_V6(R32G32B32_SSCALED, RGB32I, RGB1, L, V___),
[PIPE_FORMAT_L8A8_SINT] = { MALI_RG8I, _VTR }, PAN_V6(R32G32B32A32_SSCALED, RGBA32I, RGBA, L, V___),
[PIPE_FORMAT_A8_UINT] = { MALI_R8UI, _VTR }, PAN_V6(R3G3B2_UNORM, RGB332_UNORM, RGB1, L, VT__),
[PIPE_FORMAT_I8_UINT] = { MALI_R8UI, _VTR }, PAN_V6(Z16_UNORM, R16_UNORM, R000, L, _T_Z),
[PIPE_FORMAT_L8_UINT] = { MALI_R8UI, _VTR }, PAN_V6(Z24_UNORM_S8_UINT, Z24X8_UNORM, R000, L, _T_Z),
[PIPE_FORMAT_L8A8_UINT] = { MALI_RG8UI, _VTR }, PAN_V6(Z24X8_UNORM, Z24X8_UNORM, R000, L, _T_Z),
PAN_V6(Z32_FLOAT, R32F, R000, L, _T_Z),
[PIPE_FORMAT_A16_SINT] = { MALI_R16I, _VTR }, PAN_V6(Z32_FLOAT_S8X24_UINT, R32F, R000, L, _T_Z),
[PIPE_FORMAT_I16_SINT] = { MALI_R16I, _VTR }, PAN_V6(X32_S8X24_UINT, R32UI, R001, L, _T__),
[PIPE_FORMAT_L16_SINT] = { MALI_R16I, _VTR }, PAN_V6(X24S8_UINT, RGBA8UI, A001, L, _T_Z),
[PIPE_FORMAT_L16A16_SINT] = { MALI_RG16I, _VTR }, PAN_V6(S8_UINT, R8UI, R001, L, _T__),
[PIPE_FORMAT_A16_UINT] = { MALI_R16UI, _VTR }, PAN_V6(R32_FIXED, R32_FIXED, R001, L, V___),
[PIPE_FORMAT_I16_UINT] = { MALI_R16UI, _VTR }, PAN_V6(R32G32_FIXED, RG32_FIXED, RG01, L, V___),
[PIPE_FORMAT_L16_UINT] = { MALI_R16UI, _VTR }, PAN_V6(R32G32B32_FIXED, RGB32_FIXED, RGB1, L, V___),
[PIPE_FORMAT_L16A16_UINT] = { MALI_RG16UI, _VTR }, PAN_V6(R32G32B32A32_FIXED, RGBA32_FIXED, RGBA, L, V___),
PAN_V6(R11G11B10_FLOAT, R11F_G11F_B10F, RGB1, L, VTR_),
[PIPE_FORMAT_A32_SINT] = { MALI_R32I, _VTR }, PAN_V6(R9G9B9E5_FLOAT, R9F_G9F_B9F_E5F, RGB1, L, VT__),
[PIPE_FORMAT_I32_SINT] = { MALI_R32I, _VTR }, PAN_V6(R8_SNORM, R8_SNORM, R001, L, VT__),
[PIPE_FORMAT_L32_SINT] = { MALI_R32I, _VTR }, PAN_V6(R16_SNORM, R16_SNORM, R001, L, VT__),
[PIPE_FORMAT_L32A32_SINT] = { MALI_RG32I, _VTR }, PAN_V6(R32_SNORM, R32_SNORM, R001, L, VT__),
[PIPE_FORMAT_A32_UINT] = { MALI_R32UI, _VTR }, PAN_V6(R8G8_SNORM, RG8_SNORM, RG01, L, VT__),
[PIPE_FORMAT_I32_UINT] = { MALI_R32UI, _VTR }, PAN_V6(R16G16_SNORM, RG16_SNORM, RG01, L, VT__),
[PIPE_FORMAT_L32_UINT] = { MALI_R32UI, _VTR }, PAN_V6(R32G32_SNORM, RG32_SNORM, RG01, L, VT__),
[PIPE_FORMAT_L32A32_UINT] = { MALI_RG32UI, _VTR }, PAN_V6(R8G8B8_SNORM, RGB8_SNORM, RGB1, L, VT__),
PAN_V6(R16G16B16_SNORM, RGB16_SNORM, RGB1, L, VT__),
[PIPE_FORMAT_B8G8R8_UINT] = { MALI_RGB8UI, _VTR }, PAN_V6(R32G32B32_SNORM, RGB32_SNORM, RGB1, L, VT__),
[PIPE_FORMAT_B8G8R8A8_UINT] = { MALI_RGBA8UI, _VTR }, PAN_V6(R8G8B8A8_SNORM, RGBA8_SNORM, RGBA, L, VT__),
[PIPE_FORMAT_B8G8R8_SINT] = { MALI_RGB8I, _VTR }, PAN_V6(R16G16B16A16_SNORM, RGBA16_SNORM, RGBA, L, VT__),
[PIPE_FORMAT_B8G8R8A8_SINT] = { MALI_RGBA8I, _VTR }, PAN_V6(R32G32B32A32_SNORM, RGBA32_SNORM, RGBA, L, VT__),
[PIPE_FORMAT_A8R8G8B8_UINT] = { MALI_RGBA8UI, _VTR }, PAN_V6(A8_SINT, R8I, 000R, L, VTR_),
[PIPE_FORMAT_A8B8G8R8_UINT] = { MALI_RGBA8UI, _VTR }, PAN_V6(I8_SINT, R8I, RRRR, L, VTR_),
PAN_V6(L8_SINT, R8I, RRR1, L, VTR_),
[PIPE_FORMAT_R8_UINT] = { MALI_R8UI, _VTR }, PAN_V6(A8_UINT, R8UI, 000R, L, VTR_),
[PIPE_FORMAT_R16_UINT] = { MALI_R16UI, _VTR }, PAN_V6(I8_UINT, R8UI, RRRR, L, VTR_),
[PIPE_FORMAT_R32_UINT] = { MALI_R32UI, _VTR }, PAN_V6(L8_UINT, R8UI, RRR1, L, VTR_),
[PIPE_FORMAT_R8G8_UINT] = { MALI_RG8UI, _VTR }, PAN_V6(A16_SINT, R16I, 000R, L, VTR_),
[PIPE_FORMAT_R16G16_UINT] = { MALI_RG16UI, _VTR }, PAN_V6(I16_SINT, R16I, RRRR, L, VTR_),
[PIPE_FORMAT_R32G32_UINT] = { MALI_RG32UI, _VTR }, PAN_V6(L16_SINT, R16I, RRR1, L, VTR_),
[PIPE_FORMAT_R8G8B8_UINT] = { MALI_RGB8UI, _VTR }, PAN_V6(A16_UINT, R16UI, 000R, L, VTR_),
[PIPE_FORMAT_R16G16B16_UINT] = { MALI_RGB16UI, _VTR }, PAN_V6(I16_UINT, R16UI, RRRR, L, VTR_),
[PIPE_FORMAT_R32G32B32_UINT] = { MALI_RGB32UI, _VTR }, PAN_V6(L16_UINT, R16UI, RRR1, L, VTR_),
[PIPE_FORMAT_R8G8B8A8_UINT] = { MALI_RGBA8UI, _VTR }, PAN_V6(A32_SINT, R32I, 000R, L, VTR_),
[PIPE_FORMAT_R16G16B16A16_UINT] = { MALI_RGBA16UI, _VTR }, PAN_V6(I32_SINT, R32I, RRRR, L, VTR_),
[PIPE_FORMAT_R32G32B32A32_UINT] = { MALI_RGBA32UI, _VTR }, PAN_V6(L32_SINT, R32I, RRR1, L, VTR_),
PAN_V6(A32_UINT, R32UI, 000R, L, VTR_),
[PIPE_FORMAT_R32_FLOAT] = { MALI_R32F, _VTR }, PAN_V6(I32_UINT, R32UI, RRRR, L, VTR_),
[PIPE_FORMAT_R32G32_FLOAT] = { MALI_RG32F, _VTR }, PAN_V6(L32_UINT, R32UI, RRR1, L, VTR_),
[PIPE_FORMAT_R32G32B32_FLOAT] = { MALI_RGB32F, _VTR }, PAN_V6(B8G8R8_UINT, RGB8UI, BGR1, L, VTR_),
[PIPE_FORMAT_R32G32B32A32_FLOAT] = { MALI_RGBA32F, _VTR }, PAN_V6(B8G8R8A8_UINT, RGBA8UI, BGRA, L, VTR_),
PAN_V6(B8G8R8_SINT, RGB8I, BGR1, L, VTR_),
[PIPE_FORMAT_R8_UNORM] = { MALI_R8_UNORM, _VTR }, PAN_V6(B8G8R8A8_SINT, RGBA8I, BGRA, L, VTR_),
[PIPE_FORMAT_R16_UNORM] = { MALI_R16_UNORM, _VTR }, PAN_V6(A8R8G8B8_UINT, RGBA8UI, GBAR, L, VTR_),
[PIPE_FORMAT_R32_UNORM] = { MALI_R32_UNORM, _VTR }, PAN_V6(A8B8G8R8_UINT, RGBA8UI, ABGR, L, VTR_),
[PIPE_FORMAT_R8G8_UNORM] = { MALI_RG8_UNORM, _VTR }, PAN_V6(R8_UINT, R8UI, R001, L, VTR_),
[PIPE_FORMAT_R16G16_UNORM] = { MALI_RG16_UNORM, _VTR }, PAN_V6(R16_UINT, R16UI, R001, L, VTR_),
[PIPE_FORMAT_R32G32_UNORM] = { MALI_RG32_UNORM, _VTR }, PAN_V6(R32_UINT, R32UI, R001, L, VTR_),
[PIPE_FORMAT_R8G8B8_UNORM] = { MALI_RGB8_UNORM, _VTR }, PAN_V6(R8G8_UINT, RG8UI, RG01, L, VTR_),
[PIPE_FORMAT_R16G16B16_UNORM] = { MALI_RGB16_UNORM, _VTR }, PAN_V6(R16G16_UINT, RG16UI, RG01, L, VTR_),
[PIPE_FORMAT_R32G32B32_UNORM] = { MALI_RGB32_UNORM, _VTR }, PAN_V6(R32G32_UINT, RG32UI, RG01, L, VTR_),
[PIPE_FORMAT_R4G4B4A4_UNORM] = { MALI_RGBA4_UNORM, _VTR }, PAN_V6(R8G8B8_UINT, RGB8UI, RGB1, L, VTR_),
[PIPE_FORMAT_R16G16B16A16_UNORM] = { MALI_RGBA16_UNORM, _VTR }, PAN_V6(R16G16B16_UINT, RGB16UI, RGB1, L, VTR_),
[PIPE_FORMAT_R32G32B32A32_UNORM] = { MALI_RGBA32_UNORM, _VTR }, PAN_V6(R32G32B32_UINT, RGB32UI, RGB1, L, VTR_),
PAN_V6(R8G8B8A8_UINT, RGBA8UI, RGBA, L, VTR_),
[PIPE_FORMAT_B8G8R8A8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R16G16B16A16_UINT, RGBA16UI, RGBA, L, VTR_),
[PIPE_FORMAT_B8G8R8X8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R32G32B32A32_UINT, RGBA32UI, RGBA, L, VTR_),
[PIPE_FORMAT_A8R8G8B8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R32_FLOAT, R32F, R001, L, VTR_),
[PIPE_FORMAT_X8R8G8B8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R32G32_FLOAT, RG32F, RG01, L, VTR_),
[PIPE_FORMAT_A8B8G8R8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R32G32B32_FLOAT, RGB32F, RGB1, L, VTR_),
[PIPE_FORMAT_X8B8G8R8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R32G32B32A32_FLOAT, RGBA32F, RGBA, L, VTR_),
[PIPE_FORMAT_R8G8B8X8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R8_UNORM, R8_UNORM, R001, L, VTR_),
[PIPE_FORMAT_R8G8B8A8_UNORM] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R16_UNORM, R16_UNORM, R001, L, VTR_),
PAN_V6(R32_UNORM, R32_UNORM, R001, L, VTR_),
[PIPE_FORMAT_R8G8B8X8_SNORM] = { MALI_RGBA8_SNORM, _VT }, PAN_V6(R8G8_UNORM, RG8_UNORM, RG01, L, VTR_),
[PIPE_FORMAT_R8G8B8X8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R16G16_UNORM, RG16_UNORM, RG01, L, VTR_),
[PIPE_FORMAT_R8G8B8X8_UINT] = { MALI_RGBA8UI, _VTR }, PAN_V6(R32G32_UNORM, RG32_UNORM, RG01, L, VTR_),
[PIPE_FORMAT_R8G8B8X8_SINT] = { MALI_RGBA8I, _VTR }, PAN_V6(R8G8B8_UNORM, RGB8_UNORM, RGB1, L, VTR_),
PAN_V6(R16G16B16_UNORM, RGB16_UNORM, RGB1, L, VTR_),
[PIPE_FORMAT_L8_UNORM] = { MALI_R8_UNORM, _VTR }, PAN_V6(R32G32B32_UNORM, RGB32_UNORM, RGB1, L, VTR_),
[PIPE_FORMAT_A8_UNORM] = { MALI_R8_UNORM, _VTR }, PAN_V6(R4G4B4A4_UNORM, RGBA4_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_I8_UNORM] = { MALI_R8_UNORM, _VTR }, PAN_V6(R16G16B16A16_UNORM, RGBA16_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_L8A8_UNORM] = { MALI_RG8_UNORM, _VTR }, PAN_V6(R32G32B32A32_UNORM, RGBA32_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_L16_UNORM] = { MALI_R16_UNORM, _VTR }, PAN_V6(B8G8R8A8_UNORM, RGBA8_UNORM, BGRA, L, VTR_),
[PIPE_FORMAT_A16_UNORM] = { MALI_R16_UNORM, _VTR }, PAN_V6(B8G8R8X8_UNORM, RGBA8_UNORM, BGR1, L, VTR_),
[PIPE_FORMAT_I16_UNORM] = { MALI_R16_UNORM, _VTR }, PAN_V6(A8R8G8B8_UNORM, RGBA8_UNORM, GBAR, L, VTR_),
[PIPE_FORMAT_L16A16_UNORM] = { MALI_RG16_UNORM, _VTR }, PAN_V6(X8R8G8B8_UNORM, RGBA8_UNORM, GBA1, L, VTR_),
PAN_V6(A8B8G8R8_UNORM, RGBA8_UNORM, ABGR, L, VTR_),
[PIPE_FORMAT_L8_SNORM] = { MALI_R8_SNORM, _VT }, PAN_V6(X8B8G8R8_UNORM, RGBA8_UNORM, ABG1, L, VTR_),
[PIPE_FORMAT_A8_SNORM] = { MALI_R8_SNORM, _VT }, PAN_V6(R8G8B8X8_UNORM, RGBA8_UNORM, RGB1, L, VTR_),
[PIPE_FORMAT_I8_SNORM] = { MALI_R8_SNORM, _VT }, PAN_V6(R8G8B8A8_UNORM, RGBA8_UNORM, RGBA, L, VTR_),
[PIPE_FORMAT_L8A8_SNORM] = { MALI_RG8_SNORM, _VT }, PAN_V6(R8G8B8X8_SNORM, RGBA8_SNORM, RGB1, L, VT__),
[PIPE_FORMAT_L16_SNORM] = { MALI_R16_SNORM, _VT }, PAN_V6(R8G8B8X8_SRGB, RGBA8_UNORM, RGB1, S, VTR_),
[PIPE_FORMAT_A16_SNORM] = { MALI_R16_SNORM, _VT }, PAN_V6(R8G8B8X8_UINT, RGBA8UI, RGB1, L, VTR_),
[PIPE_FORMAT_I16_SNORM] = { MALI_R16_SNORM, _VT }, PAN_V6(R8G8B8X8_SINT, RGBA8I, RGB1, L, VTR_),
[PIPE_FORMAT_L16A16_SNORM] = { MALI_RG16_SNORM, _VT }, PAN_V6(L8_UNORM, R8_UNORM, RRR1, L, VTR_),
PAN_V6(A8_UNORM, R8_UNORM, 000R, L, VTR_),
[PIPE_FORMAT_L16_FLOAT] = { MALI_R16F, _VTR }, PAN_V6(I8_UNORM, R8_UNORM, RRRR, L, VTR_),
[PIPE_FORMAT_A16_FLOAT] = { MALI_R16F, _VTR }, PAN_V6(L8A8_UNORM, RG8_UNORM, RRRG, L, VTR_),
[PIPE_FORMAT_I16_FLOAT] = { MALI_RG16F, _VTR }, PAN_V6(L16_UNORM, R16_UNORM, RRR1, L, VTR_),
[PIPE_FORMAT_L16A16_FLOAT] = { MALI_RG16F, _VTR }, PAN_V6(A16_UNORM, R16_UNORM, 000R, L, VTR_),
PAN_V6(I16_UNORM, R16_UNORM, RRRR, L, VTR_),
[PIPE_FORMAT_L8_SRGB] = { MALI_R8_UNORM, _VTR }, PAN_V6(L8_SNORM, R8_SNORM, RRR1, L, VT__),
[PIPE_FORMAT_R8_SRGB] = { MALI_R8_UNORM, _VTR }, PAN_V6(A8_SNORM, R8_SNORM, 000R, L, VT__),
[PIPE_FORMAT_L8A8_SRGB] = { MALI_RG8_UNORM, _VTR }, PAN_V6(I8_SNORM, R8_SNORM, RRRR, L, VT__),
[PIPE_FORMAT_R8G8_SRGB] = { MALI_RG8_UNORM, _VTR }, PAN_V6(L16_SNORM, R16_SNORM, RRR1, L, VT__),
[PIPE_FORMAT_R8G8B8_SRGB] = { MALI_RGB8_UNORM, _VTR }, PAN_V6(A16_SNORM, R16_SNORM, 000R, L, VT__),
[PIPE_FORMAT_B8G8R8_SRGB] = { MALI_RGB8_UNORM, _VTR }, PAN_V6(I16_SNORM, R16_SNORM, RRRR, L, VT__),
[PIPE_FORMAT_R8G8B8A8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(L16_FLOAT, R16F, RRR1, L, VTR_),
[PIPE_FORMAT_A8B8G8R8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(A16_FLOAT, R16F, 000R, L, VTR_),
[PIPE_FORMAT_X8B8G8R8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(I16_FLOAT, RG16F, RRRR, L, VTR_),
[PIPE_FORMAT_B8G8R8A8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(L8_SRGB, R8_UNORM, RRR1, S, VTR_),
[PIPE_FORMAT_B8G8R8X8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R8_SRGB, R8_UNORM, R001, S, VTR_),
[PIPE_FORMAT_A8R8G8B8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(L8A8_SRGB, RG8_UNORM, RRRG, S, VTR_),
[PIPE_FORMAT_X8R8G8B8_SRGB] = { MALI_RGBA8_UNORM, _VTR }, PAN_V6(R8G8_SRGB, RG8_UNORM, RG01, S, VTR_),
PAN_V6(R8G8B8_SRGB, RGB8_UNORM, RGB1, S, VTR_),
[PIPE_FORMAT_R8_SINT] = { MALI_R8I, _VTR }, PAN_V6(B8G8R8_SRGB, RGB8_UNORM, BGR1, S, VTR_),
[PIPE_FORMAT_R16_SINT] = { MALI_R16I, _VTR }, PAN_V6(R8G8B8A8_SRGB, RGBA8_UNORM, RGBA, S, VTR_),
[PIPE_FORMAT_R32_SINT] = { MALI_R32I, _VTR }, PAN_V6(A8B8G8R8_SRGB, RGBA8_UNORM, ABGR, S, VTR_),
[PIPE_FORMAT_R16_FLOAT] = { MALI_R16F, _VTR }, PAN_V6(X8B8G8R8_SRGB, RGBA8_UNORM, ABG1, S, VTR_),
[PIPE_FORMAT_R8G8_SINT] = { MALI_RG8I, _VTR }, PAN_V6(B8G8R8A8_SRGB, RGBA8_UNORM, BGRA, S, VTR_),
[PIPE_FORMAT_R16G16_SINT] = { MALI_RG16I, _VTR }, PAN_V6(B8G8R8X8_SRGB, RGBA8_UNORM, BGR1, S, VTR_),
[PIPE_FORMAT_R32G32_SINT] = { MALI_RG32I, _VTR }, PAN_V6(A8R8G8B8_SRGB, RGBA8_UNORM, GBAR, S, VTR_),
[PIPE_FORMAT_R16G16_FLOAT] = { MALI_RG16F, _VTR }, PAN_V6(X8R8G8B8_SRGB, RGBA8_UNORM, GBA1, S, VTR_),
[PIPE_FORMAT_R8G8B8_SINT] = { MALI_RGB8I, _VTR }, PAN_V6(R8_SINT, R8I, R001, L, VTR_),
[PIPE_FORMAT_R16G16B16_SINT] = { MALI_RGB16I, _VTR }, PAN_V6(R16_SINT, R16I, R001, L, VTR_),
[PIPE_FORMAT_R32G32B32_SINT] = { MALI_RGB32I, _VTR }, PAN_V6(R32_SINT, R32I, R001, L, VTR_),
[PIPE_FORMAT_R16G16B16_FLOAT] = { MALI_RGB16F, _VTR }, PAN_V6(R16_FLOAT, R16F, R001, L, VTR_),
[PIPE_FORMAT_R8G8B8A8_SINT] = { MALI_RGBA8I, _VTR }, PAN_V6(R8G8_SINT, RG8I, RG01, L, VTR_),
[PIPE_FORMAT_R16G16B16A16_SINT] = { MALI_RGBA16I, _VTR }, PAN_V6(R16G16_SINT, RG16I, RG01, L, VTR_),
[PIPE_FORMAT_R32G32B32A32_SINT] = { MALI_RGBA32I, _VTR }, PAN_V6(R32G32_SINT, RG32I, RG01, L, VTR_),
[PIPE_FORMAT_R16G16B16A16_FLOAT] = { MALI_RGBA16F, _VTR }, PAN_V6(R16G16_FLOAT, RG16F, RG01, L, VTR_),
PAN_V6(R8G8B8_SINT, RGB8I, RGB1, L, VTR_),
[PIPE_FORMAT_R16G16B16X16_UNORM] = { MALI_RGBA16_UNORM, _VTR }, PAN_V6(R16G16B16_SINT, RGB16I, RGB1, L, VTR_),
[PIPE_FORMAT_R16G16B16X16_SNORM] = { MALI_RGBA16_SNORM, _VT }, PAN_V6(R32G32B32_SINT, RGB32I, RGB1, L, VTR_),
[PIPE_FORMAT_R16G16B16X16_FLOAT] = { MALI_RGBA16F, _VTR }, PAN_V6(R16G16B16_FLOAT, RGB16F, RGB1, L, VTR_),
[PIPE_FORMAT_R16G16B16X16_UINT] = { MALI_RGBA16UI, _VTR }, PAN_V6(R8G8B8A8_SINT, RGBA8I, RGBA, L, VTR_),
[PIPE_FORMAT_R16G16B16X16_SINT] = { MALI_RGBA16I, _VTR }, PAN_V6(R16G16B16A16_SINT, RGBA16I, RGBA, L, VTR_),
PAN_V6(R32G32B32A32_SINT, RGBA32I, RGBA, L, VTR_),
[PIPE_FORMAT_R32G32B32X32_FLOAT] = { MALI_RGBA32F, _VTR }, PAN_V6(R16G16B16A16_FLOAT, RGBA16F, RGBA, L, VTR_),
[PIPE_FORMAT_R32G32B32X32_UINT] = { MALI_RGBA32UI, _VTR }, PAN_V6(R16G16B16X16_UNORM, RGBA16_UNORM, RGB1, L, VTR_),
[PIPE_FORMAT_R32G32B32X32_SINT] = { MALI_RGBA32I, _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 const struct panfrost_format panfrost_pipe_format_v7[PIPE_FORMAT_COUNT] = {
#undef _VT PAN_V7(ETC1_RGB8, ETC2_RGB8, RGB1, L, _T__),
#undef _V PAN_V7(ETC2_RGB8, ETC2_RGB8, RGB1, L, _T__),
#undef _T PAN_V7(ETC2_SRGB8, ETC2_RGB8, RGB1, S, _T__),
#undef _R 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 /* 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 * swizzles line up with Mali swizzles for the XYZW01, but PIPE swizzles have

View File

@ -35,6 +35,7 @@
#include "pan_device.h" #include "pan_device.h"
#include "panfrost-quirks.h" #include "panfrost-quirks.h"
#include "pan_bo.h" #include "pan_bo.h"
#include "pan_texture.h"
/* Abstraction over the raw drm_panfrost_get_param ioctl for fetching /* Abstraction over the raw drm_panfrost_get_param ioctl for fetching
* information about devices */ * 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->quirks = panfrost_get_quirks(dev->gpu_id);
dev->compressed_formats = panfrost_query_compressed_formats(fd); 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); util_sparse_array_init(&dev->bo_map, sizeof(struct panfrost_bo), 512);
pthread_mutex_init(&dev->bo_cache.lock, NULL); pthread_mutex_init(&dev->bo_cache.lock, NULL);

View File

@ -339,27 +339,16 @@ panfrost_new_texture(
unsigned bytes_per_pixel = util_format_get_blocksize(format); 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) bool manual_stride = (modifier == DRM_FORMAT_MOD_LINEAR)
&& panfrost_needs_explicit_stride(slices, width, && panfrost_needs_explicit_stride(slices, width,
first_level, last_level, bytes_per_pixel); 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) { pan_pack(out, MIDGARD_TEXTURE, cfg) {
cfg.width = u_minify(width, first_level); cfg.width = u_minify(width, first_level);
cfg.height = u_minify(height, first_level); cfg.height = u_minify(height, first_level);
cfg.depth = u_minify(depth, first_level); cfg.depth = u_minify(depth, first_level);
cfg.array_size = array_size; 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.dimension = dim;
cfg.texel_ordering = panfrost_modifier_to_layout(modifier); cfg.texel_ordering = panfrost_modifier_to_layout(modifier);
cfg.manual_stride = manual_stride; cfg.manual_stride = manual_stride;
@ -403,9 +392,6 @@ panfrost_new_texture_bifrost(
const struct util_format_description *desc = const struct util_format_description *desc =
util_format_description(format); util_format_description(format);
enum mali_format mali_format = panfrost_pipe_format_table[desc->format].hw;
assert(mali_format);
panfrost_emit_texture_payload( panfrost_emit_texture_payload(
payload->cpu, payload->cpu,
desc, desc,
@ -420,16 +406,9 @@ panfrost_new_texture_bifrost(
base, base,
slices); 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) { pan_pack(out, BIFROST_TEXTURE, cfg) {
cfg.dimension = dim; cfg.dimension = dim;
cfg.format = (mali_format << 12) | (srgb << 20); cfg.format = dev->formats[format].hw;
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.width = u_minify(width, first_level); cfg.width = u_minify(width, first_level);
cfg.height = u_minify(height, first_level); cfg.height = u_minify(height, first_level);

View File

@ -138,11 +138,6 @@ panfrost_texture_offset(struct panfrost_slice *slices, bool is_3d, unsigned cube
/* Formats */ /* Formats */
struct panfrost_format {
enum mali_format hw;
unsigned bind;
};
struct pan_blendable_format { struct pan_blendable_format {
enum mali_color_buffer_internal_format internal; enum mali_color_buffer_internal_format internal;
enum mali_mfbd_color_format writeback; enum mali_mfbd_color_format writeback;
@ -151,7 +146,8 @@ struct pan_blendable_format {
struct pan_blendable_format struct pan_blendable_format
panfrost_blend_format(enum pipe_format 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 enum mali_z_internal_format
panfrost_get_z_internal_format(enum pipe_format fmt); panfrost_get_z_internal_format(enum pipe_format fmt);
@ -162,6 +158,14 @@ panfrost_translate_swizzle_4(const unsigned char swizzle[4]);
void void
panfrost_invert_swizzle(const unsigned char *in, unsigned char *out); 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 static inline unsigned
panfrost_get_default_swizzle(unsigned components) panfrost_get_default_swizzle(unsigned components)
{ {