1 /* 2 * Copyright 2021 Alyssa Rosenzweig 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #include "agx_pack.h" 7 #include "layout.h" 8 9 #define AIL_ISA_FORMAT__ PIPE_FORMAT_NONE 10 11 #define AIL_FMT(pipe, channels_, type_, renderable_) \ 12 [PIPE_FORMAT_##pipe] = { \ 13 .channels = AGX_CHANNELS_##channels_, \ 14 .type = AGX_TEXTURE_TYPE_##type_, \ 15 .texturable = true, \ 16 .renderable = (enum pipe_format)AIL_ISA_FORMAT_##renderable_, \ 17 } 18 19 /* clang-format off */ 20 const struct ail_pixel_format_entry ail_pixel_format[PIPE_FORMAT_COUNT] = { 21 AIL_FMT(R5G6B5_UNORM, R5G6B5, UNORM, F16), 22 AIL_FMT(B5G6R5_UNORM, R5G6B5, UNORM, F16), 23 24 AIL_FMT(R5G5B5A1_UNORM, R5G5B5A1, UNORM, F16), 25 AIL_FMT(B5G5R5A1_UNORM, R5G5B5A1, UNORM, F16), 26 AIL_FMT(R5G5B5X1_UNORM, R5G5B5A1, UNORM, F16), 27 AIL_FMT(B5G5R5X1_UNORM, R5G5B5A1, UNORM, F16), 28 29 AIL_FMT(R4G4B4A4_UNORM, R4G4B4A4, UNORM, F16), 30 AIL_FMT(B4G4R4A4_UNORM, R4G4B4A4, UNORM, F16), 31 AIL_FMT(A4B4G4R4_UNORM, R4G4B4A4, UNORM, F16), 32 AIL_FMT(A4R4G4B4_UNORM, R4G4B4A4, UNORM, F16), 33 34 AIL_FMT(R8_UNORM, R8, UNORM, U8NORM), 35 AIL_FMT(R8G8_UNORM, R8G8, UNORM, U8NORM), 36 AIL_FMT(R8G8B8A8_UNORM, R8G8B8A8, UNORM, U8NORM), 37 AIL_FMT(A8R8G8B8_UNORM, R8G8B8A8, UNORM, U8NORM), 38 AIL_FMT(A8B8G8R8_UNORM, R8G8B8A8, UNORM, U8NORM), 39 AIL_FMT(B8G8R8A8_UNORM, R8G8B8A8, UNORM, U8NORM), 40 AIL_FMT(R8G8B8X8_UNORM, R8G8B8A8, UNORM, U8NORM), 41 AIL_FMT(X8R8G8B8_UNORM, R8G8B8A8, UNORM, U8NORM), 42 AIL_FMT(X8B8G8R8_UNORM, R8G8B8A8, UNORM, U8NORM), 43 AIL_FMT(B8G8R8X8_UNORM, R8G8B8A8, UNORM, U8NORM), 44 45 AIL_FMT(R16_UNORM, R16, UNORM, U16NORM), 46 AIL_FMT(R16G16_UNORM, R16G16, UNORM, U16NORM), 47 AIL_FMT(R16G16B16A16_UNORM, R16G16B16A16, UNORM, U16NORM), 48 AIL_FMT(R16_SNORM, R16, SNORM, S16NORM), 49 AIL_FMT(R16G16_SNORM, R16G16, SNORM, S16NORM), 50 AIL_FMT(R16G16B16A16_SNORM, R16G16B16A16, SNORM, S16NORM), 51 52 AIL_FMT(R8_SRGB, R8, UNORM, SRGBA8), 53 AIL_FMT(R8G8_SRGB, R8G8, UNORM, SRGBA8), 54 AIL_FMT(R8G8B8A8_SRGB, R8G8B8A8, UNORM, SRGBA8), 55 AIL_FMT(A8R8G8B8_SRGB, R8G8B8A8, UNORM, SRGBA8), 56 AIL_FMT(A8B8G8R8_SRGB, R8G8B8A8, UNORM, SRGBA8), 57 AIL_FMT(B8G8R8A8_SRGB, R8G8B8A8, UNORM, SRGBA8), 58 AIL_FMT(R8G8B8X8_SRGB, R8G8B8A8, UNORM, SRGBA8), 59 AIL_FMT(X8R8G8B8_SRGB, R8G8B8A8, UNORM, SRGBA8), 60 AIL_FMT(X8B8G8R8_SRGB, R8G8B8A8, UNORM, SRGBA8), 61 AIL_FMT(B8G8R8X8_SRGB, R8G8B8A8, UNORM, SRGBA8), 62 63 AIL_FMT(R8_SNORM, R8, SNORM, S8NORM), 64 AIL_FMT(R8G8_SNORM, R8G8, SNORM, S8NORM), 65 AIL_FMT(R8G8B8A8_SNORM, R8G8B8A8, SNORM, S8NORM), 66 AIL_FMT(A8R8G8B8_SNORM, R8G8B8A8, SNORM, S8NORM), 67 AIL_FMT(A8B8G8R8_SNORM, R8G8B8A8, SNORM, S8NORM), 68 AIL_FMT(B8G8R8A8_SNORM, R8G8B8A8, SNORM, S8NORM), 69 AIL_FMT(R8G8B8X8_SNORM, R8G8B8A8, SNORM, S8NORM), 70 AIL_FMT(X8R8G8B8_SNORM, R8G8B8A8, SNORM, S8NORM), 71 AIL_FMT(X8B8G8R8_SNORM, R8G8B8A8, SNORM, S8NORM), 72 AIL_FMT(B8G8R8X8_SNORM, R8G8B8A8, SNORM, S8NORM), 73 74 AIL_FMT(R16_FLOAT, R16, FLOAT, F16), 75 AIL_FMT(R16G16_FLOAT, R16G16, FLOAT, F16), 76 AIL_FMT(R16G16B16X16_FLOAT, R16G16B16A16, FLOAT, F16), 77 AIL_FMT(R16G16B16A16_FLOAT, R16G16B16A16, FLOAT, F16), 78 79 AIL_FMT(R32_FLOAT, R32, FLOAT, I32), 80 AIL_FMT(R32G32_FLOAT, R32G32, FLOAT, I32), 81 AIL_FMT(R32G32B32X32_FLOAT, R32G32B32A32, FLOAT, I32), 82 AIL_FMT(R32G32B32A32_FLOAT, R32G32B32A32, FLOAT, I32), 83 84 AIL_FMT(R8_UINT, R8, UINT, I8), 85 AIL_FMT(R8G8_UINT, R8G8, UINT, I8), 86 AIL_FMT(R8G8B8X8_UINT, R8G8B8A8, UINT, I8), 87 AIL_FMT(R8G8B8A8_UINT, R8G8B8A8, UINT, I8), 88 AIL_FMT(B8G8R8X8_UINT, R8G8B8A8, UINT, I8), 89 AIL_FMT(B8G8R8A8_UINT, R8G8B8A8, UINT, I8), 90 91 AIL_FMT(R16_UINT, R16, UINT, I16), 92 AIL_FMT(R16G16_UINT, R16G16, UINT, I16), 93 AIL_FMT(R16G16B16X16_UINT, R16G16B16A16, UINT, I16), 94 AIL_FMT(R16G16B16A16_UINT, R16G16B16A16, UINT, I16), 95 96 AIL_FMT(R32_UINT, R32, UINT, I32), 97 AIL_FMT(R32G32_UINT, R32G32, UINT, I32), 98 AIL_FMT(R32G32B32X32_UINT, R32G32B32A32, UINT, I32), 99 AIL_FMT(R32G32B32A32_UINT, R32G32B32A32, UINT, I32), 100 101 AIL_FMT(R8_SINT, R8, SINT, I8), 102 AIL_FMT(R8G8_SINT, R8G8, SINT, I8), 103 AIL_FMT(R8G8B8X8_SINT, R8G8B8A8, SINT, I8), 104 AIL_FMT(R8G8B8A8_SINT, R8G8B8A8, SINT, I8), 105 AIL_FMT(B8G8R8X8_SINT, R8G8B8A8, SINT, I8), 106 AIL_FMT(B8G8R8A8_SINT, R8G8B8A8, SINT, I8), 107 108 AIL_FMT(R16_SINT, R16, SINT, I16), 109 AIL_FMT(R16G16_SINT, R16G16, SINT, I16), 110 AIL_FMT(R16G16B16X16_SINT, R16G16B16A16, SINT, I16), 111 AIL_FMT(R16G16B16A16_SINT, R16G16B16A16, SINT, I16), 112 113 AIL_FMT(R32_SINT, R32, SINT, I32), 114 AIL_FMT(R32G32_SINT, R32G32, SINT, I32), 115 AIL_FMT(R32G32B32X32_SINT, R32G32B32A32, SINT, I32), 116 AIL_FMT(R32G32B32A32_SINT, R32G32B32A32, SINT, I32), 117 118 AIL_FMT(Z16_UNORM, R16, UNORM, _), 119 AIL_FMT(Z32_FLOAT, R32, FLOAT, _), 120 AIL_FMT(Z32_FLOAT_S8X24_UINT, R32, FLOAT, _), 121 AIL_FMT(S8_UINT, R8, UINT, _), 122 123 /* The stencil part of Z32F + S8 is just S8 */ 124 AIL_FMT(X32_S8X24_UINT, R8, UINT, _), 125 126 /* These must be lowered by u_transfer_helper to Z32F + S8 */ 127 AIL_FMT(Z24X8_UNORM, R32, FLOAT, _), 128 AIL_FMT(Z24_UNORM_S8_UINT, R32, FLOAT, _), 129 130 AIL_FMT(R10G10B10A2_UNORM, R10G10B10A2, UNORM, RGB10A2), 131 AIL_FMT(R10G10B10X2_UNORM, R10G10B10A2, UNORM, RGB10A2), 132 AIL_FMT(B10G10R10A2_UNORM, R10G10B10A2, UNORM, RGB10A2), 133 AIL_FMT(B10G10R10X2_UNORM, R10G10B10A2, UNORM, RGB10A2), 134 135 AIL_FMT(R10G10B10A2_UINT, R10G10B10A2, UINT, I16), 136 AIL_FMT(B10G10R10A2_UINT, R10G10B10A2, UINT, I16), 137 138 /* I don't see why this wouldn't be renderable, but it doesn't seem to work 139 * properly and it's not in Metal. 140 */ 141 AIL_FMT(R10G10B10A2_SINT, R10G10B10A2, SINT, _), 142 AIL_FMT(B10G10R10A2_SINT, R10G10B10A2, SINT, _), 143 144 AIL_FMT(R11G11B10_FLOAT, R11G11B10, FLOAT, RG11B10F), 145 AIL_FMT(R9G9B9E5_FLOAT, R9G9B9E5, FLOAT, RGB9E5), 146 147 /* These formats are emulated for texture buffers only */ 148 AIL_FMT(R32G32B32_FLOAT, R32G32B32_EMULATED, FLOAT, _), 149 AIL_FMT(R32G32B32_UINT, R32G32B32_EMULATED, UINT, _), 150 AIL_FMT(R32G32B32_SINT, R32G32B32_EMULATED, SINT, _), 151 152 /* Likewise, luminance/alpha/intensity formats are supported for texturing, 153 * because they are required for texture buffers in the compat profile and 154 * mesa/st is unable to emulate them for texture buffers. Our Gallium driver 155 * handles the swizzles appropriately, so we just need to plumb through the 156 * enums. 157 * 158 * If mesa/st grows emulation for these formats later, we can drop this. 159 */ 160 AIL_FMT(A8_UNORM, R8, UNORM, _), 161 AIL_FMT(A16_UNORM, R16, UNORM, _), 162 AIL_FMT(A8_SINT, R8, SINT, _), 163 AIL_FMT(A16_SINT, R16, SINT, _), 164 AIL_FMT(A32_SINT, R32, SINT, _), 165 AIL_FMT(A8_UINT, R8, UINT, _), 166 AIL_FMT(A16_UINT, R16, UINT, _), 167 AIL_FMT(A32_UINT, R32, UINT, _), 168 AIL_FMT(A16_FLOAT, R16, FLOAT, _), 169 AIL_FMT(A32_FLOAT, R32, FLOAT, _), 170 171 AIL_FMT(L8_UNORM, R8, UNORM, _), 172 AIL_FMT(L16_UNORM, R16, UNORM, _), 173 AIL_FMT(L8_SINT, R8, SINT, _), 174 AIL_FMT(L16_SINT, R16, SINT, _), 175 AIL_FMT(L32_SINT, R32, SINT, _), 176 AIL_FMT(L8_UINT, R8, UINT, _), 177 AIL_FMT(L16_UINT, R16, UINT, _), 178 AIL_FMT(L32_UINT, R32, UINT, _), 179 AIL_FMT(L16_FLOAT, R16, FLOAT, _), 180 AIL_FMT(L32_FLOAT, R32, FLOAT, _), 181 182 AIL_FMT(L8A8_UNORM, R8G8, UNORM, _), 183 AIL_FMT(L16A16_UNORM, R16G16, UNORM, _), 184 AIL_FMT(L8A8_SINT, R8G8, SINT, _), 185 AIL_FMT(L16A16_SINT, R16G16, SINT, _), 186 AIL_FMT(L32A32_SINT, R32G32, SINT, _), 187 AIL_FMT(L8A8_UINT, R8G8, UINT, _), 188 AIL_FMT(L16A16_UINT, R16G16, UINT, _), 189 AIL_FMT(L32A32_UINT, R32G32, UINT, _), 190 AIL_FMT(L16A16_FLOAT, R16G16, FLOAT, _), 191 AIL_FMT(L32A32_FLOAT, R32G32, FLOAT, _), 192 193 AIL_FMT(I8_UNORM, R8, UNORM, _), 194 AIL_FMT(I16_UNORM, R16, UNORM, _), 195 AIL_FMT(I8_SINT, R8, SINT, _), 196 AIL_FMT(I16_SINT, R16, SINT, _), 197 AIL_FMT(I32_SINT, R32, SINT, _), 198 AIL_FMT(I8_UINT, R8, UINT, _), 199 AIL_FMT(I16_UINT, R16, UINT, _), 200 AIL_FMT(I32_UINT, R32, UINT, _), 201 AIL_FMT(I16_FLOAT, R16, FLOAT, _), 202 AIL_FMT(I32_FLOAT, R32, FLOAT, _), 203 204 AIL_FMT(ETC1_RGB8, ETC2_RGB8, UNORM, _), 205 AIL_FMT(ETC2_RGB8, ETC2_RGB8, UNORM, _), 206 AIL_FMT(ETC2_SRGB8, ETC2_RGB8, UNORM, _), 207 AIL_FMT(ETC2_RGB8A1, ETC2_RGB8A1, UNORM, _), 208 AIL_FMT(ETC2_SRGB8A1, ETC2_RGB8A1, UNORM, _), 209 AIL_FMT(ETC2_RGBA8, ETC2_RGBA8, UNORM, _), 210 AIL_FMT(ETC2_SRGBA8, ETC2_RGBA8, UNORM, _), 211 AIL_FMT(ETC2_R11_UNORM, EAC_R11, UNORM, _), 212 AIL_FMT(ETC2_R11_SNORM, EAC_R11, SNORM, _), 213 AIL_FMT(ETC2_RG11_UNORM, EAC_RG11, UNORM, _), 214 AIL_FMT(ETC2_RG11_SNORM, EAC_RG11, SNORM, _), 215 216 AIL_FMT(ASTC_4x4, ASTC_4X4, UNORM, _), 217 AIL_FMT(ASTC_5x4, ASTC_5X4, UNORM, _), 218 AIL_FMT(ASTC_5x5, ASTC_5X5, UNORM, _), 219 AIL_FMT(ASTC_6x5, ASTC_6X5, UNORM, _), 220 AIL_FMT(ASTC_6x6, ASTC_6X6, UNORM, _), 221 AIL_FMT(ASTC_8x5, ASTC_8X5, UNORM, _), 222 AIL_FMT(ASTC_8x6, ASTC_8X6, UNORM, _), 223 AIL_FMT(ASTC_8x8, ASTC_8X8, UNORM, _), 224 AIL_FMT(ASTC_10x5, ASTC_10X5, UNORM, _), 225 AIL_FMT(ASTC_10x6, ASTC_10X6, UNORM, _), 226 AIL_FMT(ASTC_10x8, ASTC_10X8, UNORM, _), 227 AIL_FMT(ASTC_10x10, ASTC_10X10, UNORM, _), 228 AIL_FMT(ASTC_12x10, ASTC_12X10, UNORM, _), 229 AIL_FMT(ASTC_12x12, ASTC_12X12, UNORM, _), 230 231 AIL_FMT(ASTC_4x4_SRGB, ASTC_4X4, UNORM, _), 232 AIL_FMT(ASTC_5x4_SRGB, ASTC_5X4, UNORM, _), 233 AIL_FMT(ASTC_5x5_SRGB, ASTC_5X5, UNORM, _), 234 AIL_FMT(ASTC_6x5_SRGB, ASTC_6X5, UNORM, _), 235 AIL_FMT(ASTC_6x6_SRGB, ASTC_6X6, UNORM, _), 236 AIL_FMT(ASTC_8x5_SRGB, ASTC_8X5, UNORM, _), 237 AIL_FMT(ASTC_8x6_SRGB, ASTC_8X6, UNORM, _), 238 AIL_FMT(ASTC_8x8_SRGB, ASTC_8X8, UNORM, _), 239 AIL_FMT(ASTC_10x5_SRGB, ASTC_10X5, UNORM, _), 240 AIL_FMT(ASTC_10x6_SRGB, ASTC_10X6, UNORM, _), 241 AIL_FMT(ASTC_10x8_SRGB, ASTC_10X8, UNORM, _), 242 AIL_FMT(ASTC_10x10_SRGB, ASTC_10X10, UNORM, _), 243 AIL_FMT(ASTC_12x10_SRGB, ASTC_12X10, UNORM, _), 244 AIL_FMT(ASTC_12x12_SRGB, ASTC_12X12, UNORM, _), 245 246 AIL_FMT(DXT1_RGB, BC1, UNORM, _), 247 AIL_FMT(DXT1_RGBA, BC1, UNORM, _), 248 AIL_FMT(DXT1_SRGB, BC1, UNORM, _), 249 AIL_FMT(DXT1_SRGBA, BC1, UNORM, _), 250 AIL_FMT(DXT3_RGBA, BC2, UNORM, _), 251 AIL_FMT(DXT3_SRGBA, BC2, UNORM, _), 252 AIL_FMT(DXT5_RGBA, BC3, UNORM, _), 253 AIL_FMT(DXT5_SRGBA, BC3, UNORM, _), 254 AIL_FMT(RGTC1_UNORM, BC4, UNORM, _), 255 AIL_FMT(RGTC1_SNORM, BC4, SNORM, _), 256 AIL_FMT(RGTC2_UNORM, BC5, UNORM, _), 257 AIL_FMT(RGTC2_SNORM, BC5, SNORM, _), 258 AIL_FMT(BPTC_RGB_FLOAT, BC6H, FLOAT, _), 259 AIL_FMT(BPTC_RGB_UFLOAT, BC6H_UFLOAT, FLOAT, _), 260 AIL_FMT(BPTC_RGBA_UNORM, BC7, UNORM, _), 261 AIL_FMT(BPTC_SRGBA, BC7, UNORM, _), 262 }; 263 /* clang-format on */ 264