Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / main / formats.h
index 7a2a948991dcb6f0e5ec5d637eaede8a7904f0ec..7674d8eaa4e81d00319919cda50f8733ed17e249 100644 (file)
@@ -33,7 +33,7 @@
 #define FORMATS_H
 
 
-#include "main/mtypes.h"
+#include <GL/gl.h>
 
 
 
@@ -54,6 +54,8 @@ typedef enum
    MESA_FORMAT_RGBA8888_REV,   /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
    MESA_FORMAT_ARGB8888,       /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
    MESA_FORMAT_ARGB8888_REV,   /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */
+   MESA_FORMAT_XRGB8888,       /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */
+   MESA_FORMAT_XRGB8888_REV,   /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */
    MESA_FORMAT_RGB888,         /*           RRRR RRRR GGGG GGGG BBBB BBBB */
    MESA_FORMAT_BGR888,         /*           BBBB BBBB GGGG GGGG RRRR RRRR */
    MESA_FORMAT_RGB565,         /*                     RRRR RGGG GGGB BBBB */
@@ -65,6 +67,8 @@ typedef enum
    MESA_FORMAT_ARGB1555_REV,   /*                     GGGB BBBB ARRR RRGG */
    MESA_FORMAT_AL88,           /*                     AAAA AAAA LLLL LLLL */
    MESA_FORMAT_AL88_REV,       /*                     LLLL LLLL AAAA AAAA */
+   MESA_FORMAT_AL1616,          /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
+   MESA_FORMAT_AL1616_REV,      /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */
    MESA_FORMAT_RGB332,         /*                               RRRG GGBB */
    MESA_FORMAT_A8,             /*                               AAAA AAAA */
    MESA_FORMAT_L8,             /*                               LLLL LLLL */
@@ -72,9 +76,17 @@ typedef enum
    MESA_FORMAT_CI8,            /*                               CCCC CCCC */
    MESA_FORMAT_YCBCR,          /*                     YYYY YYYY UorV UorV */
    MESA_FORMAT_YCBCR_REV,      /*                     UorV UorV YYYY YYYY */
+   MESA_FORMAT_R8,             /*                               RRRR RRRR */
+   MESA_FORMAT_RG88,           /*                     RRRR RRRR GGGG GGGG */
+   MESA_FORMAT_RG88_REV,       /*                     GGGG GGGG RRRR RRRR */
+   MESA_FORMAT_R16,            /*                     RRRR RRRR RRRR RRRR */
+   MESA_FORMAT_RG1616,         /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */
+   MESA_FORMAT_RG1616_REV,     /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */
    MESA_FORMAT_Z24_S8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */
    MESA_FORMAT_S8_Z24,          /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
    MESA_FORMAT_Z16,             /*                     ZZZZ ZZZZ ZZZZ ZZZZ */
+   MESA_FORMAT_X8_Z24,          /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
+   MESA_FORMAT_Z24_X8,          /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */
    MESA_FORMAT_Z32,             /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */
    MESA_FORMAT_S8,              /*                               SSSS SSSS */
    /*@}*/
@@ -125,55 +137,46 @@ typedef enum
    /*@}*/
 
    /**
-    * \name Signed fixed point texture formats.
+    * \name Non-normalized signed integer formats.
+    * XXX Note: these are just stand-ins for some better hardware
+    * formats TBD such as BGRA or ARGB.
     */
-   /*@{*/
-   MESA_FORMAT_DUDV8,
-   MESA_FORMAT_SIGNED_RGBA8888,
-   MESA_FORMAT_SIGNED_RGBA8888_REV,
-   /*@}*/
-
-   MESA_FORMAT_COUNT,
-} gl_format;
-
-
-/**
- * Information about texture formats.
- */
-struct gl_format_info
-{
-   gl_format Name;
+   MESA_FORMAT_RGBA_INT8,
+   MESA_FORMAT_RGBA_INT16,
+   MESA_FORMAT_RGBA_INT32,
 
    /**
-    * Base format is one of GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE,
-    * GL_LUMINANCE_ALPHA, GL_INTENSITY, GL_COLOR_INDEX, GL_DEPTH_COMPONENT.
+    * \name Non-normalized unsigned integer formats.
     */
-   GLenum BaseFormat;
+   MESA_FORMAT_RGBA_UINT8,
+   MESA_FORMAT_RGBA_UINT16,
+   MESA_FORMAT_RGBA_UINT32,
 
+                                  /* msb <------ TEXEL BITS -----------> lsb */
+                                  /* ---- ---- ---- ---- ---- ---- ---- ---- */
    /**
-    * Logical data type: one of  GL_UNSIGNED_NORMALIZED, GL_SIGNED_NORMALED,
-    * GL_UNSIGNED_INT, GL_SIGNED_INT, GL_FLOAT.
+    * \name Signed fixed point texture formats.
     */
-   GLenum DataType;
-
-   GLubyte RedBits;
-   GLubyte GreenBits;
-   GLubyte BlueBits;
-   GLubyte AlphaBits;
-   GLubyte LuminanceBits;
-   GLubyte IntensityBits;
-   GLubyte IndexBits;
-   GLubyte DepthBits;
-   GLubyte StencilBits;
+   /*@{*/
+   MESA_FORMAT_DUDV8,             /*                     DUDU DUDU DVDV DVDV */
+   MESA_FORMAT_SIGNED_R8,         /*                               RRRR RRRR */
+   MESA_FORMAT_SIGNED_RG88,       /*                     RRRR RRRR GGGG GGGG */
+   MESA_FORMAT_SIGNED_RGBX8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */
+   MESA_FORMAT_SIGNED_RGBA8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
+   MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
+   MESA_FORMAT_SIGNED_R_16,       /* ushort[0]=R */
+   MESA_FORMAT_SIGNED_RG_16,      /* ushort[0]=R, ushort[1]=G */
+   MESA_FORMAT_SIGNED_RGB_16,     /* ushort[0]=R, ushort[1]=G, ushort[2]=B */
+   MESA_FORMAT_SIGNED_RGBA_16,    /* ... */
+   MESA_FORMAT_RGBA_16,           /* ... */
+   /*@}*/
 
-   /**
-    * To describe compressed formats.  If not compressed, Width=Height=1.
-    */
-   GLubyte BlockWidth, BlockHeight;
-   GLubyte BytesPerBlock;
-};
+   MESA_FORMAT_COUNT
+} gl_format;
 
 
+extern const char *
+_mesa_get_format_name(gl_format format);
 
 extern GLuint
 _mesa_get_format_bytes(gl_format format);
@@ -187,12 +190,17 @@ _mesa_get_format_datatype(gl_format format);
 extern GLenum
 _mesa_get_format_base_format(gl_format format);
 
+extern void
+_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh);
+
 extern GLboolean
 _mesa_is_format_compressed(gl_format format);
 
-extern void
-_mesa_format_to_type_and_comps2(gl_format format,
-                                GLenum *datatype, GLuint *comps);
+extern GLboolean
+_mesa_is_format_packed_depth_stencil(gl_format format);
+
+extern GLenum
+_mesa_get_format_color_encoding(gl_format format);
 
 extern GLuint
 _mesa_format_image_size(gl_format format, GLsizei width,
@@ -201,6 +209,9 @@ _mesa_format_image_size(gl_format format, GLsizei width,
 extern GLint
 _mesa_format_row_stride(gl_format format, GLsizei width);
 
+extern void
+_mesa_format_to_type_and_comps(gl_format format,
+                               GLenum *datatype, GLuint *comps);
 
 extern void
 _mesa_test_formats(void);