formats.h revision 848b8605
1/* 2 * Mesa 3-D graphics library 3 * 4 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 5 * Copyright (c) 2008-2009 VMware, Inc. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 * OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 26/* 27 * Authors: 28 * Brian Paul 29 */ 30 31 32#ifndef FORMATS_H 33#define FORMATS_H 34 35 36#include <GL/gl.h> 37#include <stdbool.h> 38#include <stdint.h> 39 40 41#ifdef __cplusplus 42extern "C" { 43#endif 44 45 46/** 47 * OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type 48 * for GL_LUMINANCE4_ALPHA4. 49 */ 50#define MESA_UNSIGNED_BYTE_4_4 (GL_UNSIGNED_BYTE<<1) 51 52 53/** 54 * Max number of bytes for any non-compressed pixel format below, or for 55 * intermediate pixel storage in Mesa. This should never be less than 56 * 16. Maybe 32 someday? 57 */ 58#define MAX_PIXEL_BYTES 16 59 60/** 61 * Specifies the layout of a pixel format. See the MESA_FORMAT 62 * documentation below. 63 */ 64enum mesa_format_layout { 65 MESA_FORMAT_LAYOUT_ARRAY, 66 MESA_FORMAT_LAYOUT_PACKED, 67 MESA_FORMAT_LAYOUT_OTHER, 68}; 69 70/** 71 * An enum representing different possible swizzling values. This is used 72 * to interpret the output of _mesa_get_format_swizzle 73 */ 74enum { 75 MESA_FORMAT_SWIZZLE_X = 0, 76 MESA_FORMAT_SWIZZLE_Y = 1, 77 MESA_FORMAT_SWIZZLE_Z = 2, 78 MESA_FORMAT_SWIZZLE_W = 3, 79 MESA_FORMAT_SWIZZLE_ZERO = 4, 80 MESA_FORMAT_SWIZZLE_ONE = 5, 81 MESA_FORMAT_SWIZZLE_NONE = 6, 82}; 83 84/** 85 * Mesa texture/renderbuffer image formats. 86 */ 87typedef enum 88{ 89 MESA_FORMAT_NONE = 0, 90 91 /** 92 * \name Basic hardware formats 93 * 94 * The mesa format name specification is as follows: 95 * 96 * There shall be 3 naming format base types: those for component array 97 * formats (type A); those for compressed formats (type C); and those for 98 * packed component formats (type P). With type A formats, color component 99 * order does not change with endianess. Each format name shall begin with 100 * MESA_FORMAT_, followed by a component label (from the Component Label 101 * list below) for each component in the order that the component(s) occur 102 * in the format, except for non-linear color formats where the first 103 * letter shall be 'S'. For type P formats, each component label is 104 * followed by the number of bits that represent it in the fundamental 105 * data type used by the format. 106 * 107 * Following the listing of the component labels shall be an underscore; a 108 * compression type followed by an underscore for Type C formats only; a 109 * storage type from the list below; and a bit with for type A formats, 110 * which is the bit width for each array element. 111 * 112 * 113 * ---------- Format Base Type A: Array ---------- 114 * MESA_FORMAT_[component list]_[storage type][array element bit width] 115 * 116 * examples: 117 * MESA_FORMAT_A_SNORM8 - uchar[i] = A 118 * MESA_FORMAT_RGBA_16 - ushort[i * 4 + 0] = R, ushort[i * 4 + 1] = G, 119 * ushort[i * 4 + 2] = B, ushort[i * 4 + 3] = A 120 * MESA_FORMAT_Z_UNORM32 - float[i] = Z 121 * 122 * 123 * 124 * ---------- Format Base Type C: Compressed ---------- 125 * MESA_FORMAT_[component list*][_*][compression type][storage type*] 126 * * where required 127 * 128 * examples: 129 * MESA_FORMAT_RGB_ETC1 130 * MESA_FORMAT_RGBA_ETC2 131 * MESA_FORMAT_LATC1_UNORM 132 * MESA_FORMAT_RGBA_FXT1 133 * 134 * 135 * 136 * ---------- Format Base Type P: Packed ---------- 137 * MESA_FORMAT_[[component list,bit width][storage type*][_]][_][storage type**] 138 * * when type differs between component 139 * ** when type applies to all components 140 * 141 * examples: msb <------ TEXEL BITS -----------> lsb 142 * MESA_FORMAT_A8B8G8R8_UNORM, AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR 143 * MESA_FORMAT_R5G6B5_UNORM RRRR RGGG GGGB BBBB 144 * MESA_FORMAT_B4G4R4X4_UNORM BBBB GGGG RRRR XXXX 145 * MESA_FORMAT_Z32_FLOAT_S8X24_UINT 146 * MESA_FORMAT_R10G10B10A2_UINT 147 * MESA_FORMAT_R9G9B9E5_FLOAT 148 * 149 * 150 * 151 * ---------- Component Labels: ---------- 152 * A - Alpha 153 * B - Blue 154 * DU - Delta U 155 * DV - Delta V 156 * E - Shared Exponent 157 * G - Green 158 * I - Intensity 159 * L - Luminance 160 * R - Red 161 * S - Stencil (when not followed by RGB or RGBA) 162 * U - Chrominance 163 * V - Chrominance 164 * Y - Luma 165 * X - Packing bits 166 * Z - Depth 167 * 168 * 169 * 170 * ---------- Type C Compression Types: ---------- 171 * DXT1 - Color component labels shall be given 172 * DXT3 - Color component labels shall be given 173 * DXT5 - Color component labels shall be given 174 * ETC1 - No other information required 175 * ETC2 - No other information required 176 * FXT1 - Color component labels shall be given 177 * FXT3 - Color component labels shall be given 178 * LATC1 - Fundamental data type shall be given 179 * LATC2 - Fundamental data type shall be given 180 * RGTC1 - Color component labels and data type shall be given 181 * RGTC2 - Color component labels and data type shall be given 182 * 183 * 184 * 185 * ---------- Storage Types: ---------- 186 * FLOAT 187 * SINT 188 * UINT 189 * SNORM 190 * UNORM 191 * SRGB - RGB components, or L are UNORMs in sRGB color space. 192 * Alpha, if present is linear. 193 * 194 */ 195 196 /* Packed unorm formats */ /* msb <------ TEXEL BITS -----------> lsb */ 197 /* ---- ---- ---- ---- ---- ---- ---- ---- */ 198 MESA_FORMAT_A8B8G8R8_UNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ 199 MESA_FORMAT_X8B8G8R8_UNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ 200 MESA_FORMAT_R8G8B8A8_UNORM, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ 201 MESA_FORMAT_R8G8B8X8_UNORM, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ 202 MESA_FORMAT_B8G8R8A8_UNORM, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ 203 MESA_FORMAT_B8G8R8X8_UNORM, /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */ 204 MESA_FORMAT_A8R8G8B8_UNORM, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ 205 MESA_FORMAT_X8R8G8B8_UNORM, /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */ 206 MESA_FORMAT_L16A16_UNORM, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ 207 MESA_FORMAT_A16L16_UNORM, /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */ 208 MESA_FORMAT_B5G6R5_UNORM, /* RRRR RGGG GGGB BBBB */ 209 MESA_FORMAT_R5G6B5_UNORM, /* BBBB BGGG GGGR RRRR */ 210 MESA_FORMAT_B4G4R4A4_UNORM, /* AAAA RRRR GGGG BBBB */ 211 MESA_FORMAT_B4G4R4X4_UNORM, /* xxxx RRRR GGGG BBBB */ 212 MESA_FORMAT_A4R4G4B4_UNORM, /* BBBB GGGG RRRR AAAA */ 213 MESA_FORMAT_A1B5G5R5_UNORM, /* RRRR RGGG GGBB BBBA */ 214 MESA_FORMAT_B5G5R5A1_UNORM, /* ARRR RRGG GGGB BBBB */ 215 MESA_FORMAT_B5G5R5X1_UNORM, /* xRRR RRGG GGGB BBBB */ 216 MESA_FORMAT_A1R5G5B5_UNORM, /* BBBB BGGG GGRR RRRA */ 217 MESA_FORMAT_L8A8_UNORM, /* AAAA AAAA LLLL LLLL */ 218 MESA_FORMAT_A8L8_UNORM, /* LLLL LLLL AAAA AAAA */ 219 MESA_FORMAT_R8G8_UNORM, /* GGGG GGGG RRRR RRRR */ 220 MESA_FORMAT_G8R8_UNORM, /* RRRR RRRR GGGG GGGG */ 221 MESA_FORMAT_L4A4_UNORM, /* AAAA LLLL */ 222 MESA_FORMAT_B2G3R3_UNORM, /* RRRG GGBB */ 223 224 MESA_FORMAT_R16G16_UNORM, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ 225 MESA_FORMAT_G16R16_UNORM, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ 226 MESA_FORMAT_B10G10R10A2_UNORM,/* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ 227 MESA_FORMAT_B10G10R10X2_UNORM,/* xxRR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ 228 MESA_FORMAT_R10G10B10A2_UNORM,/* AABB BBBB BBBB GGGG GGGG GGRR RRRR RRRR */ 229 230 MESA_FORMAT_S8_UINT_Z24_UNORM,/* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ 231 MESA_FORMAT_X8_UINT_Z24_UNORM,/* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */ 232 MESA_FORMAT_Z24_UNORM_S8_UINT,/* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ 233 MESA_FORMAT_Z24_UNORM_X8_UINT,/* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ 234 235 MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ 236 MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ 237 238 /* Array unorm formats */ 239 MESA_FORMAT_A_UNORM8, /* ubyte[i] = A */ 240 MESA_FORMAT_A_UNORM16, /* ushort[i] = A */ 241 MESA_FORMAT_L_UNORM8, /* ubyte[i] = L */ 242 MESA_FORMAT_L_UNORM16, /* ushort[i] = L */ 243 MESA_FORMAT_I_UNORM8, /* ubyte[i] = I */ 244 MESA_FORMAT_I_UNORM16, /* ushort[i] = I */ 245 MESA_FORMAT_R_UNORM8, /* ubyte[i] = R */ 246 MESA_FORMAT_R_UNORM16, /* ushort[i] = R */ 247 MESA_FORMAT_BGR_UNORM8, /* ubyte[i*3] = B, [i*3+1] = G, [i*3+2] = R */ 248 MESA_FORMAT_RGB_UNORM8, /* ubyte[i*3] = R, [i*3+1] = G, [i*3+2] = B */ 249 MESA_FORMAT_RGBA_UNORM16, /* ushort[i] = R, [1] = G, [2] = B, [3] = A */ 250 MESA_FORMAT_RGBX_UNORM16, 251 252 MESA_FORMAT_Z_UNORM16, /* ushort[i] = Z */ 253 MESA_FORMAT_Z_UNORM32, /* uint[i] = Z */ 254 MESA_FORMAT_S_UINT8, /* ubyte[i] = S */ 255 256 /* Packed signed/normalized formats */ 257 /* msb <------ TEXEL BITS -----------> lsb */ 258 /* ---- ---- ---- ---- ---- ---- ---- ---- */ 259 MESA_FORMAT_A8B8G8R8_SNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ 260 MESA_FORMAT_X8B8G8R8_SNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ 261 MESA_FORMAT_R8G8B8A8_SNORM, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ 262 MESA_FORMAT_R8G8B8X8_SNORM, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ 263 MESA_FORMAT_R16G16_SNORM, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ 264 MESA_FORMAT_G16R16_SNORM, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ 265 MESA_FORMAT_R8G8_SNORM, /* GGGG GGGG RRRR RRRR */ 266 MESA_FORMAT_G8R8_SNORM, /* RRRR RRRR GGGG GGGG */ 267 MESA_FORMAT_L8A8_SNORM, /* AAAA AAAA LLLL LLLL */ 268 269 /* Array signed/normalized formats */ 270 MESA_FORMAT_A_SNORM8, /* byte[i] = A */ 271 MESA_FORMAT_A_SNORM16, /* short[i] = A */ 272 MESA_FORMAT_L_SNORM8, /* byte[i] = L */ 273 MESA_FORMAT_L_SNORM16, /* short[i] = L */ 274 MESA_FORMAT_I_SNORM8, /* byte[i] = I */ 275 MESA_FORMAT_I_SNORM16, /* short[i] = I */ 276 MESA_FORMAT_R_SNORM8, /* byte[i] = R */ 277 MESA_FORMAT_R_SNORM16, /* short[i] = R */ 278 MESA_FORMAT_LA_SNORM16, /* short[i * 2] = L, [i * 2 + 1] = A */ 279 MESA_FORMAT_RGB_SNORM16, /* short[i*3] = R, [i*3+1] = G, [i*3+2] = B */ 280 MESA_FORMAT_RGBA_SNORM16, /* ... */ 281 MESA_FORMAT_RGBX_SNORM16, /* ... */ 282 283 /* Packed sRGB formats */ 284 MESA_FORMAT_A8B8G8R8_SRGB, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ 285 MESA_FORMAT_B8G8R8A8_SRGB, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ 286 MESA_FORMAT_B8G8R8X8_SRGB, /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */ 287 MESA_FORMAT_R8G8B8A8_SRGB, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ 288 MESA_FORMAT_R8G8B8X8_SRGB, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ 289 MESA_FORMAT_L8A8_SRGB, /* AAAA AAAA LLLL LLLL */ 290 291 /* Array sRGB formats */ 292 MESA_FORMAT_L_SRGB8, /* ubyte[i] = L */ 293 MESA_FORMAT_BGR_SRGB8, /* ubyte[i*3] = B, [i*3+1] = G, [i*3+2] = R */ 294 295 /* Packed float formats */ 296 MESA_FORMAT_R9G9B9E5_FLOAT, 297 MESA_FORMAT_R11G11B10_FLOAT, /* BBBB BBBB BBGG GGGG GGGG GRRR RRRR RRRR */ 298 MESA_FORMAT_Z32_FLOAT_S8X24_UINT, /* (float, x24s8) */ 299 300 /* Array float formats */ 301 MESA_FORMAT_A_FLOAT16, 302 MESA_FORMAT_A_FLOAT32, 303 MESA_FORMAT_L_FLOAT16, 304 MESA_FORMAT_L_FLOAT32, 305 MESA_FORMAT_LA_FLOAT16, 306 MESA_FORMAT_LA_FLOAT32, 307 MESA_FORMAT_I_FLOAT16, 308 MESA_FORMAT_I_FLOAT32, 309 MESA_FORMAT_R_FLOAT16, 310 MESA_FORMAT_R_FLOAT32, 311 MESA_FORMAT_RG_FLOAT16, 312 MESA_FORMAT_RG_FLOAT32, 313 MESA_FORMAT_RGB_FLOAT16, 314 MESA_FORMAT_RGB_FLOAT32, 315 MESA_FORMAT_RGBA_FLOAT16, 316 MESA_FORMAT_RGBA_FLOAT32, /* float[0] = R, [1] = G, [2] = B, [3] = A */ 317 MESA_FORMAT_RGBX_FLOAT16, 318 MESA_FORMAT_RGBX_FLOAT32, 319 MESA_FORMAT_Z_FLOAT32, 320 321 /* Packed signed/unsigned non-normalized integer formats */ 322 MESA_FORMAT_B10G10R10A2_UINT, /* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ 323 MESA_FORMAT_R10G10B10A2_UINT, /* AABB BBBB BBBB GGGG GGGG GGRR RRRR RRRR */ 324 325 /* Array signed/unsigned non-normalized integer formats */ 326 MESA_FORMAT_A_UINT8, 327 MESA_FORMAT_A_UINT16, 328 MESA_FORMAT_A_UINT32, 329 MESA_FORMAT_A_SINT8, 330 MESA_FORMAT_A_SINT16, 331 MESA_FORMAT_A_SINT32, 332 333 MESA_FORMAT_I_UINT8, 334 MESA_FORMAT_I_UINT16, 335 MESA_FORMAT_I_UINT32, 336 MESA_FORMAT_I_SINT8, 337 MESA_FORMAT_I_SINT16, 338 MESA_FORMAT_I_SINT32, 339 340 MESA_FORMAT_L_UINT8, 341 MESA_FORMAT_L_UINT16, 342 MESA_FORMAT_L_UINT32, 343 MESA_FORMAT_L_SINT8, 344 MESA_FORMAT_L_SINT16, 345 MESA_FORMAT_L_SINT32, 346 347 MESA_FORMAT_LA_UINT8, 348 MESA_FORMAT_LA_UINT16, 349 MESA_FORMAT_LA_UINT32, 350 MESA_FORMAT_LA_SINT8, 351 MESA_FORMAT_LA_SINT16, 352 MESA_FORMAT_LA_SINT32, 353 354 MESA_FORMAT_R_UINT8, 355 MESA_FORMAT_R_UINT16, 356 MESA_FORMAT_R_UINT32, 357 MESA_FORMAT_R_SINT8, 358 MESA_FORMAT_R_SINT16, 359 MESA_FORMAT_R_SINT32, 360 361 MESA_FORMAT_RG_UINT8, 362 MESA_FORMAT_RG_UINT16, 363 MESA_FORMAT_RG_UINT32, 364 MESA_FORMAT_RG_SINT8, 365 MESA_FORMAT_RG_SINT16, 366 MESA_FORMAT_RG_SINT32, 367 368 MESA_FORMAT_RGB_UINT8, 369 MESA_FORMAT_RGB_UINT16, 370 MESA_FORMAT_RGB_UINT32, 371 MESA_FORMAT_RGB_SINT8, 372 MESA_FORMAT_RGB_SINT16, 373 MESA_FORMAT_RGB_SINT32, 374 375 MESA_FORMAT_RGBA_UINT8, 376 MESA_FORMAT_RGBA_UINT16, 377 MESA_FORMAT_RGBA_UINT32, 378 MESA_FORMAT_RGBA_SINT8, 379 MESA_FORMAT_RGBA_SINT16, 380 MESA_FORMAT_RGBA_SINT32, 381 382 MESA_FORMAT_RGBX_UINT8, 383 MESA_FORMAT_RGBX_UINT16, 384 MESA_FORMAT_RGBX_UINT32, 385 MESA_FORMAT_RGBX_SINT8, 386 MESA_FORMAT_RGBX_SINT16, 387 MESA_FORMAT_RGBX_SINT32, 388 389 /* DXT compressed formats */ 390 MESA_FORMAT_RGB_DXT1, 391 MESA_FORMAT_RGBA_DXT1, 392 MESA_FORMAT_RGBA_DXT3, 393 MESA_FORMAT_RGBA_DXT5, 394 395 /* DXT sRGB compressed formats */ 396 MESA_FORMAT_SRGB_DXT1, 397 MESA_FORMAT_SRGBA_DXT1, 398 MESA_FORMAT_SRGBA_DXT3, 399 MESA_FORMAT_SRGBA_DXT5, 400 401 /* FXT1 compressed formats */ 402 MESA_FORMAT_RGB_FXT1, 403 MESA_FORMAT_RGBA_FXT1, 404 405 /* RGTC compressed formats */ 406 MESA_FORMAT_R_RGTC1_UNORM, 407 MESA_FORMAT_R_RGTC1_SNORM, 408 MESA_FORMAT_RG_RGTC2_UNORM, 409 MESA_FORMAT_RG_RGTC2_SNORM, 410 411 /* LATC1/2 compressed formats */ 412 MESA_FORMAT_L_LATC1_UNORM, 413 MESA_FORMAT_L_LATC1_SNORM, 414 MESA_FORMAT_LA_LATC2_UNORM, 415 MESA_FORMAT_LA_LATC2_SNORM, 416 417 /* ETC1/2 compressed formats */ 418 MESA_FORMAT_ETC1_RGB8, 419 MESA_FORMAT_ETC2_RGB8, 420 MESA_FORMAT_ETC2_SRGB8, 421 MESA_FORMAT_ETC2_RGBA8_EAC, 422 MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC, 423 MESA_FORMAT_ETC2_R11_EAC, 424 MESA_FORMAT_ETC2_RG11_EAC, 425 MESA_FORMAT_ETC2_SIGNED_R11_EAC, 426 MESA_FORMAT_ETC2_SIGNED_RG11_EAC, 427 MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1, 428 MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1, 429 430 /* BPTC compressed formats */ 431 MESA_FORMAT_BPTC_RGBA_UNORM, 432 MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM, 433 MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT, 434 MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT, 435 436 MESA_FORMAT_COUNT 437} mesa_format; 438 439 440extern const char * 441_mesa_get_format_name(mesa_format format); 442 443extern GLint 444_mesa_get_format_bytes(mesa_format format); 445 446extern GLint 447_mesa_get_format_bits(mesa_format format, GLenum pname); 448 449extern GLuint 450_mesa_get_format_max_bits(mesa_format format); 451 452extern enum mesa_format_layout 453_mesa_get_format_layout(mesa_format format); 454 455extern GLenum 456_mesa_get_format_datatype(mesa_format format); 457 458extern GLenum 459_mesa_get_format_base_format(mesa_format format); 460 461extern void 462_mesa_get_format_block_size(mesa_format format, GLuint *bw, GLuint *bh); 463 464extern void 465_mesa_get_format_swizzle(mesa_format format, uint8_t swizzle_out[4]); 466 467extern GLboolean 468_mesa_is_format_compressed(mesa_format format); 469 470extern GLboolean 471_mesa_is_format_packed_depth_stencil(mesa_format format); 472 473extern GLboolean 474_mesa_is_format_integer_color(mesa_format format); 475 476extern GLboolean 477_mesa_is_format_unsigned(mesa_format format); 478 479extern GLboolean 480_mesa_is_format_signed(mesa_format format); 481 482extern GLboolean 483_mesa_is_format_integer(mesa_format format); 484 485extern bool 486_mesa_is_format_etc2(mesa_format format); 487 488extern GLenum 489_mesa_get_format_color_encoding(mesa_format format); 490 491extern GLuint 492_mesa_format_image_size(mesa_format format, GLsizei width, 493 GLsizei height, GLsizei depth); 494 495extern uint64_t 496_mesa_format_image_size64(mesa_format format, GLsizei width, 497 GLsizei height, GLsizei depth); 498 499extern GLint 500_mesa_format_row_stride(mesa_format format, GLsizei width); 501 502extern void 503_mesa_format_to_type_and_comps(mesa_format format, 504 GLenum *datatype, GLuint *comps); 505 506extern void 507_mesa_test_formats(void); 508 509extern mesa_format 510_mesa_get_srgb_format_linear(mesa_format format); 511 512extern mesa_format 513_mesa_get_uncompressed_format(mesa_format format); 514 515extern GLuint 516_mesa_format_num_components(mesa_format format); 517 518extern bool 519_mesa_format_has_color_component(mesa_format format, int component); 520 521GLboolean 522_mesa_format_matches_format_and_type(mesa_format mesa_format, 523 GLenum format, GLenum type, 524 GLboolean swapBytes); 525 526#ifdef __cplusplus 527} 528#endif 529 530#endif /* FORMATS_H */ 531