Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Mesa 3-D graphics library
  3.  * Version:  7.7
  4.  *
  5.  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  6.  * Copyright (c) 2008-2009  VMware, Inc.
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a
  9.  * copy of this software and associated documentation files (the "Software"),
  10.  * to deal in the Software without restriction, including without limitation
  11.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  12.  * and/or sell copies of the Software, and to permit persons to whom the
  13.  * Software is furnished to do so, subject to the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice shall be included
  16.  * in all copies or substantial portions of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  21.  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
  22.  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  23.  * CONNECTION WITH THE SOFTWARE OR THE USE OR 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.  
  40. /**
  41.  * Mesa texture/renderbuffer image formats.
  42.  */
  43. typedef enum
  44. {
  45.    MESA_FORMAT_NONE = 0,
  46.  
  47.    /**
  48.     * \name Basic hardware formats
  49.     */
  50.    /*@{*/
  51.                                 /* msb <------ TEXEL BITS -----------> lsb */
  52.                                 /* ---- ---- ---- ---- ---- ---- ---- ---- */
  53.    MESA_FORMAT_RGBA8888,        /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
  54.    MESA_FORMAT_RGBA8888_REV,    /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
  55.    MESA_FORMAT_ARGB8888,        /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
  56.    MESA_FORMAT_ARGB8888_REV,    /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */
  57.    MESA_FORMAT_XRGB8888,        /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */
  58.    MESA_FORMAT_XRGB8888_REV,    /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */
  59.    MESA_FORMAT_RGB888,          /*           RRRR RRRR GGGG GGGG BBBB BBBB */
  60.    MESA_FORMAT_BGR888,          /*           BBBB BBBB GGGG GGGG RRRR RRRR */
  61.    MESA_FORMAT_RGB565,          /*                     RRRR RGGG GGGB BBBB */
  62.    MESA_FORMAT_RGB565_REV,      /*                     GGGB BBBB RRRR RGGG */
  63.    MESA_FORMAT_ARGB4444,        /*                     AAAA RRRR GGGG BBBB */
  64.    MESA_FORMAT_ARGB4444_REV,    /*                     GGGG BBBB AAAA RRRR */
  65.    MESA_FORMAT_RGBA5551,        /*                     RRRR RGGG GGBB BBBA */
  66.    MESA_FORMAT_ARGB1555,        /*                     ARRR RRGG GGGB BBBB */
  67.    MESA_FORMAT_ARGB1555_REV,    /*                     GGGB BBBB ARRR RRGG */
  68.    MESA_FORMAT_AL88,            /*                     AAAA AAAA LLLL LLLL */
  69.    MESA_FORMAT_AL88_REV,        /*                     LLLL LLLL AAAA AAAA */
  70.    MESA_FORMAT_AL1616,          /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
  71.    MESA_FORMAT_AL1616_REV,      /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */
  72.    MESA_FORMAT_RGB332,          /*                               RRRG GGBB */
  73.    MESA_FORMAT_A8,              /*                               AAAA AAAA */
  74.    MESA_FORMAT_L8,              /*                               LLLL LLLL */
  75.    MESA_FORMAT_I8,              /*                               IIII IIII */
  76.    MESA_FORMAT_CI8,             /*                               CCCC CCCC */
  77.    MESA_FORMAT_YCBCR,           /*                     YYYY YYYY UorV UorV */
  78.    MESA_FORMAT_YCBCR_REV,       /*                     UorV UorV YYYY YYYY */
  79.    MESA_FORMAT_R8,              /*                               RRRR RRRR */
  80.    MESA_FORMAT_RG88,            /*                     RRRR RRRR GGGG GGGG */
  81.    MESA_FORMAT_RG88_REV,        /*                     GGGG GGGG RRRR RRRR */
  82.    MESA_FORMAT_R16,             /*                     RRRR RRRR RRRR RRRR */
  83.    MESA_FORMAT_RG1616,          /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */
  84.    MESA_FORMAT_RG1616_REV,      /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */
  85.    MESA_FORMAT_Z24_S8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */
  86.    MESA_FORMAT_S8_Z24,          /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  87.    MESA_FORMAT_Z16,             /*                     ZZZZ ZZZZ ZZZZ ZZZZ */
  88.    MESA_FORMAT_X8_Z24,          /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  89.    MESA_FORMAT_Z24_X8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */
  90.    MESA_FORMAT_Z32,             /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
  91.    MESA_FORMAT_S8,              /*                               SSSS SSSS */
  92.    /*@}*/
  93.  
  94.    /**
  95.     * \name 8-bit/channel sRGB formats
  96.     */
  97.    /*@{*/
  98.    MESA_FORMAT_SRGB8,
  99.    MESA_FORMAT_SRGBA8,
  100.    MESA_FORMAT_SARGB8,
  101.    MESA_FORMAT_SL8,
  102.    MESA_FORMAT_SLA8,
  103.    MESA_FORMAT_SRGB_DXT1,
  104.    MESA_FORMAT_SRGBA_DXT1,
  105.    MESA_FORMAT_SRGBA_DXT3,
  106.    MESA_FORMAT_SRGBA_DXT5,
  107.    /*@}*/
  108.  
  109.    /**
  110.     * \name Compressed texture formats.
  111.     */
  112.    /*@{*/
  113.    MESA_FORMAT_RGB_FXT1,
  114.    MESA_FORMAT_RGBA_FXT1,
  115.    MESA_FORMAT_RGB_DXT1,
  116.    MESA_FORMAT_RGBA_DXT1,
  117.    MESA_FORMAT_RGBA_DXT3,
  118.    MESA_FORMAT_RGBA_DXT5,
  119.    /*@}*/
  120.  
  121.    /**
  122.     * \name Floating point texture formats.
  123.     */
  124.    /*@{*/
  125.    MESA_FORMAT_RGBA_FLOAT32,
  126.    MESA_FORMAT_RGBA_FLOAT16,
  127.    MESA_FORMAT_RGB_FLOAT32,
  128.    MESA_FORMAT_RGB_FLOAT16,
  129.    MESA_FORMAT_ALPHA_FLOAT32,
  130.    MESA_FORMAT_ALPHA_FLOAT16,
  131.    MESA_FORMAT_LUMINANCE_FLOAT32,
  132.    MESA_FORMAT_LUMINANCE_FLOAT16,
  133.    MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
  134.    MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
  135.    MESA_FORMAT_INTENSITY_FLOAT32,
  136.    MESA_FORMAT_INTENSITY_FLOAT16,
  137.    /*@}*/
  138.  
  139.    /**
  140.     * \name Non-normalized signed integer formats.
  141.     * XXX Note: these are just stand-ins for some better hardware
  142.     * formats TBD such as BGRA or ARGB.
  143.     */
  144.    MESA_FORMAT_RGBA_INT8,
  145.    MESA_FORMAT_RGBA_INT16,
  146.    MESA_FORMAT_RGBA_INT32,
  147.  
  148.    /**
  149.     * \name Non-normalized unsigned integer formats.
  150.     */
  151.    MESA_FORMAT_RGBA_UINT8,
  152.    MESA_FORMAT_RGBA_UINT16,
  153.    MESA_FORMAT_RGBA_UINT32,
  154.  
  155.                                   /* msb <------ TEXEL BITS -----------> lsb */
  156.                                   /* ---- ---- ---- ---- ---- ---- ---- ---- */
  157.    /**
  158.     * \name Signed fixed point texture formats.
  159.     */
  160.    /*@{*/
  161.    MESA_FORMAT_DUDV8,             /*                     DUDU DUDU DVDV DVDV */
  162.    MESA_FORMAT_SIGNED_R8,         /*                               RRRR RRRR */
  163.    MESA_FORMAT_SIGNED_RG88,       /*                     RRRR RRRR GGGG GGGG */
  164.    MESA_FORMAT_SIGNED_RGBX8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */
  165.    MESA_FORMAT_SIGNED_RGBA8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
  166.    MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
  167.    MESA_FORMAT_SIGNED_R_16,       /* ushort[0]=R */
  168.    MESA_FORMAT_SIGNED_RG_16,      /* ushort[0]=R, ushort[1]=G */
  169.    MESA_FORMAT_SIGNED_RGB_16,     /* ushort[0]=R, ushort[1]=G, ushort[2]=B */
  170.    MESA_FORMAT_SIGNED_RGBA_16,    /* ... */
  171.    MESA_FORMAT_RGBA_16,           /* ... */
  172.    /*@}*/
  173.  
  174.    MESA_FORMAT_COUNT
  175. } gl_format;
  176.  
  177.  
  178. extern const char *
  179. _mesa_get_format_name(gl_format format);
  180.  
  181. extern GLuint
  182. _mesa_get_format_bytes(gl_format format);
  183.  
  184. extern GLint
  185. _mesa_get_format_bits(gl_format format, GLenum pname);
  186.  
  187. extern GLenum
  188. _mesa_get_format_datatype(gl_format format);
  189.  
  190. extern GLenum
  191. _mesa_get_format_base_format(gl_format format);
  192.  
  193. extern void
  194. _mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh);
  195.  
  196. extern GLboolean
  197. _mesa_is_format_compressed(gl_format format);
  198.  
  199. extern GLboolean
  200. _mesa_is_format_packed_depth_stencil(gl_format format);
  201.  
  202. extern GLboolean
  203. _mesa_is_format_integer_color(gl_format format);
  204.  
  205. extern GLenum
  206. _mesa_get_format_color_encoding(gl_format format);
  207.  
  208. extern GLuint
  209. _mesa_format_image_size(gl_format format, GLsizei width,
  210.                         GLsizei height, GLsizei depth);
  211.  
  212. extern uint64_t
  213. _mesa_format_image_size64(gl_format format, GLsizei width,
  214.                           GLsizei height, GLsizei depth);
  215.  
  216. extern GLint
  217. _mesa_format_row_stride(gl_format format, GLsizei width);
  218.  
  219. extern void
  220. _mesa_format_to_type_and_comps(gl_format format,
  221.                                GLenum *datatype, GLuint *comps);
  222.  
  223. extern void
  224. _mesa_test_formats(void);
  225.  
  226. #endif /* FORMATS_H */
  227.