blob: ed40b7eae09eacb0cb9feafe43e56bb4bec09bb4 [file] [log] [blame]
Gareth Hughes2c3d34c2001-03-18 08:53:49 +00001/*
2 * Mesa 3-D graphics library
Brian Paul74ae14a2009-09-30 20:47:54 -06003 * Version: 7.7
Gareth Hughes2c3d34c2001-03-18 08:53:49 +00004 *
Brian Paul74ae14a2009-09-30 20:47:54 -06005 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
6 * Copyright (c) 2008-2009 VMware, Inc.
Gareth Hughes2c3d34c2001-03-18 08:53:49 +00007 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
Kenneth Graunke3d8d5b22013-04-21 13:46:48 -070021 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 * OTHER DEALINGS IN THE SOFTWARE.
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000025 */
26
Keith Whitwell6dc85572003-07-17 13:43:59 +000027
Brian Paulf959f6e2004-04-22 00:27:31 +000028/**
29 * \file texformat.c
30 * Texture formats.
31 *
32 * \author Gareth Hughes
Brian Paul74ae14a2009-09-30 20:47:54 -060033 * \author Brian Paul
Brian Paulf959f6e2004-04-22 00:27:31 +000034 */
35
36
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000037#include "context.h"
Brian Paul08b2cc02011-10-23 10:00:00 -060038#include "enums.h"
Vinson Lee0117da42011-01-05 23:11:54 -080039#include "mtypes.h"
Brian Paulda5722b2009-09-27 18:09:23 -060040#include "texcompress.h"
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000041#include "texformat.h"
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000042
Eric Anholt001d9442010-09-23 17:17:08 -070043#define RETURN_IF_SUPPORTED(f) do { \
44 if (ctx->TextureFormatSupported[f]) \
45 return f; \
46} while (0)
Keith Whitwell6dc85572003-07-17 13:43:59 +000047
Keith Whitwell6dc85572003-07-17 13:43:59 +000048/**
Brian Paulfe031082004-01-24 17:02:19 +000049 * Choose an appropriate texture format given the format, type and
50 * internalFormat parameters passed to glTexImage().
Keith Whitwell6dc85572003-07-17 13:43:59 +000051 *
Brian Paulfe031082004-01-24 17:02:19 +000052 * \param ctx the GL context.
53 * \param internalFormat user's prefered internal texture format.
54 * \param format incoming image pixel format.
55 * \param type incoming image data type.
Keith Whitwell6dc85572003-07-17 13:43:59 +000056 *
Brian Paulfe031082004-01-24 17:02:19 +000057 * \return a pointer to a gl_texture_format object which describes the
58 * choosen texture format, or NULL on failure.
Keith Whitwell6dc85572003-07-17 13:43:59 +000059 *
60 * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers
Brian Paulf959f6e2004-04-22 00:27:31 +000061 * will typically override this function with a specialized version.
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000062 */
Brian Paul1f7c9142009-09-30 20:28:45 -060063gl_format
Brian Pauld47a6ad2012-08-24 08:31:37 -060064_mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
65 GLint internalFormat, GLenum format, GLenum type)
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000066{
Brian Paul7d58f442001-04-04 21:54:20 +000067 (void) format;
68 (void) type;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000069
Brian Paulf959f6e2004-04-22 00:27:31 +000070 switch (internalFormat) {
Brian Paul17e96712010-05-09 19:28:10 -060071 /* shallow RGBA formats */
Brian Paulf959f6e2004-04-22 00:27:31 +000072 case 4:
73 case GL_RGBA:
Eric Anholt5dbb8562011-01-04 13:44:34 -080074 if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
75 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
76 } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
77 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
Jordan Justen3c3a2b52012-12-27 12:34:03 -080078 } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
79 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
80 }
Eric Anholt5dbb8562011-01-04 13:44:34 -080081 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
82 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
83 break;
84
Brian Paula156b492004-05-12 01:50:30 +000085 case GL_RGBA8:
Eric Anholt001d9442010-09-23 17:17:08 -070086 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
Eric Anholt5dbb8562011-01-04 13:44:34 -080087 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -070088 break;
Brian Paulf959f6e2004-04-22 00:27:31 +000089 case GL_RGB5_A1:
Eric Anholt001d9442010-09-23 17:17:08 -070090 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
91 break;
Brian Paulf959f6e2004-04-22 00:27:31 +000092 case GL_RGBA2:
Eric Anholt001d9442010-09-23 17:17:08 -070093 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
Eric Anholt5dbb8562011-01-04 13:44:34 -080094 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
Eric Anholt001d9442010-09-23 17:17:08 -070095 break;
Brian Paulf959f6e2004-04-22 00:27:31 +000096 case GL_RGBA4:
Eric Anholt001d9442010-09-23 17:17:08 -070097 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
98 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +000099
Brian Paul17e96712010-05-09 19:28:10 -0600100 /* deep RGBA formats */
101 case GL_RGB10_A2:
Eric Anholt001d9442010-09-23 17:17:08 -0700102 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800103 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700104 break;
Brian Paul17e96712010-05-09 19:28:10 -0600105 case GL_RGBA12:
106 case GL_RGBA16:
Eric Anholt001d9442010-09-23 17:17:08 -0700107 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800108 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
109 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
110 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700111 break;
Brian Paul17e96712010-05-09 19:28:10 -0600112
113 /* shallow RGB formats */
Brian Paulf959f6e2004-04-22 00:27:31 +0000114 case 3:
115 case GL_RGB:
Jordan Justen3c3a2b52012-12-27 12:34:03 -0800116 if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
117 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
118 }
119 /* fallthrough */
Brian Pauldefb0352004-05-13 15:26:51 +0000120 case GL_RGB8:
Eric Anholt001d9442010-09-23 17:17:08 -0700121 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800122 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
123 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700124 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000125 case GL_R3_G3_B2:
Eric Anholt001d9442010-09-23 17:17:08 -0700126 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
Brian Paul2b3fdb12011-12-16 08:44:43 -0700127 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
128 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800129 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
130 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
131 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700132 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000133 case GL_RGB4:
Eric Anholt001d9442010-09-23 17:17:08 -0700134 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
Eric Anholt5dbb8562011-01-04 13:44:34 -0800135 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
Eric Anholt001d9442010-09-23 17:17:08 -0700136 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000137 case GL_RGB5:
Eric Anholt001d9442010-09-23 17:17:08 -0700138 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
139 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000140
Brian Paul17e96712010-05-09 19:28:10 -0600141 /* deep RGB formats */
142 case GL_RGB10:
143 case GL_RGB12:
144 case GL_RGB16:
Eric Anholt001d9442010-09-23 17:17:08 -0700145 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800146 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
147 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700148 break;
Brian Paul17e96712010-05-09 19:28:10 -0600149
Brian Paulf959f6e2004-04-22 00:27:31 +0000150 /* Alpha formats */
151 case GL_ALPHA:
152 case GL_ALPHA4:
Brian Paula156b492004-05-12 01:50:30 +0000153 case GL_ALPHA8:
Eric Anholt001d9442010-09-23 17:17:08 -0700154 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
155 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000156
Marek Olšákeb318372010-12-22 00:32:33 +0100157 case GL_ALPHA12:
158 case GL_ALPHA16:
Eric Anholt001d9442010-09-23 17:17:08 -0700159 RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800160 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
Eric Anholt001d9442010-09-23 17:17:08 -0700161 break;
Marek Olšákeb318372010-12-22 00:32:33 +0100162
Brian Paulf959f6e2004-04-22 00:27:31 +0000163 /* Luminance formats */
164 case 1:
165 case GL_LUMINANCE:
166 case GL_LUMINANCE4:
Brian Paulf959f6e2004-04-22 00:27:31 +0000167 case GL_LUMINANCE8:
Eric Anholt001d9442010-09-23 17:17:08 -0700168 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
169 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000170
Marek Olšákbb5ace62010-12-22 01:11:13 +0100171 case GL_LUMINANCE12:
172 case GL_LUMINANCE16:
Eric Anholt001d9442010-09-23 17:17:08 -0700173 RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800174 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
Eric Anholt001d9442010-09-23 17:17:08 -0700175 break;
Marek Olšákbb5ace62010-12-22 01:11:13 +0100176
Brian Paulf959f6e2004-04-22 00:27:31 +0000177 /* Luminance/Alpha formats */
Marek Olšákbae9d512010-12-21 23:46:32 +0100178 case GL_LUMINANCE4_ALPHA4:
Eric Anholt001d9442010-09-23 17:17:08 -0700179 RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800180 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
Eric Anholt001d9442010-09-23 17:17:08 -0700181 break;
Marek Olšákbae9d512010-12-21 23:46:32 +0100182
Brian Paulf959f6e2004-04-22 00:27:31 +0000183 case 2:
184 case GL_LUMINANCE_ALPHA:
Brian Paulf959f6e2004-04-22 00:27:31 +0000185 case GL_LUMINANCE6_ALPHA2:
Ian Romanick12982e32009-11-16 14:53:36 -0800186 case GL_LUMINANCE8_ALPHA8:
Eric Anholt001d9442010-09-23 17:17:08 -0700187 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
188 break;
Ian Romanick12982e32009-11-16 14:53:36 -0800189
Brian Paulf959f6e2004-04-22 00:27:31 +0000190 case GL_LUMINANCE12_ALPHA4:
191 case GL_LUMINANCE12_ALPHA12:
192 case GL_LUMINANCE16_ALPHA16:
Eric Anholt001d9442010-09-23 17:17:08 -0700193 RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800194 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
Eric Anholt001d9442010-09-23 17:17:08 -0700195 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000196
Brian Paulf959f6e2004-04-22 00:27:31 +0000197 case GL_INTENSITY:
198 case GL_INTENSITY4:
Brian Paulf959f6e2004-04-22 00:27:31 +0000199 case GL_INTENSITY8:
Eric Anholt001d9442010-09-23 17:17:08 -0700200 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
201 break;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000202
Marek Olšákfd8aa7a2010-12-22 01:12:20 +0100203 case GL_INTENSITY12:
204 case GL_INTENSITY16:
Eric Anholt001d9442010-09-23 17:17:08 -0700205 RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800206 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
Eric Anholt001d9442010-09-23 17:17:08 -0700207 break;
Marek Olšákfd8aa7a2010-12-22 01:12:20 +0100208
Brian Paulf959f6e2004-04-22 00:27:31 +0000209 default:
210 ; /* fallthrough */
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000211 }
Brian Paulf959f6e2004-04-22 00:27:31 +0000212
Ian Romanick4741dbc2008-10-01 15:51:56 -0700213 if (ctx->Extensions.ARB_depth_texture) {
Brian Paulf959f6e2004-04-22 00:27:31 +0000214 switch (internalFormat) {
215 case GL_DEPTH_COMPONENT:
Ian Romanick4741dbc2008-10-01 15:51:56 -0700216 case GL_DEPTH_COMPONENT24:
217 case GL_DEPTH_COMPONENT32:
Eric Anholt001d9442010-09-23 17:17:08 -0700218 RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
Chad Versace4e0654e2011-05-23 13:47:17 -0700219 RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800220 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
Eric Anholt001d9442010-09-23 17:17:08 -0700221 break;
Ian Romanick4741dbc2008-10-01 15:51:56 -0700222 case GL_DEPTH_COMPONENT16:
Eric Anholt001d9442010-09-23 17:17:08 -0700223 RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
Chad Versace4e0654e2011-05-23 13:47:17 -0700224 RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800225 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
Brian Paulf959f6e2004-04-22 00:27:31 +0000226 default:
227 ; /* fallthrough */
228 }
229 }
230
Ian Romanick33fa5e42009-01-27 17:36:03 -0800231 switch (internalFormat) {
232 case GL_COMPRESSED_ALPHA_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700233 RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
234 break;
Ian Romanick33fa5e42009-01-27 17:36:03 -0800235 case GL_COMPRESSED_LUMINANCE_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700236 RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
237 break;
Ian Romanick33fa5e42009-01-27 17:36:03 -0800238 case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700239 RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
240 break;
Ian Romanick33fa5e42009-01-27 17:36:03 -0800241 case GL_COMPRESSED_INTENSITY_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700242 RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
243 break;
Ian Romanick33fa5e42009-01-27 17:36:03 -0800244 case GL_COMPRESSED_RGB_ARB:
Brian Paul13d0bb22012-08-24 08:38:46 -0600245 /* We don't use texture compression for 1D and 1D array textures.
246 * For 1D textures, compressions doesn't buy us much.
247 * For 1D ARRAY textures, there's complicated issues with updating
248 * sub-regions on non-block boundaries with glCopyTexSubImage, among
249 * other issues. FWIW, the GL_EXT_texture_array extension prohibits
250 * 1D ARRAY textures in S3TC format.
251 */
252 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
253 if (ctx->Extensions.EXT_texture_compression_s3tc ||
Ian Romanicka0218812012-12-01 12:02:04 -0800254 ctx->Extensions.ANGLE_texture_compression_dxt)
Brian Paul13d0bb22012-08-24 08:38:46 -0600255 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
256 if (ctx->Extensions.TDFX_texture_compression_FXT1)
257 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
258 }
Eric Anholt001d9442010-09-23 17:17:08 -0700259 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800260 RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
261 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700262 break;
Brian Paul5e4f5e42009-10-23 14:37:14 -0600263 case GL_COMPRESSED_RGBA_ARB:
Brian Paul13d0bb22012-08-24 08:38:46 -0600264 /* We don't use texture compression for 1D and 1D array textures. */
265 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
266 if (ctx->Extensions.EXT_texture_compression_s3tc ||
Ian Romanicka0218812012-12-01 12:02:04 -0800267 ctx->Extensions.ANGLE_texture_compression_dxt)
Brian Paul13d0bb22012-08-24 08:38:46 -0600268 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
269 if (ctx->Extensions.TDFX_texture_compression_FXT1)
270 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
271 }
Eric Anholt001d9442010-09-23 17:17:08 -0700272 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800273 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
Eric Anholt001d9442010-09-23 17:17:08 -0700274 break;
Ian Romanick33fa5e42009-01-27 17:36:03 -0800275 default:
276 ; /* fallthrough */
Brian Paulf959f6e2004-04-22 00:27:31 +0000277 }
278
Marek Olšák1a06e842012-07-12 14:07:41 +0200279 if (ctx->Extensions.ARB_ES2_compatibility) {
280 switch (internalFormat) {
281 case GL_RGB565:
282 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
283 break;
284 default:
285 ; /* fallthrough */
286 }
287 }
288
Brian Paulf959f6e2004-04-22 00:27:31 +0000289 if (ctx->Extensions.MESA_ycbcr_texture) {
290 if (internalFormat == GL_YCBCR_MESA) {
291 if (type == GL_UNSIGNED_SHORT_8_8_MESA)
Eric Anholt001d9442010-09-23 17:17:08 -0700292 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR);
Brian Paulf959f6e2004-04-22 00:27:31 +0000293 else
Eric Anholt001d9442010-09-23 17:17:08 -0700294 RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV);
Brian Paulf959f6e2004-04-22 00:27:31 +0000295 }
296 }
297
Ian Romanickd45c6c82013-01-22 04:24:24 -0500298 /* For non-generic compressed format we assert two things:
299 *
300 * 1. The format has already been validated against the set of available
301 * extensions.
302 *
303 * 2. The driver only enables the extension if it supports all of the
304 * formats that are part of that extension.
305 */
306 switch (internalFormat) {
307 case GL_COMPRESSED_RGB_FXT1_3DFX:
308 return MESA_FORMAT_RGB_FXT1;
309 case GL_COMPRESSED_RGBA_FXT1_3DFX:
310 return MESA_FORMAT_RGBA_FXT1;
311 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
312 case GL_RGB_S3TC:
313 case GL_RGB4_S3TC:
314 return MESA_FORMAT_RGB_DXT1;
315 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
316 return MESA_FORMAT_RGBA_DXT1;
317 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
318 case GL_RGBA_S3TC:
319 case GL_RGBA4_S3TC:
320 return MESA_FORMAT_RGBA_DXT3;
321 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
322 return MESA_FORMAT_RGBA_DXT5;
323 case GL_COMPRESSED_RED_RGTC1:
324 return MESA_FORMAT_RED_RGTC1;
325 case GL_COMPRESSED_SIGNED_RED_RGTC1:
326 return MESA_FORMAT_SIGNED_RED_RGTC1;
327 case GL_COMPRESSED_RG_RGTC2:
328 return MESA_FORMAT_RG_RGTC2;
329 case GL_COMPRESSED_SIGNED_RG_RGTC2:
330 return MESA_FORMAT_SIGNED_RG_RGTC2;
331 case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
332 return MESA_FORMAT_L_LATC1;
333 case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
334 return MESA_FORMAT_SIGNED_L_LATC1;
335 case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
336 return MESA_FORMAT_LA_LATC2;
337 case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
338 return MESA_FORMAT_SIGNED_LA_LATC2;
339 case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
340 return MESA_FORMAT_LA_LATC2;
341 case GL_ETC1_RGB8_OES:
342 return MESA_FORMAT_ETC1_RGB8;
343 case GL_COMPRESSED_RGB8_ETC2:
344 return MESA_FORMAT_ETC2_RGB8;
345 case GL_COMPRESSED_SRGB8_ETC2:
346 return MESA_FORMAT_ETC2_SRGB8;
347 case GL_COMPRESSED_RGBA8_ETC2_EAC:
348 return MESA_FORMAT_ETC2_RGBA8_EAC;
349 case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
350 return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC;
351 case GL_COMPRESSED_R11_EAC:
352 return MESA_FORMAT_ETC2_R11_EAC;
353 case GL_COMPRESSED_RG11_EAC:
354 return MESA_FORMAT_ETC2_RG11_EAC;
355 case GL_COMPRESSED_SIGNED_R11_EAC:
356 return MESA_FORMAT_ETC2_SIGNED_R11_EAC;
357 case GL_COMPRESSED_SIGNED_RG11_EAC:
358 return MESA_FORMAT_ETC2_SIGNED_RG11_EAC;
359 case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
360 return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
361 case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
362 return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
363 case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
364 return MESA_FORMAT_SRGB_DXT1;
365 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
366 return MESA_FORMAT_SRGBA_DXT1;
367 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
368 return MESA_FORMAT_SRGBA_DXT3;
369 case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
370 return MESA_FORMAT_SRGBA_DXT5;
371 default:
372 ; /* fallthrough */
Brian Paulf959f6e2004-04-22 00:27:31 +0000373 }
374
375 if (ctx->Extensions.ARB_texture_float) {
376 switch (internalFormat) {
377 case GL_ALPHA16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700378 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700379 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
Brian Paul1d7048f2012-01-16 10:08:08 -0700380 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700381 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700382 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000383 case GL_ALPHA32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700384 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700385 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800386 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
387 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700388 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000389 case GL_LUMINANCE16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700390 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700391 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
Brian Paul1d7048f2012-01-16 10:08:08 -0700392 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700393 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700394 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000395 case GL_LUMINANCE32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700396 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700397 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800398 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
399 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700400 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000401 case GL_LUMINANCE_ALPHA16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700402 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700403 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
Brian Paul1d7048f2012-01-16 10:08:08 -0700404 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700405 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700406 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000407 case GL_LUMINANCE_ALPHA32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700408 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700409 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800410 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
411 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700412 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000413 case GL_INTENSITY16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700414 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700415 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
Brian Paul1d7048f2012-01-16 10:08:08 -0700416 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700417 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700418 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000419 case GL_INTENSITY32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700420 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700421 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800422 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
423 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700424 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000425 case GL_RGB16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700426 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
Eric Anholtbabe26b2011-11-06 18:08:36 -0800427 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700428 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
429 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700430 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000431 case GL_RGB32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700432 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700433 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800434 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
435 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700436 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000437 case GL_RGBA16F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700438 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700439 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt001d9442010-09-23 17:17:08 -0700440 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000441 case GL_RGBA32F_ARB:
Eric Anholt001d9442010-09-23 17:17:08 -0700442 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Eric Anholt6216a5b2011-11-22 13:27:54 -0800443 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholt001d9442010-09-23 17:17:08 -0700444 break;
Brian Paulf959f6e2004-04-22 00:27:31 +0000445 default:
446 ; /* fallthrough */
447 }
448 }
449
Marek Olšák9d7698c2011-04-26 02:18:24 +0200450 if (ctx->Extensions.EXT_texture_shared_exponent) {
451 switch (internalFormat) {
452 case GL_RGB9_E5:
Marek Olšák12714242011-04-27 12:52:10 +0200453 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]);
454 return MESA_FORMAT_RGB9_E5_FLOAT;
Marek Olšák9d7698c2011-04-26 02:18:24 +0200455 default:
456 ; /* fallthrough */
457 }
458 }
459
Marek Olšák631d23d2011-04-26 02:27:25 +0200460 if (ctx->Extensions.EXT_packed_float) {
461 switch (internalFormat) {
462 case GL_R11F_G11F_B10F:
463 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]);
464 return MESA_FORMAT_R11_G11_B10_FLOAT;
465 default:
466 ; /* fallthrough */
467 }
468 }
469
Brian Paul1ad7b992005-09-28 02:29:50 +0000470 if (ctx->Extensions.EXT_packed_depth_stencil) {
471 switch (internalFormat) {
472 case GL_DEPTH_STENCIL_EXT:
473 case GL_DEPTH24_STENCIL8_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700474 RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800475 RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
Eric Anholt001d9442010-09-23 17:17:08 -0700476 break;
Brian Paul1ad7b992005-09-28 02:29:50 +0000477 default:
478 ; /* fallthrough */
479 }
480 }
481
Marek Olšák11652802011-06-01 15:48:51 +0200482 if (ctx->Extensions.ARB_depth_buffer_float) {
483 switch (internalFormat) {
484 case GL_DEPTH_COMPONENT32F:
485 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]);
486 return MESA_FORMAT_Z32_FLOAT;
487 case GL_DEPTH32F_STENCIL8:
488 ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]);
489 return MESA_FORMAT_Z32_FLOAT_X24S8;
490 default:
491 ; /* fallthrough */
492 }
493 }
494
Roland Scheidegger114152e2009-03-12 15:01:16 +0100495 if (ctx->Extensions.ATI_envmap_bumpmap) {
496 switch (internalFormat) {
497 case GL_DUDV_ATI:
498 case GL_DU8DV8_ATI:
Eric Anholt001d9442010-09-23 17:17:08 -0700499 RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8);
500 break;
Roland Scheidegger114152e2009-03-12 15:01:16 +0100501 default:
502 ; /* fallthrough */
503 }
504 }
505
Marek Olšák0be36992011-03-18 13:44:51 +0100506 if (ctx->Extensions.EXT_texture_snorm) {
Brian Paul84407d72010-04-26 20:35:19 -0600507 switch (internalFormat) {
508 case GL_RED_SNORM:
509 case GL_R8_SNORM:
Eric Anholt001d9442010-09-23 17:17:08 -0700510 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8);
511 break;
Brian Paul84407d72010-04-26 20:35:19 -0600512 case GL_RG_SNORM:
513 case GL_RG8_SNORM:
Marek Olšák0be36992011-03-18 13:44:51 +0100514 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
Eric Anholt001d9442010-09-23 17:17:08 -0700515 break;
Brian Paul84407d72010-04-26 20:35:19 -0600516 case GL_RGB_SNORM:
517 case GL_RGB8_SNORM:
Eric Anholt001d9442010-09-23 17:17:08 -0700518 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700519 /* FALLTHROUGH */
Brian Paul84407d72010-04-26 20:35:19 -0600520 case GL_RGBA_SNORM:
521 case GL_RGBA8_SNORM:
Eric Anholt001d9442010-09-23 17:17:08 -0700522 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
Marek Olšák0be36992011-03-18 13:44:51 +0100523 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Eric Anholt001d9442010-09-23 17:17:08 -0700524 break;
Marek Olšák0be36992011-03-18 13:44:51 +0100525 case GL_ALPHA_SNORM:
526 case GL_ALPHA8_SNORM:
527 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700528 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
529 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100530 break;
531 case GL_LUMINANCE_SNORM:
532 case GL_LUMINANCE8_SNORM:
533 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700534 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
535 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
536 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100537 break;
538 case GL_LUMINANCE_ALPHA_SNORM:
539 case GL_LUMINANCE8_ALPHA8_SNORM:
540 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700541 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
542 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100543 break;
544 case GL_INTENSITY_SNORM:
545 case GL_INTENSITY8_SNORM:
546 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700547 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
548 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100549 break;
Brian Paul84407d72010-04-26 20:35:19 -0600550 case GL_R16_SNORM:
Marek Olšák0be36992011-03-18 13:44:51 +0100551 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
Eric Anholt001d9442010-09-23 17:17:08 -0700552 break;
Brian Paul84407d72010-04-26 20:35:19 -0600553 case GL_RG16_SNORM:
Marek Olšák0be36992011-03-18 13:44:51 +0100554 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
Eric Anholt001d9442010-09-23 17:17:08 -0700555 break;
Brian Paul84407d72010-04-26 20:35:19 -0600556 case GL_RGB16_SNORM:
Eric Anholt001d9442010-09-23 17:17:08 -0700557 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700558 /* FALLTHROUGH */
Brian Paul84407d72010-04-26 20:35:19 -0600559 case GL_RGBA16_SNORM:
Eric Anholt001d9442010-09-23 17:17:08 -0700560 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700561 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
562 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Eric Anholt001d9442010-09-23 17:17:08 -0700563 break;
Marek Olšák0be36992011-03-18 13:44:51 +0100564 case GL_ALPHA16_SNORM:
565 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700566 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
567 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
568 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100569 break;
570 case GL_LUMINANCE16_SNORM:
571 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700572 /* FALLTHROUGH */
Marek Olšák0be36992011-03-18 13:44:51 +0100573 case GL_LUMINANCE16_ALPHA16_SNORM:
574 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700575 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
576 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
577 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100578 break;
579 case GL_INTENSITY16_SNORM:
580 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
Ian Romanicke397b3a2011-04-02 18:56:33 -0700581 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
582 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
583 RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
Marek Olšák0be36992011-03-18 13:44:51 +0100584 break;
Brian Paul84407d72010-04-26 20:35:19 -0600585 default:
586 ; /* fall-through */
587 }
588 }
Roland Scheideggerc6a6cc12009-03-27 19:39:52 +0100589
Brian Paul8d214bc2006-08-03 03:20:52 +0000590 if (ctx->Extensions.EXT_texture_sRGB) {
591 switch (internalFormat) {
592 case GL_SRGB_EXT:
593 case GL_SRGB8_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700594 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800595 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700596 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000597 case GL_SRGB_ALPHA_EXT:
598 case GL_SRGB8_ALPHA8_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700599 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800600 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700601 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000602 case GL_SLUMINANCE_EXT:
603 case GL_SLUMINANCE8_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700604 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800605 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700606 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000607 case GL_SLUMINANCE_ALPHA_EXT:
608 case GL_SLUMINANCE8_ALPHA8_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700609 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800610 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700611 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000612 case GL_COMPRESSED_SLUMINANCE_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700613 RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800614 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700615 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000616 case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
Eric Anholt001d9442010-09-23 17:17:08 -0700617 RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800618 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700619 break;
Roland Scheidegger5bd093b2008-12-12 05:06:48 +0100620 case GL_COMPRESSED_SRGB_EXT:
Roland Scheidegger5bd093b2008-12-12 05:06:48 +0100621 if (ctx->Extensions.EXT_texture_compression_s3tc)
Eric Anholt001d9442010-09-23 17:17:08 -0700622 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
Eric Anholt001d9442010-09-23 17:17:08 -0700623 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800624 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700625 break;
Roland Scheidegger5bd093b2008-12-12 05:06:48 +0100626 case GL_COMPRESSED_SRGB_ALPHA_EXT:
Roland Scheidegger5bd093b2008-12-12 05:06:48 +0100627 if (ctx->Extensions.EXT_texture_compression_s3tc)
Eric Anholt001d9442010-09-23 17:17:08 -0700628 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
Eric Anholt001d9442010-09-23 17:17:08 -0700629 RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
Eric Anholt5dbb8562011-01-04 13:44:34 -0800630 RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
Eric Anholt001d9442010-09-23 17:17:08 -0700631 break;
Brian Paul8d214bc2006-08-03 03:20:52 +0000632 default:
633 ; /* fallthrough */
634 }
635 }
Brian Paul8d214bc2006-08-03 03:20:52 +0000636
Brian Paulabd56272010-07-05 20:07:07 -0600637 if (ctx->Extensions.EXT_texture_integer) {
638 switch (internalFormat) {
Dave Airlie56a71112011-09-30 08:41:20 +0100639 case GL_ALPHA8UI_EXT:
Dave Airliec2060c02011-10-05 19:21:32 +0100640 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8);
641 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
642 break;
643 case GL_ALPHA16UI_EXT:
644 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16);
645 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
646 break;
647 case GL_ALPHA32UI_EXT:
648 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32);
649 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
650 break;
Dave Airlie56a71112011-09-30 08:41:20 +0100651 case GL_ALPHA8I_EXT:
Dave Airliec2060c02011-10-05 19:21:32 +0100652 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8);
653 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
654 break;
655 case GL_ALPHA16I_EXT:
656 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16);
657 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
658 break;
659 case GL_ALPHA32I_EXT:
660 RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32);
661 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
662 break;
663 case GL_LUMINANCE8UI_EXT:
664 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8);
665 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
666 break;
667 case GL_LUMINANCE16UI_EXT:
668 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16);
669 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
670 break;
671 case GL_LUMINANCE32UI_EXT:
672 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32);
673 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
674 break;
Dave Airlie56a71112011-09-30 08:41:20 +0100675 case GL_LUMINANCE8I_EXT:
Dave Airliec2060c02011-10-05 19:21:32 +0100676 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8);
677 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
678 break;
679 case GL_LUMINANCE16I_EXT:
680 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16);
681 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
682 break;
683 case GL_LUMINANCE32I_EXT:
684 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32);
685 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
686 break;
687 case GL_LUMINANCE_ALPHA8UI_EXT:
688 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8);
689 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
690 break;
691 case GL_LUMINANCE_ALPHA16UI_EXT:
692 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16);
693 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
694 break;
695 case GL_LUMINANCE_ALPHA32UI_EXT:
696 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32);
697 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
698 break;
Dave Airlie56a71112011-09-30 08:41:20 +0100699 case GL_LUMINANCE_ALPHA8I_EXT:
Dave Airliec2060c02011-10-05 19:21:32 +0100700 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8);
701 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
702 break;
703 case GL_LUMINANCE_ALPHA16I_EXT:
704 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16);
705 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
706 break;
707 case GL_LUMINANCE_ALPHA32I_EXT:
708 RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32);
709 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
710 break;
711 case GL_INTENSITY8UI_EXT:
712 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8);
713 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
714 break;
715 case GL_INTENSITY16UI_EXT:
716 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16);
717 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
718 break;
719 case GL_INTENSITY32UI_EXT:
720 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32);
721 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
722 break;
723 case GL_INTENSITY8I_EXT:
724 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8);
725 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
726 break;
727 case GL_INTENSITY16I_EXT:
728 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16);
729 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
730 break;
731 case GL_INTENSITY32I_EXT:
732 RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
733 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
734 break;
Marek Olšák3363e872012-01-22 20:25:42 +0100735 }
736 }
737
Eric Anholt9c1b4182012-07-26 14:43:56 -0700738 if (ctx->Version >= 30 ||
Marek Olšák3363e872012-01-22 20:25:42 +0100739 ctx->Extensions.EXT_texture_integer) {
740 switch (internalFormat) {
Dave Airliec2060c02011-10-05 19:21:32 +0100741 case GL_RGB8UI_EXT:
742 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
743 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
744 break;
745 case GL_RGB16UI_EXT:
746 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
747 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
748 break;
749 case GL_RGB32UI_EXT:
750 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
751 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
752 break;
753 case GL_RGB8I_EXT:
754 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8);
755 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
756 break;
757 case GL_RGB16I_EXT:
758 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16);
759 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
760 break;
761 case GL_RGB32I_EXT:
762 RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32);
763 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
764 break;
765 case GL_RGBA8UI_EXT:
766 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
767 break;
768 case GL_RGBA16UI_EXT:
769 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
770 break;
771 case GL_RGBA32UI_EXT:
772 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
773 break;
774 case GL_RGBA8I_EXT:
775 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
776 break;
777 case GL_RGBA16I_EXT:
778 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
779 break;
780 case GL_RGBA32I_EXT:
781 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
782 break;
Brian Paulabd56272010-07-05 20:07:07 -0600783 }
784 }
785
Ian Romanick5d1387b2010-09-28 17:24:39 -0700786 if (ctx->Extensions.ARB_texture_rg) {
787 switch (internalFormat) {
788 case GL_R8:
789 case GL_RED:
Eric Anholtbc880b82011-04-20 09:31:34 -0700790 RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
791 break;
792
Ian Romanick5d1387b2010-09-28 17:24:39 -0700793 case GL_COMPRESSED_RED:
Brian Paul13d0bb22012-08-24 08:38:46 -0600794 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
795 RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
Eric Anholt001d9442010-09-23 17:17:08 -0700796 RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
797 break;
Ian Romanick5d1387b2010-09-28 17:24:39 -0700798
799 case GL_R16:
Eric Anholt001d9442010-09-23 17:17:08 -0700800 RETURN_IF_SUPPORTED(MESA_FORMAT_R16);
801 break;
Ian Romanick5d1387b2010-09-28 17:24:39 -0700802
803 case GL_RG:
804 case GL_RG8:
Brian Paul0a3c8952011-11-30 20:35:02 -0700805 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
Eric Anholtbc880b82011-04-20 09:31:34 -0700806 break;
807
Ian Romanick5d1387b2010-09-28 17:24:39 -0700808 case GL_COMPRESSED_RG:
Brian Paul13d0bb22012-08-24 08:38:46 -0600809 if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
810 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
Brian Paul0a3c8952011-11-30 20:35:02 -0700811 RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
Eric Anholt001d9442010-09-23 17:17:08 -0700812 break;
Ian Romanick5d1387b2010-09-28 17:24:39 -0700813
814 case GL_RG16:
Marek Olšákebe86b82013-01-24 21:06:50 +0100815 RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616);
Eric Anholt001d9442010-09-23 17:17:08 -0700816 break;
Ian Romanick5d1387b2010-09-28 17:24:39 -0700817
818 default:
819 ; /* fallthrough */
820 }
821 }
822
Marek Olšák0ecbb0a2011-02-16 00:35:44 +0100823 if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) {
824 switch (internalFormat) {
825 case GL_R16F:
Eric Anholtf7c26102011-04-15 14:18:43 -0700826 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
Brian Paul76286962012-01-16 09:05:05 -0700827 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700828 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
Brian Paul76286962012-01-16 09:05:05 -0700829 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
830 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700831 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
832 break;
Marek Olšák0ecbb0a2011-02-16 00:35:44 +0100833 case GL_R32F:
Eric Anholtf7c26102011-04-15 14:18:43 -0700834 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
Brian Paul76286962012-01-16 09:05:05 -0700835 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
Eric Anholtf7c26102011-04-15 14:18:43 -0700836 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Brian Paul76286962012-01-16 09:05:05 -0700837 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
838 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
839 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700840 break;
Marek Olšák0ecbb0a2011-02-16 00:35:44 +0100841 case GL_RG16F:
Eric Anholtf7c26102011-04-15 14:18:43 -0700842 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
843 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
Brian Paul76286962012-01-16 09:05:05 -0700844 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700845 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
846 break;
Marek Olšák0ecbb0a2011-02-16 00:35:44 +0100847 case GL_RG32F:
Eric Anholtf7c26102011-04-15 14:18:43 -0700848 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
849 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
Brian Paul76286962012-01-16 09:05:05 -0700850 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
851 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
Eric Anholtf7c26102011-04-15 14:18:43 -0700852 break;
Marek Olšák0ecbb0a2011-02-16 00:35:44 +0100853
854 default:
855 ; /* fallthrough */
856 }
857 }
858
Eric Anholt9c1b4182012-07-26 14:43:56 -0700859 if (ctx->Version >= 30 ||
Marek Olšák3363e872012-01-22 20:25:42 +0100860 (ctx->Extensions.ARB_texture_rg &&
861 ctx->Extensions.EXT_texture_integer)) {
Dave Airlie56a71112011-09-30 08:41:20 +0100862 switch (internalFormat) {
863 case GL_R8UI:
864 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
865 break;
866 case GL_RG8UI:
867 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
868 break;
869 case GL_R16UI:
870 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
871 break;
872 case GL_RG16UI:
873 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
874 break;
875 case GL_R32UI:
876 RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
877 break;
878 case GL_RG32UI:
879 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
880 break;
881 case GL_R8I:
882 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8);
883 break;
884 case GL_RG8I:
885 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8);
886 break;
887 case GL_R16I:
888 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16);
889 break;
890 case GL_RG16I:
891 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16);
892 break;
893 case GL_R32I:
894 RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32);
895 break;
896 case GL_RG32I:
897 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32);
898 break;
899 default:
900 break;
901 }
902 }
903
Dave Airlief449be62011-11-27 16:21:02 +0000904 if (ctx->Extensions.ARB_texture_rgb10_a2ui) {
905 switch (internalFormat) {
906 case GL_RGB10_A2UI:
907 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT);
Jordan Justen749c9062012-06-09 12:14:26 -0700908 RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT);
Dave Airlief449be62011-11-27 16:21:02 +0000909 break;
910 default:
911 break;
912 }
913 }
Ian Romanick29386d12011-08-31 11:43:39 -0700914 /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0).
915 */
Jordan Justen09714c02012-07-19 11:27:16 -0700916 if (_mesa_is_gles(ctx)) {
Kristian Høgsberg3fe01852011-01-26 15:05:46 -0500917 switch (internalFormat) {
918 case GL_BGRA:
919 RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
920 break;
921
922 default:
923 ; /* fallthrough */
924 }
925 }
926
Brian Paul08b2cc02011-10-23 10:00:00 -0600927 _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
928 _mesa_lookup_enum_by_nr(internalFormat));
Brian Paul1f7c9142009-09-30 20:28:45 -0600929 return MESA_FORMAT_NONE;
Gareth Hughes2c3d34c2001-03-18 08:53:49 +0000930}
Brian12dc9c92008-02-08 16:46:12 -0700931