Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.  
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43.  
  44. /* OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type
  45.  * for GL_LUMINANCE4_ALPHA4. */
  46. #define MESA_UNSIGNED_BYTE_4_4 (GL_UNSIGNED_BYTE<<1)
  47.  
  48.  
  49. /**
  50.  * Max number of bytes for any non-compressed pixel format below, or for
  51.  * intermediate pixel storage in Mesa.  This should never be less than
  52.  * 16.  Maybe 32 someday?
  53.  */
  54. #define MAX_PIXEL_BYTES 16
  55.  
  56.  
  57. /**
  58.  * Mesa texture/renderbuffer image formats.
  59.  */
  60. typedef enum
  61. {
  62.    MESA_FORMAT_NONE = 0,
  63.  
  64.    /**
  65.     * \name Basic hardware formats
  66.     */
  67.    /*@{*/
  68.                                 /* msb <------ TEXEL BITS -----------> lsb */
  69.                                 /* ---- ---- ---- ---- ---- ---- ---- ---- */
  70.    MESA_FORMAT_RGBA8888,        /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
  71.    MESA_FORMAT_RGBA8888_REV,    /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
  72.    MESA_FORMAT_ARGB8888,        /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
  73.    MESA_FORMAT_ARGB8888_REV,    /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */
  74.    MESA_FORMAT_RGBX8888,        /* RRRR RRRR GGGG GGGG BBBB BBBB XXXX XXXX */
  75.    MESA_FORMAT_RGBX8888_REV,    /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
  76.    MESA_FORMAT_XRGB8888,        /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */
  77.    MESA_FORMAT_XRGB8888_REV,    /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */
  78.    MESA_FORMAT_RGB888,          /*           RRRR RRRR GGGG GGGG BBBB BBBB */
  79.    MESA_FORMAT_BGR888,          /*           BBBB BBBB GGGG GGGG RRRR RRRR */
  80.    MESA_FORMAT_RGB565,          /*                     RRRR RGGG GGGB BBBB */
  81.    MESA_FORMAT_RGB565_REV,      /*                     GGGB BBBB RRRR RGGG */
  82.    MESA_FORMAT_ARGB4444,        /*                     AAAA RRRR GGGG BBBB */
  83.    MESA_FORMAT_ARGB4444_REV,    /*                     GGGG BBBB AAAA RRRR */
  84.    MESA_FORMAT_RGBA5551,        /*                     RRRR RGGG GGBB BBBA */
  85.    MESA_FORMAT_ARGB1555,        /*                     ARRR RRGG GGGB BBBB */
  86.    MESA_FORMAT_ARGB1555_REV,    /*                     GGGB BBBB ARRR RRGG */
  87.    MESA_FORMAT_AL44,            /*                               AAAA LLLL */
  88.    MESA_FORMAT_AL88,            /*                     AAAA AAAA LLLL LLLL */
  89.    MESA_FORMAT_AL88_REV,        /*                     LLLL LLLL AAAA AAAA */
  90.    MESA_FORMAT_AL1616,          /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
  91.    MESA_FORMAT_AL1616_REV,      /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */
  92.    MESA_FORMAT_RGB332,          /*                               RRRG GGBB */
  93.    MESA_FORMAT_A8,              /*                               AAAA AAAA */
  94.    MESA_FORMAT_A16,             /*                     AAAA AAAA AAAA AAAA */
  95.    MESA_FORMAT_L8,              /*                               LLLL LLLL */
  96.    MESA_FORMAT_L16,             /*                     LLLL LLLL LLLL LLLL */
  97.    MESA_FORMAT_I8,              /*                               IIII IIII */
  98.    MESA_FORMAT_I16,             /*                     IIII IIII IIII IIII */
  99.    MESA_FORMAT_YCBCR,           /*                     YYYY YYYY UorV UorV */
  100.    MESA_FORMAT_YCBCR_REV,       /*                     UorV UorV YYYY YYYY */
  101.    MESA_FORMAT_R8,              /*                               RRRR RRRR */
  102.    MESA_FORMAT_GR88,            /*                     GGGG GGGG RRRR RRRR */
  103.    MESA_FORMAT_RG88,            /*                     RRRR RRRR GGGG GGGG */
  104.    MESA_FORMAT_R16,             /*                     RRRR RRRR RRRR RRRR */
  105.    MESA_FORMAT_GR1616,          /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */
  106.    MESA_FORMAT_RG1616,          /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */
  107.    MESA_FORMAT_ARGB2101010,     /* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */
  108.    MESA_FORMAT_Z24_S8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */
  109.    MESA_FORMAT_S8_Z24,          /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  110.    MESA_FORMAT_Z16,             /*                     ZZZZ ZZZZ ZZZZ ZZZZ */
  111.    MESA_FORMAT_X8_Z24,          /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  112.    MESA_FORMAT_Z24_X8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */
  113.    MESA_FORMAT_Z32,             /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  114.    MESA_FORMAT_S8,              /*                               SSSS SSSS */
  115.    /*@}*/
  116.  
  117.    /**
  118.     * \name 8-bit/channel sRGB formats
  119.     */
  120.    /*@{*/
  121.    MESA_FORMAT_SRGB8,           /*           RRRR RRRR GGGG GGGG BBBB BBBB */
  122.    MESA_FORMAT_SRGBA8,          /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
  123.    MESA_FORMAT_SARGB8,          /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
  124.    MESA_FORMAT_SL8,             /*                               LLLL LLLL */
  125.    MESA_FORMAT_SLA8,            /*                     AAAA AAAA LLLL LLLL */
  126.    MESA_FORMAT_SRGB_DXT1,
  127.    MESA_FORMAT_SRGBA_DXT1,
  128.    MESA_FORMAT_SRGBA_DXT3,
  129.    MESA_FORMAT_SRGBA_DXT5,
  130.    /*@}*/
  131.  
  132.    /**
  133.     * \name Compressed texture formats.
  134.     */
  135.    /*@{*/
  136.    MESA_FORMAT_RGB_FXT1,
  137.    MESA_FORMAT_RGBA_FXT1,
  138.    MESA_FORMAT_RGB_DXT1,
  139.    MESA_FORMAT_RGBA_DXT1,
  140.    MESA_FORMAT_RGBA_DXT3,
  141.    MESA_FORMAT_RGBA_DXT5,
  142.    /*@}*/
  143.  
  144.    /**
  145.     * \name Floating point texture formats.
  146.     */
  147.    /*@{*/
  148.    MESA_FORMAT_RGBA_FLOAT32,
  149.    MESA_FORMAT_RGBA_FLOAT16,
  150.    MESA_FORMAT_RGB_FLOAT32,
  151.    MESA_FORMAT_RGB_FLOAT16,
  152.    MESA_FORMAT_ALPHA_FLOAT32,
  153.    MESA_FORMAT_ALPHA_FLOAT16,
  154.    MESA_FORMAT_LUMINANCE_FLOAT32,
  155.    MESA_FORMAT_LUMINANCE_FLOAT16,
  156.    MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
  157.    MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
  158.    MESA_FORMAT_INTENSITY_FLOAT32,
  159.    MESA_FORMAT_INTENSITY_FLOAT16,
  160.    MESA_FORMAT_R_FLOAT32,
  161.    MESA_FORMAT_R_FLOAT16,
  162.    MESA_FORMAT_RG_FLOAT32,
  163.    MESA_FORMAT_RG_FLOAT16,
  164.    /*@}*/
  165.  
  166.    /**
  167.     * \name Non-normalized signed integer formats.
  168.     * XXX Note: these are just stand-ins for some better hardware
  169.     * formats TBD such as BGRA or ARGB.
  170.     */
  171.    MESA_FORMAT_ALPHA_UINT8,
  172.    MESA_FORMAT_ALPHA_UINT16,
  173.    MESA_FORMAT_ALPHA_UINT32,
  174.    MESA_FORMAT_ALPHA_INT8,
  175.    MESA_FORMAT_ALPHA_INT16,
  176.    MESA_FORMAT_ALPHA_INT32,
  177.  
  178.    MESA_FORMAT_INTENSITY_UINT8,
  179.    MESA_FORMAT_INTENSITY_UINT16,
  180.    MESA_FORMAT_INTENSITY_UINT32,
  181.    MESA_FORMAT_INTENSITY_INT8,
  182.    MESA_FORMAT_INTENSITY_INT16,
  183.    MESA_FORMAT_INTENSITY_INT32,
  184.  
  185.    MESA_FORMAT_LUMINANCE_UINT8,
  186.    MESA_FORMAT_LUMINANCE_UINT16,
  187.    MESA_FORMAT_LUMINANCE_UINT32,
  188.    MESA_FORMAT_LUMINANCE_INT8,
  189.    MESA_FORMAT_LUMINANCE_INT16,
  190.    MESA_FORMAT_LUMINANCE_INT32,
  191.  
  192.    MESA_FORMAT_LUMINANCE_ALPHA_UINT8,
  193.    MESA_FORMAT_LUMINANCE_ALPHA_UINT16,
  194.    MESA_FORMAT_LUMINANCE_ALPHA_UINT32,
  195.    MESA_FORMAT_LUMINANCE_ALPHA_INT8,
  196.    MESA_FORMAT_LUMINANCE_ALPHA_INT16,
  197.    MESA_FORMAT_LUMINANCE_ALPHA_INT32,
  198.  
  199.    MESA_FORMAT_R_INT8,
  200.    MESA_FORMAT_RG_INT8,
  201.    MESA_FORMAT_RGB_INT8,
  202.    MESA_FORMAT_RGBA_INT8,
  203.    MESA_FORMAT_R_INT16,
  204.    MESA_FORMAT_RG_INT16,
  205.    MESA_FORMAT_RGB_INT16,
  206.    MESA_FORMAT_RGBA_INT16,
  207.    MESA_FORMAT_R_INT32,
  208.    MESA_FORMAT_RG_INT32,
  209.    MESA_FORMAT_RGB_INT32,
  210.    MESA_FORMAT_RGBA_INT32,
  211.  
  212.    /**
  213.     * \name Non-normalized unsigned integer formats.
  214.     */
  215.    MESA_FORMAT_R_UINT8,
  216.    MESA_FORMAT_RG_UINT8,
  217.    MESA_FORMAT_RGB_UINT8,
  218.    MESA_FORMAT_RGBA_UINT8,
  219.    MESA_FORMAT_R_UINT16,
  220.    MESA_FORMAT_RG_UINT16,
  221.    MESA_FORMAT_RGB_UINT16,
  222.    MESA_FORMAT_RGBA_UINT16,
  223.    MESA_FORMAT_R_UINT32,
  224.    MESA_FORMAT_RG_UINT32,
  225.    MESA_FORMAT_RGB_UINT32,
  226.    MESA_FORMAT_RGBA_UINT32,
  227.  
  228.                                   /* msb <------ TEXEL BITS -----------> lsb */
  229.                                   /* ---- ---- ---- ---- ---- ---- ---- ---- */
  230.    /**
  231.     * \name Signed fixed point texture formats.
  232.     */
  233.    /*@{*/
  234.    MESA_FORMAT_DUDV8,             /*                     DUDU DUDU DVDV DVDV */
  235.    MESA_FORMAT_SIGNED_R8,         /*                               RRRR RRRR */
  236.    MESA_FORMAT_SIGNED_RG88_REV,   /*                     GGGG GGGG RRRR RRRR */
  237.    MESA_FORMAT_SIGNED_RGBX8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */
  238.    MESA_FORMAT_SIGNED_RGBA8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
  239.    MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
  240.    MESA_FORMAT_SIGNED_R16,        /*                     RRRR RRRR RRRR RRRR */
  241.    MESA_FORMAT_SIGNED_GR1616,     /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */
  242.    MESA_FORMAT_SIGNED_RGB_16,     /* ushort[0]=R, ushort[1]=G, ushort[2]=B */
  243.    MESA_FORMAT_SIGNED_RGBA_16,    /* ... */
  244.    MESA_FORMAT_RGBA_16,           /* ... */
  245.    /*@}*/
  246.  
  247.    /*@{*/
  248.    MESA_FORMAT_RED_RGTC1,
  249.    MESA_FORMAT_SIGNED_RED_RGTC1,
  250.    MESA_FORMAT_RG_RGTC2,
  251.    MESA_FORMAT_SIGNED_RG_RGTC2,
  252.    /*@}*/
  253.  
  254.    /*@{*/
  255.    MESA_FORMAT_L_LATC1,
  256.    MESA_FORMAT_SIGNED_L_LATC1,
  257.    MESA_FORMAT_LA_LATC2,
  258.    MESA_FORMAT_SIGNED_LA_LATC2,
  259.    /*@}*/
  260.  
  261.    MESA_FORMAT_ETC1_RGB8,
  262.    MESA_FORMAT_ETC2_RGB8,
  263.    MESA_FORMAT_ETC2_SRGB8,
  264.    MESA_FORMAT_ETC2_RGBA8_EAC,
  265.    MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC,
  266.    MESA_FORMAT_ETC2_R11_EAC,
  267.    MESA_FORMAT_ETC2_RG11_EAC,
  268.    MESA_FORMAT_ETC2_SIGNED_R11_EAC,
  269.    MESA_FORMAT_ETC2_SIGNED_RG11_EAC,
  270.    MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,
  271.    MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,
  272.  
  273.    MESA_FORMAT_SIGNED_A8,         /*                               AAAA AAAA */
  274.    MESA_FORMAT_SIGNED_L8,         /*                               LLLL LLLL */
  275.    MESA_FORMAT_SIGNED_AL88,       /*                     AAAA AAAA LLLL LLLL */
  276.    MESA_FORMAT_SIGNED_I8,         /*                               IIII IIII */
  277.    MESA_FORMAT_SIGNED_A16,        /*                     AAAA AAAA AAAA AAAA */
  278.    MESA_FORMAT_SIGNED_L16,        /*                     LLLL LLLL LLLL LLLL */
  279.    MESA_FORMAT_SIGNED_AL1616,     /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
  280.    MESA_FORMAT_SIGNED_I16,        /*                     IIII IIII IIII IIII */
  281.  
  282.    MESA_FORMAT_RGB9_E5_FLOAT,
  283.    MESA_FORMAT_R11_G11_B10_FLOAT,
  284.  
  285.    MESA_FORMAT_Z32_FLOAT,
  286.    MESA_FORMAT_Z32_FLOAT_X24S8,
  287.  
  288.    MESA_FORMAT_ARGB2101010_UINT,
  289.    MESA_FORMAT_ABGR2101010_UINT,
  290.  
  291.    MESA_FORMAT_XRGB4444_UNORM,    /*                     xxxx RRRR GGGG BBBB */
  292.    MESA_FORMAT_XRGB1555_UNORM,    /*                     xRRR RRGG GGGB BBBB */
  293.    MESA_FORMAT_XBGR8888_SNORM,    /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
  294.    MESA_FORMAT_XBGR8888_SRGB,     /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
  295.    MESA_FORMAT_XBGR8888_UINT,     /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
  296.    MESA_FORMAT_XBGR8888_SINT,     /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */
  297.    MESA_FORMAT_XRGB2101010_UNORM, /* xxRR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */
  298.    MESA_FORMAT_XBGR16161616_UNORM,/* ushort[3]=x, [2]=B, [1]=G, [0]=R */
  299.    MESA_FORMAT_XBGR16161616_SNORM,/* ... */
  300.    MESA_FORMAT_XBGR16161616_FLOAT,/* ... */
  301.    MESA_FORMAT_XBGR16161616_UINT, /* ... */
  302.    MESA_FORMAT_XBGR16161616_SINT, /* ... */
  303.    MESA_FORMAT_XBGR32323232_FLOAT,/* float[3]=x, [2]=B, [1]=G, [0]=R */
  304.    MESA_FORMAT_XBGR32323232_UINT, /* ... */
  305.    MESA_FORMAT_XBGR32323232_SINT, /* ... */
  306.  
  307.    MESA_FORMAT_COUNT
  308. } gl_format;
  309.  
  310.  
  311. extern const char *
  312. _mesa_get_format_name(gl_format format);
  313.  
  314. extern GLint
  315. _mesa_get_format_bytes(gl_format format);
  316.  
  317. extern GLint
  318. _mesa_get_format_bits(gl_format format, GLenum pname);
  319.  
  320. extern GLuint
  321. _mesa_get_format_max_bits(gl_format format);
  322.  
  323. extern GLenum
  324. _mesa_get_format_datatype(gl_format format);
  325.  
  326. extern GLenum
  327. _mesa_get_format_base_format(gl_format format);
  328.  
  329. extern void
  330. _mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh);
  331.  
  332. extern GLboolean
  333. _mesa_is_format_compressed(gl_format format);
  334.  
  335. extern GLboolean
  336. _mesa_is_format_packed_depth_stencil(gl_format format);
  337.  
  338. extern GLboolean
  339. _mesa_is_format_integer_color(gl_format format);
  340.  
  341. extern GLboolean
  342. _mesa_is_format_unsigned(gl_format format);
  343.  
  344. extern GLenum
  345. _mesa_get_format_color_encoding(gl_format format);
  346.  
  347. extern GLuint
  348. _mesa_format_image_size(gl_format format, GLsizei width,
  349.                         GLsizei height, GLsizei depth);
  350.  
  351. extern uint64_t
  352. _mesa_format_image_size64(gl_format format, GLsizei width,
  353.                           GLsizei height, GLsizei depth);
  354.  
  355. extern GLint
  356. _mesa_format_row_stride(gl_format format, GLsizei width);
  357.  
  358. extern void
  359. _mesa_format_to_type_and_comps(gl_format format,
  360.                                GLenum *datatype, GLuint *comps);
  361.  
  362. extern void
  363. _mesa_test_formats(void);
  364.  
  365. extern gl_format
  366. _mesa_get_srgb_format_linear(gl_format format);
  367.  
  368. extern gl_format
  369. _mesa_get_uncompressed_format(gl_format format);
  370.  
  371. extern GLuint
  372. _mesa_format_num_components(gl_format format);
  373.  
  374. GLboolean
  375. _mesa_format_matches_format_and_type(gl_format gl_format,
  376.                                      GLenum format, GLenum type,
  377.                                      GLboolean swapBytes);
  378.  
  379. #ifdef __cplusplus
  380. }
  381. #endif
  382.  
  383. #endif /* FORMATS_H */
  384.