19ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen/*
29ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Mesa 3-D graphics library
39ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen *
49ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
59ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Copyright (c) 2008-2009  VMware, Inc.
69ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Copyright (c) 2012 Intel Corporation
79ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen *
89ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Permission is hereby granted, free of charge, to any person obtaining a
99ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * copy of this software and associated documentation files (the "Software"),
109ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * to deal in the Software without restriction, including without limitation
119ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * the rights to use, copy, modify, merge, publish, distribute, sublicense,
129ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * and/or sell copies of the Software, and to permit persons to whom the
139ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Software is furnished to do so, subject to the following conditions:
149ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen *
159ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * The above copyright notice and this permission notice shall be included
169ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * in all copies or substantial portions of the Software.
179ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen *
189ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
199ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
209ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
219ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
229ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
239ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
249ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen */
259ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
269ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
278b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul#include "context.h"
289ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen#include "glformats.h"
299ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
309ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
319ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen/**
32a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \return GL_TRUE if type is packed pixel type, GL_FALSE otherwise.
33a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
34a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLboolean
35a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_type_is_packed(GLenum type)
36a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
37a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (type) {
38a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_3_3_2:
39a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_2_3_3_REV:
40a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case MESA_UNSIGNED_BYTE_4_4:
41a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5:
42a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5_REV:
43a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4:
44a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
45a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_5_5_1:
46a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
47a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8:
48a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8_REV:
49a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10_10_10_2:
50a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_2_10_10_10_REV:
51a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_MESA:
52a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_REV_MESA:
53a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_24_8_EXT:
54a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_5_9_9_9_REV:
55a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10F_11F_11F_REV:
56a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
57a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_TRUE;
58a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
59a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
60a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   return GL_FALSE;
61a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
62a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
63a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
64a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
65a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * Get the size of a GL data type.
66a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
67a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \param type GL data type.
68a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
69a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \return the size, in bytes, of the given data type, 0 if a GL_BITMAP, or -1
70a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * if an invalid type enum.
71a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
72a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLint
73a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_sizeof_type(GLenum type)
74a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
75a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (type) {
76a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BITMAP:
77a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 0;
78a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE:
79a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLubyte);
80a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BYTE:
81a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLbyte);
82a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT:
83a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLushort);
84a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_SHORT:
85a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLshort);
86a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT:
87a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLuint);
88a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_INT:
89a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLint);
90a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT:
91a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLfloat);
92a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_DOUBLE:
93a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLdouble);
94a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_HALF_FLOAT_ARB:
95a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLhalfARB);
96a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FIXED:
97a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLfixed);
98a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   default:
99a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return -1;
100a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
101a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
102a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
103a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
104a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
105a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * Same as _mesa_sizeof_type() but also accepting the packed pixel
106a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * format data types.
107a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
108a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLint
109a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_sizeof_packed_type(GLenum type)
110a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
111a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (type) {
112a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BITMAP:
113a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 0;
114a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE:
115a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLubyte);
116a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BYTE:
117a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLbyte);
118a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT:
119a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLushort);
120a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_SHORT:
121a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLshort);
122a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT:
123a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLuint);
124a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_INT:
125a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLint);
126a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_HALF_FLOAT_ARB:
127a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLhalfARB);
128a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT:
129a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLfloat);
130a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_3_3_2:
131a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_2_3_3_REV:
132a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case MESA_UNSIGNED_BYTE_4_4:
133a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLubyte);
134a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5:
135a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5_REV:
136a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4:
137a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
138a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_5_5_1:
139a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
140a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_MESA:
141a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_REV_MESA:
142a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLushort);
143a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8:
144a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8_REV:
145a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10_10_10_2:
146a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_2_10_10_10_REV:
147a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_24_8_EXT:
148a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_5_9_9_9_REV:
149a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10F_11F_11F_REV:
150a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return sizeof(GLuint);
151a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
152a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 8;
153a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   default:
154a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return -1;
155a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
156a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
157a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
158a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
159a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
160a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * Get the number of components in a pixel format.
161a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
162a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \param format pixel format.
163a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
164a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \return the number of components in the given format, or -1 if a bad format.
165a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
166a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLint
167a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_components_in_format(GLenum format)
168a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
169a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (format) {
170a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_COLOR_INDEX:
171a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_STENCIL_INDEX:
172a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_DEPTH_COMPONENT:
173a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RED:
174a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RED_INTEGER_EXT:
175a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_GREEN:
176a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_GREEN_INTEGER_EXT:
177a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BLUE:
178a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BLUE_INTEGER_EXT:
179a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_ALPHA:
180a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_ALPHA_INTEGER_EXT:
181a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_LUMINANCE:
182a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_LUMINANCE_INTEGER_EXT:
183a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_INTENSITY:
184a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 1;
185a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
186a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_LUMINANCE_ALPHA:
187a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
188a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RG:
189a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_YCBCR_MESA:
190a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_DEPTH_STENCIL_EXT:
191a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_DUDV_ATI:
192a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_DU8DV8_ATI:
193a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RG_INTEGER:
194a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 2;
195a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
196a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RGB:
197a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BGR:
198a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RGB_INTEGER_EXT:
199a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BGR_INTEGER_EXT:
200a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 3;
201a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
202a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RGBA:
203a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BGRA:
204a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_ABGR_EXT:
205a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RGBA_INTEGER_EXT:
206a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BGRA_INTEGER_EXT:
207a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 4;
208a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
209a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   default:
210a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return -1;
211a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
212a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
213a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
214a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
215a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
216a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * Get the bytes per pixel of pixel format type pair.
217a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
218a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \param format pixel format.
219a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \param type pixel type.
220a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul *
221a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * \return bytes per pixel, or -1 if a bad format or type was given.
222a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
223a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLint
224a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_bytes_per_pixel(GLenum format, GLenum type)
225a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
226a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   GLint comps = _mesa_components_in_format(format);
227a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   if (comps < 0)
228a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return -1;
229a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
230a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (type) {
231a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BITMAP:
232a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return 0;  /* special case */
233a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_BYTE:
234a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE:
235a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return comps * sizeof(GLubyte);
236a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_SHORT:
237a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT:
238a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return comps * sizeof(GLshort);
239a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_INT:
240a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT:
241a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return comps * sizeof(GLint);
242a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT:
243a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return comps * sizeof(GLfloat);
244a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_HALF_FLOAT_ARB:
245a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return comps * sizeof(GLhalfARB);
246a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_3_3_2:
247a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_BYTE_2_3_3_REV:
248a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGB || format == GL_BGR ||
249a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul          format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT)
250a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLubyte);
251a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
252a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;  /* error */
253a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5:
254a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_6_5_REV:
255a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGB || format == GL_BGR ||
256a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul          format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT)
257a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLushort);
258a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
259a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;  /* error */
260a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4:
261a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
262a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_5_5_5_1:
263a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
264a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT ||
265a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul          format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT)
266a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLushort);
267a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
268a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
269a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8:
270a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_8_8_8_8_REV:
271a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10_10_10_2:
272a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_2_10_10_10_REV:
273a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT ||
274a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul          format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT)
275a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLuint);
276a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
277a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
278a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_MESA:
279a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_SHORT_8_8_REV_MESA:
280a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_YCBCR_MESA)
281a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLushort);
282a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
283a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
284a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_24_8_EXT:
285a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_DEPTH_STENCIL_EXT)
286a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLuint);
287a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
288a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
289a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_5_9_9_9_REV:
290a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGB)
291a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLuint);
292a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
293a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
294a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_UNSIGNED_INT_10F_11F_11F_REV:
295a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_RGB)
296a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return sizeof(GLuint);
297a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
298a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
299a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
300a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (format == GL_DEPTH_STENCIL)
301a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return 8;
302a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      else
303a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul         return -1;
304a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   default:
305a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return -1;
306a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
307a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
308a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
309a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
310a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
3119ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Test if the given format is an integer (non-normalized) format.
3129ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen */
3139ad8f431b2a47060bf05517246ab0fa8d249c800Jordan JustenGLboolean
3149ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen_mesa_is_enum_format_integer(GLenum format)
3159ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen{
3169ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   switch (format) {
3179ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   /* generic integer formats */
3189ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RED_INTEGER_EXT:
3199ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_GREEN_INTEGER_EXT:
3209ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BLUE_INTEGER_EXT:
3219ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA_INTEGER_EXT:
3229ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB_INTEGER_EXT:
3239ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA_INTEGER_EXT:
3249ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BGR_INTEGER_EXT:
3259ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BGRA_INTEGER_EXT:
3269ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_INTEGER_EXT:
3279ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA_INTEGER_EXT:
3289ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG_INTEGER:
3299ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   /* specific integer formats */
3309ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA32UI_EXT:
3319ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB32UI_EXT:
3329ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG32UI:
3339ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R32UI:
3349ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA32UI_EXT:
3359ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY32UI_EXT:
3369ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE32UI_EXT:
3379ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA32UI_EXT:
3389ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA16UI_EXT:
3399ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB16UI_EXT:
3409ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG16UI:
3419ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R16UI:
3429ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA16UI_EXT:
3439ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY16UI_EXT:
3449ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE16UI_EXT:
3459ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA16UI_EXT:
3469ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA8UI_EXT:
3479ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB8UI_EXT:
3489ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG8UI:
3499ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R8UI:
3509ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA8UI_EXT:
3519ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY8UI_EXT:
3529ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE8UI_EXT:
3539ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA8UI_EXT:
3549ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA32I_EXT:
3559ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB32I_EXT:
3569ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG32I:
3579ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R32I:
3589ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA32I_EXT:
3599ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY32I_EXT:
3609ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE32I_EXT:
3619ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA32I_EXT:
3629ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA16I_EXT:
3639ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB16I_EXT:
3649ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG16I:
3659ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R16I:
3669ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA16I_EXT:
3679ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY16I_EXT:
3689ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE16I_EXT:
3699ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA16I_EXT:
3709ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA8I_EXT:
3719ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB8I_EXT:
3729ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG8I:
3739ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_R8I:
3749ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA8I_EXT:
3759ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INTENSITY8I_EXT:
3769ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE8I_EXT:
3779ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA8I_EXT:
3789ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB10_A2UI:
3799ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_TRUE;
3809ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   default:
3819ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_FALSE;
3829ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   }
3839ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen}
3849ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
3859ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
3869ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen/**
3879ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Test if the given type is an integer (non-normalized) format.
3889ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen */
3899ad8f431b2a47060bf05517246ab0fa8d249c800Jordan JustenGLboolean
3909ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen_mesa_is_type_integer(GLenum type)
3919ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen{
3929ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   switch (type) {
3939ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_INT:
3949ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT:
3959ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_SHORT:
3969ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT:
3979ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BYTE:
3989ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_BYTE:
3999ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_TRUE;
4009ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   default:
4019ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_FALSE;
4029ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   }
4039ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen}
4049ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4059ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4069ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen/**
4079ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Test if the given format or type is an integer (non-normalized) format.
4089ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen */
4099ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justenextern GLboolean
4109ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen_mesa_is_enum_format_or_type_integer(GLenum format, GLenum type)
4119ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen{
4129ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   return _mesa_is_enum_format_integer(format) || _mesa_is_type_integer(type);
4139ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen}
4149ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4159ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4169ad8f431b2a47060bf05517246ab0fa8d249c800Jordan JustenGLboolean
4179ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen_mesa_is_type_unsigned(GLenum type)
4189ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen{
4199ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   switch (type) {
4209ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT:
4219ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT_8_8_8_8:
4229ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT_8_8_8_8_REV:
4239ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT_10_10_10_2:
4249ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_INT_2_10_10_10_REV:
4259ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4269ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT:
4279ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_4_4_4_4:
4289ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_5_5_5_1:
4299ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_5_6_5:
4309ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_5_6_5_REV:
4319ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
4329ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
4339ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_8_8_MESA:
4349ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_SHORT_8_8_REV_MESA:
4359ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4369ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_BYTE:
4379ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_BYTE_3_3_2:
4389ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_UNSIGNED_BYTE_2_3_3_REV:
4399ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_TRUE;
4409ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4419ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   default:
4429ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_FALSE;
4439ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   }
4449ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen}
4459ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4469ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
4479ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen/**
4488b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a color/RGBA format (i.e., not color
4498b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * index, depth, stencil, etc).
4508b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * \param format  the image format value (may by an internal texture format)
4518b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * \return GL_TRUE if its a color/RGBA format, GL_FALSE otherwise.
4528b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
4538b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
4548b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_color_format(GLenum format)
4558b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
4568b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
4578b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RED:
4588b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_GREEN:
4598b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BLUE:
4608b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA:
4618b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA4:
4628b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA8:
4638b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA12:
4648b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA16:
4658b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case 1:
4668b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE:
4678b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE4:
4688b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8:
4698b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE12:
4708b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16:
4718b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case 2:
4728b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA:
4738b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE4_ALPHA4:
4748b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE6_ALPHA2:
4758b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8_ALPHA8:
4768b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE12_ALPHA4:
4778b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE12_ALPHA12:
4788b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16_ALPHA16:
4798b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY:
4808b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY4:
4818b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY8:
4828b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY12:
4838b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY16:
4848b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R8:
4858b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R16:
4868b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG:
4878b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG8:
4888b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG16:
4898b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case 3:
4908b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB:
4918b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BGR:
4928b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R3_G3_B2:
4938b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB4:
4948b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB5:
4958b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB565:
4968b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB8:
4978b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB10:
4988b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB12:
4998b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB16:
5008b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case 4:
5018b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ABGR_EXT:
5028b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA:
5038b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BGRA:
5048b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA2:
5058b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA4:
5068b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB5_A1:
5078b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA8:
5088b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB10_A2:
5098b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA12:
5108b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA16:
5118b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      /* float texture formats */
5128b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA16F_ARB:
5138b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA32F_ARB:
5148b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16F_ARB:
5158b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE32F_ARB:
5168b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA16F_ARB:
5178b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA32F_ARB:
5188b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY16F_ARB:
5198b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY32F_ARB:
5208b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R16F:
5218b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R32F:
5228b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG16F:
5238b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG32F:
5248b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB16F_ARB:
5258b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB32F_ARB:
5268b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA16F_ARB:
5278b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA32F_ARB:
5288b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      /* compressed formats */
5298b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_ALPHA:
5308b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_LUMINANCE:
5318b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_LUMINANCE_ALPHA:
5328b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_INTENSITY:
5338b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RED:
5348b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RG:
5358b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGB:
5368b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGBA:
5378b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB_S3TC:
5388b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB4_S3TC:
5398b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA_S3TC:
5408b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA4_S3TC:
5418b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
5428b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
5438b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
5448b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
5458b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGB_FXT1_3DFX:
5468b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RGBA_FXT1_3DFX:
5478b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul#if FEATURE_EXT_texture_sRGB
5488b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SRGB_EXT:
5498b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SRGB8_EXT:
5508b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SRGB_ALPHA_EXT:
5518b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SRGB8_ALPHA8_EXT:
5528b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SLUMINANCE_ALPHA_EXT:
5538b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SLUMINANCE8_ALPHA8_EXT:
5548b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SLUMINANCE_EXT:
5558b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_SLUMINANCE8_EXT:
5568b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_EXT:
5578b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
5588b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_ALPHA_EXT:
5598b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
5608b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
5618b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
5628b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SLUMINANCE_EXT:
5638b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
5648b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul#endif /* FEATURE_EXT_texture_sRGB */
5658b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RED_RGTC1:
5668b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SIGNED_RED_RGTC1:
5678b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_RG_RGTC2:
5688b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SIGNED_RG_RGTC2:
5698b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
5708b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
5718b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
5728b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
5738b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
5748b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ETC1_RGB8_OES:
5758b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      /* generic integer formats */
5768b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RED_INTEGER_EXT:
5778b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_GREEN_INTEGER_EXT:
5788b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BLUE_INTEGER_EXT:
5798b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA_INTEGER_EXT:
5808b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB_INTEGER_EXT:
5818b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA_INTEGER_EXT:
5828b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BGR_INTEGER_EXT:
5838b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_BGRA_INTEGER_EXT:
5848b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG_INTEGER:
5858b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_INTEGER_EXT:
5868b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA_INTEGER_EXT:
5878b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      /* sized integer formats */
5888b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA32UI_EXT:
5898b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB32UI_EXT:
5908b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG32UI:
5918b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R32UI:
5928b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA32UI_EXT:
5938b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY32UI_EXT:
5948b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE32UI_EXT:
5958b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA32UI_EXT:
5968b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA16UI_EXT:
5978b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB16UI_EXT:
5988b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG16UI:
5998b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R16UI:
6008b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA16UI_EXT:
6018b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY16UI_EXT:
6028b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16UI_EXT:
6038b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA16UI_EXT:
6048b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA8UI_EXT:
6058b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB8UI_EXT:
6068b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG8UI:
6078b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R8UI:
6088b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA8UI_EXT:
6098b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY8UI_EXT:
6108b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8UI_EXT:
6118b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA8UI_EXT:
6128b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA32I_EXT:
6138b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB32I_EXT:
6148b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG32I:
6158b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R32I:
6168b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA32I_EXT:
6178b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY32I_EXT:
6188b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE32I_EXT:
6198b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA32I_EXT:
6208b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA16I_EXT:
6218b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB16I_EXT:
6228b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG16I:
6238b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R16I:
6248b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA16I_EXT:
6258b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY16I_EXT:
6268b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16I_EXT:
6278b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA16I_EXT:
6288b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA8I_EXT:
6298b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB8I_EXT:
6308b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG8I:
6318b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R8I:
6328b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA8I_EXT:
6338b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY8I_EXT:
6348b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8I_EXT:
6358b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA8I_EXT:
6368b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      /* signed, normalized texture formats */
6378b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RED_SNORM:
6388b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R8_SNORM:
6398b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R16_SNORM:
6408b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG_SNORM:
6418b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG8_SNORM:
6428b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RG16_SNORM:
6438b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB_SNORM:
6448b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB8_SNORM:
6458b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB16_SNORM:
6468b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA_SNORM:
6478b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA8_SNORM:
6488b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGBA16_SNORM:
6498b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA_SNORM:
6508b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA8_SNORM:
6518b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_ALPHA16_SNORM:
6528b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_SNORM:
6538b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8_SNORM:
6548b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16_SNORM:
6558b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE_ALPHA_SNORM:
6568b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE8_ALPHA8_SNORM:
6578b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_LUMINANCE16_ALPHA16_SNORM:
6588b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY_SNORM:
6598b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY8_SNORM:
6608b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_INTENSITY16_SNORM:
6618b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB9_E5:
6628b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_R11F_G11F_B10F:
6638b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_RGB10_A2UI:
6648b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
6658b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_YCBCR_MESA:  /* not considered to be RGB */
6668b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         /* fall-through */
6678b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
6688b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
6698b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
6708b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
6718b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
6728b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
6738b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
6748b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a depth component format.
6758b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
6768b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
6778b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_depth_format(GLenum format)
6788b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
6798b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
6808b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT:
6818b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT16:
6828b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT24:
6838b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT32:
6848b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT32F:
6858b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
6868b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
6878b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
6888b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
6898b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
6908b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
6918b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
6928b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
6938b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a stencil format.
6948b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
6958b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
6968b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_stencil_format(GLenum format)
6978b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
6988b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
6998b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX:
7008b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
7018b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
7028b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
7038b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
7048b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
7058b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7068b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7078b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
7088b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a YCbCr format.
7098b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
7108b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
7118b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_ycbcr_format(GLenum format)
7128b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
7138b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
7148b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_YCBCR_MESA:
7158b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
7168b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
7178b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
7188b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
7198b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
7208b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7218b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7228b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
7238b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a depth+stencil format.
7248b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
7258b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
7268b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_depthstencil_format(GLenum format)
7278b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
7288b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
7298b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH24_STENCIL8_EXT:
7308b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_STENCIL_EXT:
7318b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH32F_STENCIL8:
7328b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
7338b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
7348b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
7358b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
7368b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
7378b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7388b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7398b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
7408b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a depth or stencil format.
7418b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
7428b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
7438b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_depth_or_stencil_format(GLenum format)
7448b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
7458b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
7468b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT:
7478b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT16:
7488b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT24:
7498b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT32:
7508b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX:
7518b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX1_EXT:
7528b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX4_EXT:
7538b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX8_EXT:
7548b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_STENCIL_INDEX16_EXT:
7558b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_STENCIL_EXT:
7568b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH24_STENCIL8_EXT:
7578b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH_COMPONENT32F:
7588b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DEPTH32F_STENCIL8:
7598b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
7608b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
7618b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
7628b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
7638b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
7648b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7658b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7668b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
7678b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if the given image format is a dudv format.
7688b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
7698b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
7708b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_dudv_format(GLenum format)
7718b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
7728b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
7738b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DUDV_ATI:
7748b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      case GL_DU8DV8_ATI:
7758b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_TRUE;
7768b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      default:
7778b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         return GL_FALSE;
7788b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
7798b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
7808b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7818b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
7828b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
7838b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * Test if an image format is a supported compressed format.
7848b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * \param format the internal format token provided by the user.
7858b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul * \return GL_TRUE if compressed, GL_FALSE if uncompressed
7868b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul */
7878b762ebd72c1bb1a9827a667ad55ba9516505adfBrian PaulGLboolean
7888b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul_mesa_is_compressed_format(struct gl_context *ctx, GLenum format)
7898b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul{
7908b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   switch (format) {
7918b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
7928b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
793dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return ctx->Extensions.EXT_texture_compression_s3tc;
7948b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
7958b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
796dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_desktop_gl(ctx)
797dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.EXT_texture_compression_s3tc;
7988b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_RGB_S3TC:
7998b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_RGB4_S3TC:
8008b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_RGBA_S3TC:
8018b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_RGBA4_S3TC:
802dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.S3_s3tc;
8038b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
8048b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
8058b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
8068b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
807dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_desktop_gl(ctx)
808dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.EXT_texture_sRGB
8098b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul         && ctx->Extensions.EXT_texture_compression_s3tc;
8108b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGB_FXT1_3DFX:
8118b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RGBA_FXT1_3DFX:
812dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_desktop_gl(ctx)
813dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.TDFX_texture_compression_FXT1;
8148b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RED_RGTC1:
8158b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SIGNED_RED_RGTC1:
8168b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_RG_RGTC2:
8178b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SIGNED_RG_RGTC2:
818dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_desktop_gl(ctx)
819dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.ARB_texture_compression_rgtc;
8208b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
8218b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
8228b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
8238b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
824dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return ctx->API == API_OPENGL
825dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.EXT_texture_compression_latc;
8268b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
827dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return ctx->API == API_OPENGL
828dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.ATI_texture_compression_3dc;
8298b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_ETC1_RGB8_OES:
830dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick      return _mesa_is_gles(ctx)
831dd0eb004874645135b9aaac3ebbd0aaf274079eaIan Romanick         && ctx->Extensions.OES_compressed_ETC1_RGB8_texture;
8328b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul#if FEATURE_ES
8338b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE4_RGB8_OES:
8348b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE4_RGBA8_OES:
8358b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE4_R5_G6_B5_OES:
8368b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE4_RGBA4_OES:
8378b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE4_RGB5_A1_OES:
8388b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE8_RGB8_OES:
8398b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE8_RGBA8_OES:
8408b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE8_R5_G6_B5_OES:
8418b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE8_RGBA4_OES:
8428b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   case GL_PALETTE8_RGB5_A1_OES:
8438b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      return ctx->API == API_OPENGLES;
8448b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul#endif
8458b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   default:
8468b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul      return GL_FALSE;
8478b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul   }
8488b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul}
8498b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
8508b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul
8518b762ebd72c1bb1a9827a667ad55ba9516505adfBrian Paul/**
8529ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen * Convert various base formats to the cooresponding integer format.
8539ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen */
8549ad8f431b2a47060bf05517246ab0fa8d249c800Jordan JustenGLenum
8559ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen_mesa_base_format_to_integer_format(GLenum format)
8569ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen{
8579ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   switch(format) {
8589ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RED:
8599ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_RED_INTEGER;
8609ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_GREEN:
8619ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_GREEN_INTEGER;
8629ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BLUE:
8639ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_BLUE_INTEGER;
8649ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RG:
8659ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_RG_INTEGER;
8669ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGB:
8679ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_RGB_INTEGER;
8689ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_RGBA:
8699ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_RGBA_INTEGER;
8709ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BGR:
8719ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_BGR_INTEGER;
8729ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_BGRA:
8739ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_BGRA_INTEGER;
8749ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_ALPHA:
8759ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_ALPHA_INTEGER;
8769ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE:
8779ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_LUMINANCE_INTEGER_EXT;
8789ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   case GL_LUMINANCE_ALPHA:
8799ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen      return GL_LUMINANCE_ALPHA_INTEGER_EXT;
8809ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   }
8819ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
8829ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen   return format;
8839ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen}
8849ad8f431b2a47060bf05517246ab0fa8d249c800Jordan Justen
885a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
886a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul/**
887a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * Does the given base texture/renderbuffer format have the channel
888a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul * named by 'pname'?
889a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul */
890a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian PaulGLboolean
891a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul_mesa_base_format_has_channel(GLenum base_format, GLenum pname)
892a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul{
893a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   switch (pname) {
894a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_RED_SIZE:
895a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_RED_TYPE:
896a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_RED_SIZE_EXT:
897a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
898a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_RED ||
899a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RG ||
900a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RGB ||
901a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RGBA) {
902a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
903a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
904a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
905a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_GREEN_SIZE:
906a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_GREEN_TYPE:
907a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_GREEN_SIZE_EXT:
908a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
909a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_RG ||
910a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RGB ||
911a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RGBA) {
912a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
913a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
914a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
915a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_BLUE_SIZE:
916a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_BLUE_TYPE:
917a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_BLUE_SIZE_EXT:
918a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
919a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_RGB ||
920a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_RGBA) {
921a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
922a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
923a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
924a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_ALPHA_SIZE:
925a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_ALPHA_TYPE:
926a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_ALPHA_SIZE_EXT:
927a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
928a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_RGBA ||
929a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_ALPHA ||
930a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_LUMINANCE_ALPHA) {
931a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
932a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
933a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
934a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_LUMINANCE_SIZE:
935a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_LUMINANCE_TYPE:
936a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_LUMINANCE ||
937a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_LUMINANCE_ALPHA) {
938a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
939a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
940a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
941a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_INTENSITY_SIZE:
942a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_INTENSITY_TYPE:
943a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_INTENSITY) {
944a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
945a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
946a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
947a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_DEPTH_SIZE:
948a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_TEXTURE_DEPTH_TYPE:
949a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_DEPTH_SIZE_EXT:
950a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
951a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_DEPTH_STENCIL ||
952a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_DEPTH_COMPONENT) {
953a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
954a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
955a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
956a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_RENDERBUFFER_STENCIL_SIZE_EXT:
957a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
958a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      if (base_format == GL_DEPTH_STENCIL ||
959a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	  base_format == GL_STENCIL_INDEX) {
960a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul	 return GL_TRUE;
961a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      }
962a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
963a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   default:
964a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      _mesa_warning(NULL, "%s: Unexpected channel token 0x%x\n",
965a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul		    __FUNCTION__, pname);
966a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul      return GL_FALSE;
967a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   }
968a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul
969a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul   return GL_FALSE;
970a1287f549a3e6527b8cf3bf5b5f563ba63c6f48cBrian Paul}
9717e18a039ee7a402bac4882ae793824d6523061faBrian Paul
9727e18a039ee7a402bac4882ae793824d6523061faBrian Paul
9737e18a039ee7a402bac4882ae793824d6523061faBrian Paul/**
974a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul * If format is a generic compressed format, return the corresponding
975a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul * non-compressed format.  For other formats, return the format as-is.
976a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul */
977a3af27e99362c0da9f467a39427d32d1270a720fBrian PaulGLenum
978a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul_mesa_generic_compressed_format_to_uncompressed_format(GLenum format)
979a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul{
980a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   switch (format) {
981a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_RED:
982a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_RED;
983a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_RG:
984a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_RG;
985a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_RGB:
986a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_RGB;
987a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_RGBA:
988a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_RGBA;
989a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_ALPHA:
990a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_ALPHA;
991a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_LUMINANCE:
992a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_LUMINANCE;
993a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_LUMINANCE_ALPHA:
994a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_LUMINANCE_ALPHA;
995a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_INTENSITY:
996a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_INTENSITY;
997a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   /* sRGB formats */
998a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_SRGB:
999a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_SRGB;
1000a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_SRGB_ALPHA:
1001a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_SRGB_ALPHA;
1002a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_SLUMINANCE:
1003a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_SLUMINANCE;
1004a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   case GL_COMPRESSED_SLUMINANCE_ALPHA:
1005a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return GL_SLUMINANCE_ALPHA;
1006a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   default:
1007a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul      return format;
1008a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul   }
1009a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul}
1010a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul
1011a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul
1012a3af27e99362c0da9f467a39427d32d1270a720fBrian Paul/**
10137e18a039ee7a402bac4882ae793824d6523061faBrian Paul * Do error checking of format/type combinations for glReadPixels,
10147e18a039ee7a402bac4882ae793824d6523061faBrian Paul * glDrawPixels and glTex[Sub]Image.  Note that depending on the format
10157e18a039ee7a402bac4882ae793824d6523061faBrian Paul * and type values, we may either generate GL_INVALID_OPERATION or
10167e18a039ee7a402bac4882ae793824d6523061faBrian Paul * GL_INVALID_ENUM.
10177e18a039ee7a402bac4882ae793824d6523061faBrian Paul *
10187e18a039ee7a402bac4882ae793824d6523061faBrian Paul * \param format pixel format.
10197e18a039ee7a402bac4882ae793824d6523061faBrian Paul * \param type pixel type.
10207e18a039ee7a402bac4882ae793824d6523061faBrian Paul *
10217e18a039ee7a402bac4882ae793824d6523061faBrian Paul * \return GL_INVALID_ENUM, GL_INVALID_OPERATION or GL_NO_ERROR
10227e18a039ee7a402bac4882ae793824d6523061faBrian Paul */
10237e18a039ee7a402bac4882ae793824d6523061faBrian PaulGLenum
10247e18a039ee7a402bac4882ae793824d6523061faBrian Paul_mesa_error_check_format_and_type(const struct gl_context *ctx,
10257e18a039ee7a402bac4882ae793824d6523061faBrian Paul                                  GLenum format, GLenum type)
10267e18a039ee7a402bac4882ae793824d6523061faBrian Paul{
10277e18a039ee7a402bac4882ae793824d6523061faBrian Paul   /* special type-based checks (see glReadPixels, glDrawPixels error lists) */
10287e18a039ee7a402bac4882ae793824d6523061faBrian Paul   switch (type) {
10297e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_BITMAP:
10307e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format != GL_COLOR_INDEX && format != GL_STENCIL_INDEX) {
10317e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_ENUM;
10327e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10337e18a039ee7a402bac4882ae793824d6523061faBrian Paul      break;
10347e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10357e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_BYTE_3_3_2:
10367e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_BYTE_2_3_3_REV:
10377e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_5_6_5:
10387e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_5_6_5_REV:
10397e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format == GL_RGB) {
10407e18a039ee7a402bac4882ae793824d6523061faBrian Paul         break; /* OK */
10417e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10427e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format == GL_RGB_INTEGER_EXT &&
10437e18a039ee7a402bac4882ae793824d6523061faBrian Paul          ctx->Extensions.ARB_texture_rgb10_a2ui) {
10447e18a039ee7a402bac4882ae793824d6523061faBrian Paul         break; /* OK */
10457e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10467e18a039ee7a402bac4882ae793824d6523061faBrian Paul      return GL_INVALID_OPERATION;
10477e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10487e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4:
10497e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_4_4_4_4_REV:
10507e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_5_5_5_1:
10517e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_SHORT_1_5_5_5_REV:
10527e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_8_8_8_8:
10537e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_8_8_8_8_REV:
10547e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_10_10_10_2:
10557e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_2_10_10_10_REV:
10567e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format == GL_RGBA ||
10577e18a039ee7a402bac4882ae793824d6523061faBrian Paul          format == GL_BGRA ||
10587e18a039ee7a402bac4882ae793824d6523061faBrian Paul          format == GL_ABGR_EXT) {
10597e18a039ee7a402bac4882ae793824d6523061faBrian Paul         break; /* OK */
10607e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10617e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if ((format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT) &&
10627e18a039ee7a402bac4882ae793824d6523061faBrian Paul          ctx->Extensions.ARB_texture_rgb10_a2ui) {
10637e18a039ee7a402bac4882ae793824d6523061faBrian Paul         break; /* OK */
10647e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10657e18a039ee7a402bac4882ae793824d6523061faBrian Paul      return GL_INVALID_OPERATION;
10667e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10677e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_24_8:
10687e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (!ctx->Extensions.EXT_packed_depth_stencil) {
10697e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_ENUM;
10707e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10717e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format != GL_DEPTH_STENCIL) {
10727e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_OPERATION;
10737e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10747e18a039ee7a402bac4882ae793824d6523061faBrian Paul      return GL_NO_ERROR;
10757e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10767e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
10777e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (!ctx->Extensions.ARB_depth_buffer_float) {
10787e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_ENUM;
10797e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10807e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format != GL_DEPTH_STENCIL) {
10817e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_OPERATION;
10827e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10837e18a039ee7a402bac4882ae793824d6523061faBrian Paul      return GL_NO_ERROR;
10847e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10857e18a039ee7a402bac4882ae793824d6523061faBrian Paul   case GL_UNSIGNED_INT_10F_11F_11F_REV:
10867e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (!ctx->Extensions.EXT_packed_float) {
10877e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_ENUM;
10887e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10897e18a039ee7a402bac4882ae793824d6523061faBrian Paul      if (format != GL_RGB) {
10907e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_OPERATION;
10917e18a039ee7a402bac4882ae793824d6523061faBrian Paul      }
10927e18a039ee7a402bac4882ae793824d6523061faBrian Paul      return GL_NO_ERROR;
10937e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10947e18a039ee7a402bac4882ae793824d6523061faBrian Paul   default:
10957e18a039ee7a402bac4882ae793824d6523061faBrian Paul      ; /* fall-through */
10967e18a039ee7a402bac4882ae793824d6523061faBrian Paul   }
10977e18a039ee7a402bac4882ae793824d6523061faBrian Paul
10987e18a039ee7a402bac4882ae793824d6523061faBrian Paul   /* now, for each format, check the type for compatibility */
10997e18a039ee7a402bac4882ae793824d6523061faBrian Paul   switch (format) {
11007e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_COLOR_INDEX:
11017e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_STENCIL_INDEX:
11027e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
11037e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BITMAP:
11047e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
11057e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
11067e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
11077e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
11087e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
11097e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
11107e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
11117e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
11127e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
11137e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
11147e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11157e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
11167e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
11177e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
11187e18a039ee7a402bac4882ae793824d6523061faBrian Paul
11197e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RED:
11207e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_GREEN:
11217e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BLUE:
11227e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_ALPHA:
11237e18a039ee7a402bac4882ae793824d6523061faBrian Paul#if 0 /* not legal!  see table 3.6 of the 1.5 spec */
11247e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_INTENSITY:
11257e18a039ee7a402bac4882ae793824d6523061faBrian Paul#endif
11267e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_LUMINANCE:
11277e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_LUMINANCE_ALPHA:
11287e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_DEPTH_COMPONENT:
11297e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
11307e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
11317e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
11327e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
11337e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
11347e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
11357e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
11367e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
11377e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
11387e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
11397e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
11407e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11417e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
11427e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
11437e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
11447e18a039ee7a402bac4882ae793824d6523061faBrian Paul
11457e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RG:
11467e18a039ee7a402bac4882ae793824d6523061faBrian Paul	 if (!ctx->Extensions.ARB_texture_rg)
11477e18a039ee7a402bac4882ae793824d6523061faBrian Paul	    return GL_INVALID_ENUM;
11487e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
11497e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
11507e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
11517e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
11527e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
11537e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
11547e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
11557e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
11567e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
11577e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
11587e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
11597e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11607e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
11617e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
11627e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
11637e18a039ee7a402bac4882ae793824d6523061faBrian Paul
11647e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RGB:
11657e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
11667e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
11677e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
11687e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
11697e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
11707e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
11717e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
11727e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
11737e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE_3_3_2:
11747e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE_2_3_3_REV:
11757e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_6_5:
11767e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_6_5_REV:
11777e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
11787e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
11797e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
11807e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11817e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_5_9_9_9_REV:
11827e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.EXT_texture_shared_exponent
11837e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11847e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_10F_11F_11F_REV:
11857e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.EXT_packed_float
11867e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
11877e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
11887e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
11897e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
11907e18a039ee7a402bac4882ae793824d6523061faBrian Paul
11917e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BGR:
11927e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
11937e18a039ee7a402bac4882ae793824d6523061faBrian Paul            /* NOTE: no packed types are supported with BGR.  That's
11947e18a039ee7a402bac4882ae793824d6523061faBrian Paul             * intentional, according to the GL spec.
11957e18a039ee7a402bac4882ae793824d6523061faBrian Paul             */
11967e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
11977e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
11987e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
11997e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
12007e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
12017e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
12027e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
12037e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
12047e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
12057e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
12067e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
12077e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
12087e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
12097e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
12107e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12117e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RGBA:
12127e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BGRA:
12137e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_ABGR_EXT:
12147e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
12157e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
12167e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
12177e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
12187e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
12197e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
12207e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
12217e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
12227e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_4_4_4_4:
12237e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_4_4_4_4_REV:
12247e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_5_5_1:
12257e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_1_5_5_5_REV:
12267e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_8_8_8_8:
12277e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_8_8_8_8_REV:
12287e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_10_10_10_2:
12297e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_2_10_10_10_REV:
12307e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
12317e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_HALF_FLOAT:
12327e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_half_float_pixel
12337e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
12347e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
12357e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
12367e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
12377e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12387e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_YCBCR_MESA:
12397e18a039ee7a402bac4882ae793824d6523061faBrian Paul         if (!ctx->Extensions.MESA_ycbcr_texture)
12407e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_INVALID_ENUM;
12417e18a039ee7a402bac4882ae793824d6523061faBrian Paul         if (type == GL_UNSIGNED_SHORT_8_8_MESA ||
12427e18a039ee7a402bac4882ae793824d6523061faBrian Paul             type == GL_UNSIGNED_SHORT_8_8_REV_MESA)
12437e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_NO_ERROR;
12447e18a039ee7a402bac4882ae793824d6523061faBrian Paul         else
12457e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_INVALID_OPERATION;
12467e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12477e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_DEPTH_STENCIL_EXT:
12487e18a039ee7a402bac4882ae793824d6523061faBrian Paul         if (ctx->Extensions.EXT_packed_depth_stencil &&
12497e18a039ee7a402bac4882ae793824d6523061faBrian Paul             type == GL_UNSIGNED_INT_24_8)
12507e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_NO_ERROR;
12517e18a039ee7a402bac4882ae793824d6523061faBrian Paul         else if (ctx->Extensions.ARB_depth_buffer_float &&
12527e18a039ee7a402bac4882ae793824d6523061faBrian Paul             type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV)
12537e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_NO_ERROR;
12547e18a039ee7a402bac4882ae793824d6523061faBrian Paul         else
12557e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_INVALID_ENUM;
12567e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12577e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_DUDV_ATI:
12587e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_DU8DV8_ATI:
12597e18a039ee7a402bac4882ae793824d6523061faBrian Paul         if (!ctx->Extensions.ATI_envmap_bumpmap)
12607e18a039ee7a402bac4882ae793824d6523061faBrian Paul            return GL_INVALID_ENUM;
12617e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
12627e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
12637e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
12647e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
12657e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
12667e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
12677e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
12687e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_FLOAT:
12697e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_NO_ERROR;
12707e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
12717e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
12727e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
12737e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12747e18a039ee7a402bac4882ae793824d6523061faBrian Paul      /* integer-valued formats */
12757e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RED_INTEGER_EXT:
12767e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_GREEN_INTEGER_EXT:
12777e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BLUE_INTEGER_EXT:
12787e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_ALPHA_INTEGER_EXT:
12797e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RG_INTEGER:
12807e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
12817e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
12827e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
12837e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
12847e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
12857e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
12867e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
12879c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt               return (ctx->Version >= 30 ||
12887e18a039ee7a402bac4882ae793824d6523061faBrian Paul                       ctx->Extensions.EXT_texture_integer)
12897e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
12907e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
12917e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
12927e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
12937e18a039ee7a402bac4882ae793824d6523061faBrian Paul
12947e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RGB_INTEGER_EXT:
12957e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
12967e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
12977e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
12987e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
12997e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
13007e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
13017e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
13029c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt               return (ctx->Version >= 30 ||
13037e18a039ee7a402bac4882ae793824d6523061faBrian Paul                       ctx->Extensions.EXT_texture_integer)
13047e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13057e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE_3_3_2:
13067e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE_2_3_3_REV:
13077e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_6_5:
13087e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_6_5_REV:
13097e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_texture_rgb10_a2ui
13107e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13117e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
13127e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
13137e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
13147e18a039ee7a402bac4882ae793824d6523061faBrian Paul
13157e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BGR_INTEGER_EXT:
13167e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
13177e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
13187e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
13197e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
13207e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
13217e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
13227e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
13237e18a039ee7a402bac4882ae793824d6523061faBrian Paul            /* NOTE: no packed formats w/ BGR format */
13249c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt               return (ctx->Version >= 30 ||
13257e18a039ee7a402bac4882ae793824d6523061faBrian Paul                       ctx->Extensions.EXT_texture_integer)
13267e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13277e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
13287e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
13297e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
13307e18a039ee7a402bac4882ae793824d6523061faBrian Paul
13317e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_RGBA_INTEGER_EXT:
13327e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_BGRA_INTEGER_EXT:
13337e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
13347e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
13357e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
13367e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
13377e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
13387e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
13397e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
13409c1b41879aab2ff7386c547a2ccce7686c018cf5Eric Anholt               return (ctx->Version >= 30 ||
13417e18a039ee7a402bac4882ae793824d6523061faBrian Paul                       ctx->Extensions.EXT_texture_integer)
13427e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13437e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_4_4_4_4:
13447e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_4_4_4_4_REV:
13457e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_5_5_5_1:
13467e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT_1_5_5_5_REV:
13477e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_8_8_8_8:
13487e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_8_8_8_8_REV:
13497e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_10_10_10_2:
13507e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT_2_10_10_10_REV:
13517e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.ARB_texture_rgb10_a2ui
13527e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13537e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
13547e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
13557e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
13567e18a039ee7a402bac4882ae793824d6523061faBrian Paul
13577e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_LUMINANCE_INTEGER_EXT:
13587e18a039ee7a402bac4882ae793824d6523061faBrian Paul      case GL_LUMINANCE_ALPHA_INTEGER_EXT:
13597e18a039ee7a402bac4882ae793824d6523061faBrian Paul         switch (type) {
13607e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_BYTE:
13617e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_BYTE:
13627e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_SHORT:
13637e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_SHORT:
13647e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_INT:
13657e18a039ee7a402bac4882ae793824d6523061faBrian Paul            case GL_UNSIGNED_INT:
13667e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return ctx->Extensions.EXT_texture_integer
13677e18a039ee7a402bac4882ae793824d6523061faBrian Paul                  ? GL_NO_ERROR : GL_INVALID_ENUM;
13687e18a039ee7a402bac4882ae793824d6523061faBrian Paul            default:
13697e18a039ee7a402bac4882ae793824d6523061faBrian Paul               return GL_INVALID_ENUM;
13707e18a039ee7a402bac4882ae793824d6523061faBrian Paul         }
13717e18a039ee7a402bac4882ae793824d6523061faBrian Paul
13727e18a039ee7a402bac4882ae793824d6523061faBrian Paul      default:
13737e18a039ee7a402bac4882ae793824d6523061faBrian Paul         return GL_INVALID_ENUM;
13747e18a039ee7a402bac4882ae793824d6523061faBrian Paul   }
13757e18a039ee7a402bac4882ae793824d6523061faBrian Paul   return GL_NO_ERROR;
13767e18a039ee7a402bac4882ae793824d6523061faBrian Paul}
1377