formats.c revision c28d78f8324cfc17936af63c258a1cc55d590d60
1813870fd9588de101f68728507cff726d7513695Brian Paul/*
2813870fd9588de101f68728507cff726d7513695Brian Paul * Mesa 3-D graphics library
3813870fd9588de101f68728507cff726d7513695Brian Paul * Version:  7.7
4813870fd9588de101f68728507cff726d7513695Brian Paul *
5813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (c) 2008-2009  VMware, Inc.
7813870fd9588de101f68728507cff726d7513695Brian Paul *
8813870fd9588de101f68728507cff726d7513695Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
9813870fd9588de101f68728507cff726d7513695Brian Paul * copy of this software and associated documentation files (the "Software"),
10813870fd9588de101f68728507cff726d7513695Brian Paul * to deal in the Software without restriction, including without limitation
11813870fd9588de101f68728507cff726d7513695Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12813870fd9588de101f68728507cff726d7513695Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
13813870fd9588de101f68728507cff726d7513695Brian Paul * Software is furnished to do so, subject to the following conditions:
14813870fd9588de101f68728507cff726d7513695Brian Paul *
15813870fd9588de101f68728507cff726d7513695Brian Paul * The above copyright notice and this permission notice shall be included
16813870fd9588de101f68728507cff726d7513695Brian Paul * in all copies or substantial portions of the Software.
17813870fd9588de101f68728507cff726d7513695Brian Paul *
18813870fd9588de101f68728507cff726d7513695Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19813870fd9588de101f68728507cff726d7513695Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20813870fd9588de101f68728507cff726d7513695Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21813870fd9588de101f68728507cff726d7513695Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22813870fd9588de101f68728507cff726d7513695Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23813870fd9588de101f68728507cff726d7513695Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24813870fd9588de101f68728507cff726d7513695Brian Paul */
25813870fd9588de101f68728507cff726d7513695Brian Paul
26813870fd9588de101f68728507cff726d7513695Brian Paul
27c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul#include "imports.h"
28813870fd9588de101f68728507cff726d7513695Brian Paul#include "formats.h"
29813870fd9588de101f68728507cff726d7513695Brian Paul#include "config.h"
30813870fd9588de101f68728507cff726d7513695Brian Paul#include "texstore.h"
31813870fd9588de101f68728507cff726d7513695Brian Paul
32813870fd9588de101f68728507cff726d7513695Brian Paul
33813870fd9588de101f68728507cff726d7513695Brian Paul/**
34813870fd9588de101f68728507cff726d7513695Brian Paul * Info about each format.
35813870fd9588de101f68728507cff726d7513695Brian Paul * These must be in the same order as the MESA_FORMAT_* enums so that
36813870fd9588de101f68728507cff726d7513695Brian Paul * we can do lookups without searching.
37813870fd9588de101f68728507cff726d7513695Brian Paul */
38813870fd9588de101f68728507cff726d7513695Brian Paulstatic struct gl_format_info format_info[MESA_FORMAT_COUNT] =
39813870fd9588de101f68728507cff726d7513695Brian Paul{
40813870fd9588de101f68728507cff726d7513695Brian Paul   {
41e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      MESA_FORMAT_NONE,            /* Name */
42e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* BaseFormat */
43e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      GL_NONE,                     /* DataType */
44e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
45e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
46e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      0, 0, 0                      /* BlockWidth/Height,Bytes */
47e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   },
48e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul   {
49813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888,        /* Name */
50813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
51813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
52813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
53813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
54813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
55813870fd9588de101f68728507cff726d7513695Brian Paul   },
56813870fd9588de101f68728507cff726d7513695Brian Paul   {
57813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA8888_REV,    /* Name */
58813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
59813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
60813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
61813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
62813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
63813870fd9588de101f68728507cff726d7513695Brian Paul   },
64813870fd9588de101f68728507cff726d7513695Brian Paul   {
65813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888,        /* Name */
66813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
67813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
68813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
69813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
70813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
71813870fd9588de101f68728507cff726d7513695Brian Paul   },
72813870fd9588de101f68728507cff726d7513695Brian Paul   {
73813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB8888_REV,    /* Name */
74813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
75813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
76813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
77813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
78813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
79813870fd9588de101f68728507cff726d7513695Brian Paul   },
80813870fd9588de101f68728507cff726d7513695Brian Paul   {
81813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB888,          /* Name */
82813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
83813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
84813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
85813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
86813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
87813870fd9588de101f68728507cff726d7513695Brian Paul   },
88813870fd9588de101f68728507cff726d7513695Brian Paul   {
89813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_BGR888,          /* Name */
90813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
91813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
92813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
93813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
94813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3                      /* BlockWidth/Height,Bytes */
95813870fd9588de101f68728507cff726d7513695Brian Paul   },
96813870fd9588de101f68728507cff726d7513695Brian Paul   {
97813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565,          /* Name */
98813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
99813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
100813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
101813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
102813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
103813870fd9588de101f68728507cff726d7513695Brian Paul   },
104813870fd9588de101f68728507cff726d7513695Brian Paul   {
105813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB565_REV,      /* Name */
106813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
107813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
108813870fd9588de101f68728507cff726d7513695Brian Paul      5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
109813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
110813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
111813870fd9588de101f68728507cff726d7513695Brian Paul   },
112813870fd9588de101f68728507cff726d7513695Brian Paul   {
113813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA4444,        /* Name */
114813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
115813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
116813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
117813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
118813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
119813870fd9588de101f68728507cff726d7513695Brian Paul   },
120813870fd9588de101f68728507cff726d7513695Brian Paul   {
121813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444,        /* Name */
122813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
123813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
124813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
125813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
126813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
127813870fd9588de101f68728507cff726d7513695Brian Paul   },
128813870fd9588de101f68728507cff726d7513695Brian Paul   {
129813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB4444_REV,    /* Name */
130813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
131813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
132813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
133813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
134813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
135813870fd9588de101f68728507cff726d7513695Brian Paul   },
136813870fd9588de101f68728507cff726d7513695Brian Paul   {
137813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA5551,        /* Name */
138813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
139813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
140813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
141813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
142813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
143813870fd9588de101f68728507cff726d7513695Brian Paul   },
144813870fd9588de101f68728507cff726d7513695Brian Paul   {
145813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555,        /* Name */
146813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
147813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
148813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
149813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
150813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
151813870fd9588de101f68728507cff726d7513695Brian Paul   },
152813870fd9588de101f68728507cff726d7513695Brian Paul   {
153813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ARGB1555_REV,    /* Name */
154813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,                     /* BaseFormat */
155813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
156813870fd9588de101f68728507cff726d7513695Brian Paul      5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
157813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
158813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
159813870fd9588de101f68728507cff726d7513695Brian Paul   },
160813870fd9588de101f68728507cff726d7513695Brian Paul   {
161813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88,            /* Name */
162813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
163813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
164813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
165813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
166813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
167813870fd9588de101f68728507cff726d7513695Brian Paul   },
168813870fd9588de101f68728507cff726d7513695Brian Paul   {
169813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_AL88_REV,        /* Name */
170813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,          /* BaseFormat */
171813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
172813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
173813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
174813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
175813870fd9588de101f68728507cff726d7513695Brian Paul   },
176813870fd9588de101f68728507cff726d7513695Brian Paul   {
177813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB332,          /* Name */
178813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
179813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
180813870fd9588de101f68728507cff726d7513695Brian Paul      3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
181813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
182813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
183813870fd9588de101f68728507cff726d7513695Brian Paul   },
184813870fd9588de101f68728507cff726d7513695Brian Paul   {
185813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_A8,              /* Name */
186813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,                    /* BaseFormat */
187813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
188813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
189813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
190813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
191813870fd9588de101f68728507cff726d7513695Brian Paul   },
192813870fd9588de101f68728507cff726d7513695Brian Paul   {
193813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_L8,              /* Name */
194813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE,                /* BaseFormat */
195813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
196813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
197813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
198813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
199813870fd9588de101f68728507cff726d7513695Brian Paul   },
200813870fd9588de101f68728507cff726d7513695Brian Paul   {
201813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_I8,              /* Name */
202813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,                /* BaseFormat */
203813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
204813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
205813870fd9588de101f68728507cff726d7513695Brian Paul      0, 8, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
206813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
207813870fd9588de101f68728507cff726d7513695Brian Paul   },
208813870fd9588de101f68728507cff726d7513695Brian Paul   {
209813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_CI8,             /* Name */
210813870fd9588de101f68728507cff726d7513695Brian Paul      GL_COLOR_INDEX,              /* BaseFormat */
211813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
212813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
213813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 8, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
214813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
215813870fd9588de101f68728507cff726d7513695Brian Paul   },
216813870fd9588de101f68728507cff726d7513695Brian Paul   {
217813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR,           /* Name */
218813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
219813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
220813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
221813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
222813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
223813870fd9588de101f68728507cff726d7513695Brian Paul   },
224813870fd9588de101f68728507cff726d7513695Brian Paul   {
225813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_YCBCR_REV,       /* Name */
226813870fd9588de101f68728507cff726d7513695Brian Paul      GL_YCBCR_MESA,               /* BaseFormat */
227813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
228813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
229813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
230813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
231813870fd9588de101f68728507cff726d7513695Brian Paul   },
232813870fd9588de101f68728507cff726d7513695Brian Paul   {
233813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z24_S8,          /* Name */
234813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
235813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
236813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
237813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
238813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
239813870fd9588de101f68728507cff726d7513695Brian Paul   },
240813870fd9588de101f68728507cff726d7513695Brian Paul   {
241813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8_Z24,          /* Name */
242813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_STENCIL,            /* BaseFormat */
243813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
244813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
245813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
246813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
247813870fd9588de101f68728507cff726d7513695Brian Paul   },
248813870fd9588de101f68728507cff726d7513695Brian Paul   {
249813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z16,             /* Name */
250813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
251813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
252813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
253813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16, 0,              /* Lum/Int/Index/Depth/StencilBits */
254813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2                      /* BlockWidth/Height,Bytes */
255813870fd9588de101f68728507cff726d7513695Brian Paul   },
256813870fd9588de101f68728507cff726d7513695Brian Paul   {
257813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_Z32,             /* Name */
258813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DEPTH_COMPONENT,          /* BaseFormat */
259813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
260813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
261813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
262813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4                      /* BlockWidth/Height,Bytes */
263813870fd9588de101f68728507cff726d7513695Brian Paul   },
264813870fd9588de101f68728507cff726d7513695Brian Paul   {
265813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_S8,              /* Name */
266813870fd9588de101f68728507cff726d7513695Brian Paul      GL_STENCIL_INDEX,            /* BaseFormat */
267813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_INT,             /* DataType */
268813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
269813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
270813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1                      /* BlockWidth/Height,Bytes */
271813870fd9588de101f68728507cff726d7513695Brian Paul   },
272813870fd9588de101f68728507cff726d7513695Brian Paul
273813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_EXT_texture_sRGB
274813870fd9588de101f68728507cff726d7513695Brian Paul   {
275813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB8,
276813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
277813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
278813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
279813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
280813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3
281813870fd9588de101f68728507cff726d7513695Brian Paul   },
282813870fd9588de101f68728507cff726d7513695Brian Paul   {
283813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA8,
284813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
285813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
286813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
287813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
288813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
289813870fd9588de101f68728507cff726d7513695Brian Paul   },
290813870fd9588de101f68728507cff726d7513695Brian Paul   {
291813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SARGB8,
292813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
293813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
294813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
295813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
296813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
297813870fd9588de101f68728507cff726d7513695Brian Paul   },
298813870fd9588de101f68728507cff726d7513695Brian Paul   {
299813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SL8,
300813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
301813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
302813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
303813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
304813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
305813870fd9588de101f68728507cff726d7513695Brian Paul   },
306813870fd9588de101f68728507cff726d7513695Brian Paul   {
307813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SLA8,
308813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
309813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
310813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 8,
311813870fd9588de101f68728507cff726d7513695Brian Paul      8, 0, 0, 0, 0,
312813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
313813870fd9588de101f68728507cff726d7513695Brian Paul   },
314813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_s3tc
315813870fd9588de101f68728507cff726d7513695Brian Paul   {
316813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGB_DXT1,       /* Name */
317813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
318813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
319813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
320813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
321813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
322813870fd9588de101f68728507cff726d7513695Brian Paul   },
323813870fd9588de101f68728507cff726d7513695Brian Paul   {
324813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT1,
325813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
326813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
327813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
328813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
329813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
330813870fd9588de101f68728507cff726d7513695Brian Paul   },
331813870fd9588de101f68728507cff726d7513695Brian Paul   {
332813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT3,
333813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
334813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
335813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
336813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
337813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
338813870fd9588de101f68728507cff726d7513695Brian Paul   },
339813870fd9588de101f68728507cff726d7513695Brian Paul   {
340813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SRGBA_DXT5,
341813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
342813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
343813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
344813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
345813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
346813870fd9588de101f68728507cff726d7513695Brian Paul   },
347813870fd9588de101f68728507cff726d7513695Brian Paul#endif
348813870fd9588de101f68728507cff726d7513695Brian Paul#endif
349813870fd9588de101f68728507cff726d7513695Brian Paul
350813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_fxt1
351813870fd9588de101f68728507cff726d7513695Brian Paul   {
352813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FXT1,
353813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
354813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
355813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 0,
356813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
357813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
358813870fd9588de101f68728507cff726d7513695Brian Paul   },
359813870fd9588de101f68728507cff726d7513695Brian Paul   {
360813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FXT1,
361813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
362813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
363813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
364813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
365813870fd9588de101f68728507cff726d7513695Brian Paul      8, 4, 16                     /* 16 bytes per 8x4 block */
366813870fd9588de101f68728507cff726d7513695Brian Paul   },
367813870fd9588de101f68728507cff726d7513695Brian Paul#endif
368813870fd9588de101f68728507cff726d7513695Brian Paul
369813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_s3tc
370813870fd9588de101f68728507cff726d7513695Brian Paul   {
371813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_DXT1,        /* Name */
372813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,                      /* BaseFormat */
373813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,      /* DataType */
374813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
375813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
376813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
377813870fd9588de101f68728507cff726d7513695Brian Paul   },
378813870fd9588de101f68728507cff726d7513695Brian Paul   {
379813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT1,
380813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
381813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
382813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
383813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
384813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 8                      /* 8 bytes per 4x4 block */
385813870fd9588de101f68728507cff726d7513695Brian Paul   },
386813870fd9588de101f68728507cff726d7513695Brian Paul   {
387813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT3,
388813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
389813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
390813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
391813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
392813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
393813870fd9588de101f68728507cff726d7513695Brian Paul   },
394813870fd9588de101f68728507cff726d7513695Brian Paul   {
395813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_DXT5,
396813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
397813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
398813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 4, 4,
399813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
400813870fd9588de101f68728507cff726d7513695Brian Paul      4, 4, 16                     /* 16 bytes per 4x4 block */
401813870fd9588de101f68728507cff726d7513695Brian Paul   },
402813870fd9588de101f68728507cff726d7513695Brian Paul#endif
403813870fd9588de101f68728507cff726d7513695Brian Paul
404813870fd9588de101f68728507cff726d7513695Brian Paul   {
405813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA,
406813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
407813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
408813870fd9588de101f68728507cff726d7513695Brian Paul      CHAN_BITS, CHAN_BITS, CHAN_BITS, CHAN_BITS,
409813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
410813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4 * CHAN_BITS / 8
411813870fd9588de101f68728507cff726d7513695Brian Paul   },
412813870fd9588de101f68728507cff726d7513695Brian Paul   {
413813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB,
414813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
415813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
416813870fd9588de101f68728507cff726d7513695Brian Paul      CHAN_BITS, CHAN_BITS, CHAN_BITS, 0,
417813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
418813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 3 * CHAN_BITS / 8
419813870fd9588de101f68728507cff726d7513695Brian Paul   },
420813870fd9588de101f68728507cff726d7513695Brian Paul   {
421813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA,
422813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
423813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
424813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, CHAN_BITS,
425813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
426813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1 * CHAN_BITS / 8
427813870fd9588de101f68728507cff726d7513695Brian Paul   },
428813870fd9588de101f68728507cff726d7513695Brian Paul   {
429813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE,
430813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE,
431813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
432813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
433813870fd9588de101f68728507cff726d7513695Brian Paul      CHAN_BITS, 0, 0, 0, 0,
434813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1 * CHAN_BITS / 8
435813870fd9588de101f68728507cff726d7513695Brian Paul   },
436813870fd9588de101f68728507cff726d7513695Brian Paul   {
437813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA,
438813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
439813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
440813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, CHAN_BITS,
441813870fd9588de101f68728507cff726d7513695Brian Paul      CHAN_BITS, 0, 0, 0, 0,
442813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2 * CHAN_BITS / 8
443813870fd9588de101f68728507cff726d7513695Brian Paul   },
444813870fd9588de101f68728507cff726d7513695Brian Paul   {
445813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY,
446813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
447813870fd9588de101f68728507cff726d7513695Brian Paul      GL_UNSIGNED_NORMALIZED,
448813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
449813870fd9588de101f68728507cff726d7513695Brian Paul      0, CHAN_BITS, 0, 0, 0,
450813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 1 * CHAN_BITS / 8
451813870fd9588de101f68728507cff726d7513695Brian Paul   },
452813870fd9588de101f68728507cff726d7513695Brian Paul   {
453813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT32,
454813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
455813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
456813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 32,
457813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
458813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 16
459813870fd9588de101f68728507cff726d7513695Brian Paul   },
460813870fd9588de101f68728507cff726d7513695Brian Paul   {
461813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGBA_FLOAT16,
462813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
463813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
464813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 16,
465813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
466813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
467813870fd9588de101f68728507cff726d7513695Brian Paul   },
468813870fd9588de101f68728507cff726d7513695Brian Paul   {
469813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT32,
470813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
471813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
472813870fd9588de101f68728507cff726d7513695Brian Paul      32, 32, 32, 0,
473813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
474813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 12
475813870fd9588de101f68728507cff726d7513695Brian Paul   },
476813870fd9588de101f68728507cff726d7513695Brian Paul   {
477813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_RGB_FLOAT16,
478813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGB,
479813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
480813870fd9588de101f68728507cff726d7513695Brian Paul      16, 16, 16, 0,
481813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
482813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 6
483813870fd9588de101f68728507cff726d7513695Brian Paul   },
484813870fd9588de101f68728507cff726d7513695Brian Paul   {
485813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT32,
486813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
487813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
488813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
489813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
490813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
491813870fd9588de101f68728507cff726d7513695Brian Paul   },
492813870fd9588de101f68728507cff726d7513695Brian Paul   {
493813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_ALPHA_FLOAT16,
494813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
495813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
496813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
497813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
498813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
499813870fd9588de101f68728507cff726d7513695Brian Paul   },
500813870fd9588de101f68728507cff726d7513695Brian Paul   {
501813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT32,
502813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
503813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
504813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
505813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
506813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
507813870fd9588de101f68728507cff726d7513695Brian Paul   },
508813870fd9588de101f68728507cff726d7513695Brian Paul   {
509813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_FLOAT16,
510813870fd9588de101f68728507cff726d7513695Brian Paul      GL_ALPHA,
511813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
512813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
513813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
514813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
515813870fd9588de101f68728507cff726d7513695Brian Paul   },
516813870fd9588de101f68728507cff726d7513695Brian Paul   {
517813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32,
518813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
519813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
520813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 32,
521813870fd9588de101f68728507cff726d7513695Brian Paul      32, 0, 0, 0, 0,
522813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 8
523813870fd9588de101f68728507cff726d7513695Brian Paul   },
524813870fd9588de101f68728507cff726d7513695Brian Paul   {
525813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
526813870fd9588de101f68728507cff726d7513695Brian Paul      GL_LUMINANCE_ALPHA,
527813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
528813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 16,
529813870fd9588de101f68728507cff726d7513695Brian Paul      16, 0, 0, 0, 0,
530813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
531813870fd9588de101f68728507cff726d7513695Brian Paul   },
532813870fd9588de101f68728507cff726d7513695Brian Paul   {
533813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT32,
534813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
535813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
536813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
537813870fd9588de101f68728507cff726d7513695Brian Paul      0, 32, 0, 0, 0,
538813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
539813870fd9588de101f68728507cff726d7513695Brian Paul   },
540813870fd9588de101f68728507cff726d7513695Brian Paul   {
541813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_INTENSITY_FLOAT16,
542813870fd9588de101f68728507cff726d7513695Brian Paul      GL_INTENSITY,
543813870fd9588de101f68728507cff726d7513695Brian Paul      GL_FLOAT,
544813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
545813870fd9588de101f68728507cff726d7513695Brian Paul      0, 16, 0, 0, 0,
546813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
547813870fd9588de101f68728507cff726d7513695Brian Paul   },
548813870fd9588de101f68728507cff726d7513695Brian Paul
549813870fd9588de101f68728507cff726d7513695Brian Paul   {
550813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_DUDV8,
551813870fd9588de101f68728507cff726d7513695Brian Paul      GL_DUDV_ATI,
552813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
553813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0,
554813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
555813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 2
556813870fd9588de101f68728507cff726d7513695Brian Paul   },
557813870fd9588de101f68728507cff726d7513695Brian Paul
558813870fd9588de101f68728507cff726d7513695Brian Paul   {
559813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888,
560813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
561813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
562813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
563813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
564813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
565813870fd9588de101f68728507cff726d7513695Brian Paul   },
566813870fd9588de101f68728507cff726d7513695Brian Paul   {
567813870fd9588de101f68728507cff726d7513695Brian Paul      MESA_FORMAT_SIGNED_RGBA8888_REV,
568813870fd9588de101f68728507cff726d7513695Brian Paul      GL_RGBA,
569813870fd9588de101f68728507cff726d7513695Brian Paul      GL_SIGNED_NORMALIZED,
570813870fd9588de101f68728507cff726d7513695Brian Paul      8, 8, 8, 8,
571813870fd9588de101f68728507cff726d7513695Brian Paul      0, 0, 0, 0, 0,
572813870fd9588de101f68728507cff726d7513695Brian Paul      1, 1, 4
573813870fd9588de101f68728507cff726d7513695Brian Paul   },
574813870fd9588de101f68728507cff726d7513695Brian Paul
575813870fd9588de101f68728507cff726d7513695Brian Paul};
576813870fd9588de101f68728507cff726d7513695Brian Paul
577813870fd9588de101f68728507cff726d7513695Brian Paul
578813870fd9588de101f68728507cff726d7513695Brian Paul
579813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info *
580813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format)
581813870fd9588de101f68728507cff726d7513695Brian Paul{
582813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = &format_info[format];
583813870fd9588de101f68728507cff726d7513695Brian Paul   assert(info->Name == format);
584813870fd9588de101f68728507cff726d7513695Brian Paul   return info;
585813870fd9588de101f68728507cff726d7513695Brian Paul}
586813870fd9588de101f68728507cff726d7513695Brian Paul
587813870fd9588de101f68728507cff726d7513695Brian Paul
588813870fd9588de101f68728507cff726d7513695Brian PaulGLuint
589813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format)
590813870fd9588de101f68728507cff726d7513695Brian Paul{
591813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
592813870fd9588de101f68728507cff726d7513695Brian Paul   ASSERT(info->BytesPerBlock);
593813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BytesPerBlock;
594813870fd9588de101f68728507cff726d7513695Brian Paul}
595813870fd9588de101f68728507cff726d7513695Brian Paul
596813870fd9588de101f68728507cff726d7513695Brian Paul
597813870fd9588de101f68728507cff726d7513695Brian PaulGLenum
598813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format)
599813870fd9588de101f68728507cff726d7513695Brian Paul{
600813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
601813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BaseFormat;
602813870fd9588de101f68728507cff726d7513695Brian Paul}
603813870fd9588de101f68728507cff726d7513695Brian Paul
604813870fd9588de101f68728507cff726d7513695Brian Paul
605813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean
606813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format)
607813870fd9588de101f68728507cff726d7513695Brian Paul{
608813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
609813870fd9588de101f68728507cff726d7513695Brian Paul   return info->BlockWidth > 1 || info->BlockHeight > 1;
610813870fd9588de101f68728507cff726d7513695Brian Paul}
611813870fd9588de101f68728507cff726d7513695Brian Paul
612813870fd9588de101f68728507cff726d7513695Brian Paul
613813870fd9588de101f68728507cff726d7513695Brian Paul/**
614813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table.
615813870fd9588de101f68728507cff726d7513695Brian Paul */
616813870fd9588de101f68728507cff726d7513695Brian Paulvoid
617813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void)
618813870fd9588de101f68728507cff726d7513695Brian Paul{
619813870fd9588de101f68728507cff726d7513695Brian Paul   GLuint i;
620813870fd9588de101f68728507cff726d7513695Brian Paul
621813870fd9588de101f68728507cff726d7513695Brian Paul   assert(Elements(format_info) == MESA_FORMAT_COUNT);
622813870fd9588de101f68728507cff726d7513695Brian Paul
623813870fd9588de101f68728507cff726d7513695Brian Paul   for (i = 0; i < MESA_FORMAT_COUNT; i++) {
624813870fd9588de101f68728507cff726d7513695Brian Paul      const struct gl_format_info *info = _mesa_get_format_info(i);
625813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info);
626813870fd9588de101f68728507cff726d7513695Brian Paul
627813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->Name == i);
628813870fd9588de101f68728507cff726d7513695Brian Paul
629e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul      if (info->Name == MESA_FORMAT_NONE)
630e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul         continue;
631e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul
632813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BlockWidth == 1 && info->BlockHeight == 1) {
633813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits > 0) {
634813870fd9588de101f68728507cff726d7513695Brian Paul            GLuint t = info->RedBits + info->GreenBits
635813870fd9588de101f68728507cff726d7513695Brian Paul               + info->BlueBits + info->AlphaBits;
636813870fd9588de101f68728507cff726d7513695Brian Paul            assert(t / 8 == info->BytesPerBlock);
637813870fd9588de101f68728507cff726d7513695Brian Paul         }
638813870fd9588de101f68728507cff726d7513695Brian Paul      }
639813870fd9588de101f68728507cff726d7513695Brian Paul
640813870fd9588de101f68728507cff726d7513695Brian Paul      assert(info->DataType == GL_UNSIGNED_NORMALIZED ||
641813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_SIGNED_NORMALIZED ||
642813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_UNSIGNED_INT ||
643813870fd9588de101f68728507cff726d7513695Brian Paul             info->DataType == GL_FLOAT);
644813870fd9588de101f68728507cff726d7513695Brian Paul
645813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->BaseFormat == GL_RGB) {
646813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
647813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
648813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
649813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
650813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
651813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
652813870fd9588de101f68728507cff726d7513695Brian Paul      }
653813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_RGBA) {
654813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits > 0);
655813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits > 0);
656813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits > 0);
657813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits > 0);
658813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
659813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
660813870fd9588de101f68728507cff726d7513695Brian Paul      }
661813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_LUMINANCE) {
662813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
663813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
664813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
665813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
666813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits > 0);
667813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits == 0);
668813870fd9588de101f68728507cff726d7513695Brian Paul      }
669813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->BaseFormat == GL_INTENSITY) {
670813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->RedBits == 0);
671813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->GreenBits == 0);
672813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->BlueBits == 0);
673813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->AlphaBits == 0);
674813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->LuminanceBits == 0);
675813870fd9588de101f68728507cff726d7513695Brian Paul         assert(info->IntensityBits > 0);
676813870fd9588de101f68728507cff726d7513695Brian Paul      }
677813870fd9588de101f68728507cff726d7513695Brian Paul
678813870fd9588de101f68728507cff726d7513695Brian Paul   }
679813870fd9588de101f68728507cff726d7513695Brian Paul}
680813870fd9588de101f68728507cff726d7513695Brian Paul
681813870fd9588de101f68728507cff726d7513695Brian Paul
682813870fd9588de101f68728507cff726d7513695Brian Paul/**
683813870fd9588de101f68728507cff726d7513695Brian Paul * XXX possible replacement for _mesa_format_to_type_and_comps()
684813870fd9588de101f68728507cff726d7513695Brian Paul * Used for mipmap generation.
685813870fd9588de101f68728507cff726d7513695Brian Paul */
686813870fd9588de101f68728507cff726d7513695Brian Paulvoid
687813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_format_to_type_and_comps2(gl_format format,
688813870fd9588de101f68728507cff726d7513695Brian Paul                                GLenum *datatype, GLuint *comps)
689813870fd9588de101f68728507cff726d7513695Brian Paul{
690813870fd9588de101f68728507cff726d7513695Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
691813870fd9588de101f68728507cff726d7513695Brian Paul
692813870fd9588de101f68728507cff726d7513695Brian Paul   /* We use a bunch of heuristics here.  If this gets too ugly we could
693813870fd9588de101f68728507cff726d7513695Brian Paul    * just encode the info the in the gl_format_info structures.
694813870fd9588de101f68728507cff726d7513695Brian Paul    */
695813870fd9588de101f68728507cff726d7513695Brian Paul   if (info->BaseFormat == GL_RGB ||
696813870fd9588de101f68728507cff726d7513695Brian Paul       info->BaseFormat == GL_RGBA ||
697813870fd9588de101f68728507cff726d7513695Brian Paul       info->BaseFormat == GL_ALPHA) {
698813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = ((info->RedBits > 0) +
699813870fd9588de101f68728507cff726d7513695Brian Paul                (info->GreenBits > 0) +
700813870fd9588de101f68728507cff726d7513695Brian Paul                (info->BlueBits > 0) +
701813870fd9588de101f68728507cff726d7513695Brian Paul                (info->AlphaBits > 0));
702813870fd9588de101f68728507cff726d7513695Brian Paul
703813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->DataType== GL_FLOAT) {
704813870fd9588de101f68728507cff726d7513695Brian Paul         if (info->RedBits == 32)
705813870fd9588de101f68728507cff726d7513695Brian Paul            *datatype = GL_FLOAT;
706813870fd9588de101f68728507cff726d7513695Brian Paul         else
707813870fd9588de101f68728507cff726d7513695Brian Paul            *datatype = GL_HALF_FLOAT;
708813870fd9588de101f68728507cff726d7513695Brian Paul      }
709813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->GreenBits == 3) {
710813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_BYTE_3_3_2;
711813870fd9588de101f68728507cff726d7513695Brian Paul      }
712813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->GreenBits == 4) {
713813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
714813870fd9588de101f68728507cff726d7513695Brian Paul      }
715813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->GreenBits == 6) {
716813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT_5_6_5;
717813870fd9588de101f68728507cff726d7513695Brian Paul      }
718813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->GreenBits == 5) {
719813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
720813870fd9588de101f68728507cff726d7513695Brian Paul      }
721813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->RedBits == 8) {
722813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_BYTE;
723813870fd9588de101f68728507cff726d7513695Brian Paul      }
724813870fd9588de101f68728507cff726d7513695Brian Paul      else {
725813870fd9588de101f68728507cff726d7513695Brian Paul         ASSERT(info->RedBits == 16);
726813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT;
727813870fd9588de101f68728507cff726d7513695Brian Paul      }
728813870fd9588de101f68728507cff726d7513695Brian Paul   }
729813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_LUMINANCE ||
730813870fd9588de101f68728507cff726d7513695Brian Paul            info->BaseFormat == GL_LUMINANCE_ALPHA) {
731813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = ((info->LuminanceBits > 0) +
732813870fd9588de101f68728507cff726d7513695Brian Paul                (info->AlphaBits > 0));
733813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->LuminanceBits == 8) {
734813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_BYTE;
735813870fd9588de101f68728507cff726d7513695Brian Paul      }
736813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->LuminanceBits == 16) {
737813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT;
738813870fd9588de101f68728507cff726d7513695Brian Paul      }
739813870fd9588de101f68728507cff726d7513695Brian Paul      else {
740813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_FLOAT;
741813870fd9588de101f68728507cff726d7513695Brian Paul      }
742813870fd9588de101f68728507cff726d7513695Brian Paul   }
743813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_INTENSITY) {
744813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
745813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->IntensityBits == 8) {
746813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_BYTE;
747813870fd9588de101f68728507cff726d7513695Brian Paul      }
748813870fd9588de101f68728507cff726d7513695Brian Paul      else if (info->IntensityBits == 16) {
749813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT;
750813870fd9588de101f68728507cff726d7513695Brian Paul      }
751813870fd9588de101f68728507cff726d7513695Brian Paul      else {
752813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_FLOAT;
753813870fd9588de101f68728507cff726d7513695Brian Paul      }
754813870fd9588de101f68728507cff726d7513695Brian Paul   }
755813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_COLOR_INDEX) {
756813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
757813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
758813870fd9588de101f68728507cff726d7513695Brian Paul   }
759813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_DEPTH_COMPONENT) {
760813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
761813870fd9588de101f68728507cff726d7513695Brian Paul      if (info->DepthBits == 16) {
762813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_SHORT;
763813870fd9588de101f68728507cff726d7513695Brian Paul      }
764813870fd9588de101f68728507cff726d7513695Brian Paul      else {
765813870fd9588de101f68728507cff726d7513695Brian Paul         ASSERT(info->DepthBits == 32);
766813870fd9588de101f68728507cff726d7513695Brian Paul         *datatype = GL_UNSIGNED_INT;
767813870fd9588de101f68728507cff726d7513695Brian Paul      }
768813870fd9588de101f68728507cff726d7513695Brian Paul   }
769813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_DEPTH_STENCIL) {
770813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
771813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_INT;
772813870fd9588de101f68728507cff726d7513695Brian Paul   }
773813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_YCBCR_MESA) {
774813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
775813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_SHORT;
776813870fd9588de101f68728507cff726d7513695Brian Paul   }
777813870fd9588de101f68728507cff726d7513695Brian Paul   else if (info->BaseFormat == GL_DUDV_ATI) {
778813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 2;
779813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_BYTE;
780813870fd9588de101f68728507cff726d7513695Brian Paul   }
781813870fd9588de101f68728507cff726d7513695Brian Paul   else {
782813870fd9588de101f68728507cff726d7513695Brian Paul      /* any other formats? */
783813870fd9588de101f68728507cff726d7513695Brian Paul      ASSERT(0);
784813870fd9588de101f68728507cff726d7513695Brian Paul      *comps = 1;
785813870fd9588de101f68728507cff726d7513695Brian Paul      *datatype = GL_UNSIGNED_BYTE;
786813870fd9588de101f68728507cff726d7513695Brian Paul   }
787813870fd9588de101f68728507cff726d7513695Brian Paul}
788813870fd9588de101f68728507cff726d7513695Brian Paul
789c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul
790c28d78f8324cfc17936af63c258a1cc55d590d60Brian PaulGLint
791c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname)
792c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul{
793c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   const struct gl_format_info *info = _mesa_get_format_info(format);
794c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul
795c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   switch (pname) {
796c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_RED_SIZE:
797c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->RedBits;
798c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_GREEN_SIZE:
799c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->GreenBits;
800c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_BLUE_SIZE:
801c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->BlueBits;
802c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_ALPHA_SIZE:
803c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->AlphaBits;
804c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_INTENSITY_SIZE:
805c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->IntensityBits;
806c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
807c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->LuminanceBits;
808c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_INDEX_SIZE_EXT:
809c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->IndexBits;
810c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_DEPTH_SIZE_ARB:
811c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->DepthBits;
812c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   case GL_TEXTURE_STENCIL_SIZE_EXT:
813c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return info->StencilBits;
814c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   default:
815c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()");
816c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul      return 0;
817c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul   }
818c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul}
819