1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 7.7 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (c) 2008-2009 VMware, Inc. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file texformat.c 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Texture formats. 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \author Gareth Hughes 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \author Brian Paul 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "context.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "enums.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mfeatures.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mtypes.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "texcompress.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "texformat.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RETURN_IF_SUPPORTED(f) do { \ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->TextureFormatSupported[f]) \ 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return f; \ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Choose an appropriate texture format given the format, type and 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * internalFormat parameters passed to glTexImage(). 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx the GL context. 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param internalFormat user's prefered internal texture format. 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format incoming image pixel format. 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param type incoming image data type. 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return a pointer to a gl_texture_format object which describes the 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * choosen texture format, or NULL on failure. 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is called via dd_function_table::ChooseTextureFormat. Hardware drivers 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * will typically override this function with a specialized version. 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggl_format 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_choose_tex_format(struct gl_context *ctx, GLenum target, 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint internalFormat, GLenum format, GLenum type) 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) format; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) type; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* shallow RGBA formats */ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA: 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) { 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) { 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8: 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB5_A1: 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA2: 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/ 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA4: 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deep RGBA formats */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10_A2: 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA12: 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16: 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* shallow RGB formats */ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB: 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8: 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R3_G3_B2: 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB4: 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB5: 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deep RGB formats */ 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10: 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB12: 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16: 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Alpha formats */ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA4: 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8: 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA12: 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16: 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_A16); 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Luminance formats */ 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE4: 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8: 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12: 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16: 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_L16); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Luminance/Alpha formats */ 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE4_ALPHA4: 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL44); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA: 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE6_ALPHA2: 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_ALPHA8: 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12_ALPHA4: 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12_ALPHA12: 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_ALPHA16: 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616); 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY: 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY4: 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8: 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY12: 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16: 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_I16); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_depth_texture) { 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT: 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT24: 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32: 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_Z32); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT16: 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_Z16); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_ALPHA_ARB: 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_A8); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ARB: 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_L8); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_ARB: 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_INTENSITY_ARB: 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_I8); 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_ARB: 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* We don't use texture compression for 1D and 1D array textures. 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For 1D textures, compressions doesn't buy us much. 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For 1D ARRAY textures, there's complicated issues with updating 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sub-regions on non-block boundaries with glCopyTexSubImage, among 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * other issues. FWIW, the GL_EXT_texture_array extension prohibits 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1D ARRAY textures in S3TC format. 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc || 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.S3_s3tc) 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.TDFX_texture_compression_FXT1) 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_ARB: 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* We don't use texture compression for 1D and 1D array textures. */ 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc || 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.S3_s3tc) 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.TDFX_texture_compression_FXT1) 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_ES2_compatibility) { 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB565: 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.MESA_ycbcr_texture) { 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (internalFormat == GL_YCBCR_MESA) { 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (type == GL_UNSIGNED_SHORT_8_8_MESA) 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR); 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_fxt1 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.TDFX_texture_compression_FXT1) { 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_FXT1_3DFX: 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_FXT1_3DFX: 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) { 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1); 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.S3_s3tc) { 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_S3TC: 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB4_S3TC: 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_S3TC: 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA4_S3TC: 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_texture_float) { 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16F_ARB: 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32F_ARB: 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16F_ARB: 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32F_ARB: 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16F_ARB: 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32F_ARB: 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16F_ARB: 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32F_ARB: 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16F_ARB: 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32F_ARB: 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16F_ARB: 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32F_ARB: 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_shared_exponent) { 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB9_E5: 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MESA_FORMAT_RGB9_E5_FLOAT; 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_packed_float) { 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R11F_G11F_B10F: 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]); 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MESA_FORMAT_R11_G11_B10_FLOAT; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_packed_depth_stencil) { 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_STENCIL_EXT: 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH24_STENCIL8_EXT: 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8); 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_depth_buffer_float) { 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32F: 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]); 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MESA_FORMAT_Z32_FLOAT; 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH32F_STENCIL8: 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]); 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MESA_FORMAT_Z32_FLOAT_X24S8; 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ATI_envmap_bumpmap) { 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DUDV_ATI: 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DU8DV8_ATI: 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8); 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_snorm) { 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_SNORM: 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8_SNORM: 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8); 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_SNORM: 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8_SNORM: 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV); 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_SNORM: 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8_SNORM: 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FALLTHROUGH */ 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_SNORM: 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8_SNORM: 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_SNORM: 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8_SNORM: 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8); 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_SNORM: 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_SNORM: 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8); 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_SNORM: 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_ALPHA8_SNORM: 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88); 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY_SNORM: 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8_SNORM: 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8); 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16_SNORM: 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16); 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16_SNORM: 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616); 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16_SNORM: 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16); 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FALLTHROUGH */ 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16_SNORM: 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16_SNORM: 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16); 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_SNORM: 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16); 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FALLTHROUGH */ 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_ALPHA16_SNORM: 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616); 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16_SNORM: 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16); 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16); 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fall-through */ 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_sRGB) { 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB_EXT: 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB8_EXT: 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB_ALPHA_EXT: 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB8_ALPHA8_EXT: 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE_EXT: 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE8_EXT: 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE_ALPHA_EXT: 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE8_ALPHA8_EXT: 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE_EXT: 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_EXT: 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_EXT: 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_s3tc) 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_EXT_texture_sRGB */ 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_integer) { 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8UI_EXT: 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8); 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16UI_EXT: 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16); 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32UI_EXT: 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32); 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8I_EXT: 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8); 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16I_EXT: 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16); 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32I_EXT: 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32); 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8UI_EXT: 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8); 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16UI_EXT: 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16); 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32UI_EXT: 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32); 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8I_EXT: 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8); 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16I_EXT: 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16); 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32I_EXT: 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32); 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8UI_EXT: 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8); 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16UI_EXT: 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16); 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32UI_EXT: 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32); 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8I_EXT: 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8); 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16I_EXT: 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16); 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32I_EXT: 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8UI_EXT: 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8); 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16UI_EXT: 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16); 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32UI_EXT: 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32); 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8I_EXT: 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8); 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16I_EXT: 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16); 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32I_EXT: 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32); 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Version >= 30 || 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer) { 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8UI_EXT: 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8); 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16UI_EXT: 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32UI_EXT: 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32); 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8I_EXT: 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8); 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16I_EXT: 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16); 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32I_EXT: 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32); 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8UI_EXT: 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16UI_EXT: 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16); 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32UI_EXT: 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8I_EXT: 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16I_EXT: 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32I_EXT: 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_texture_rg) { 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8: 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED: 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R8); 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16: 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R16); 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG: 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8: 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG: 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16: 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616); 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) { 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16F: 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32F: 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16F: 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32F: 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Version >= 30 || 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->Extensions.ARB_texture_rg && 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer)) { 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8UI: 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8); 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8UI: 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8); 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16UI: 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16); 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16UI: 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16); 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32UI: 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32); 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32UI: 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32); 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8I: 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8); 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8I: 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8); 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16I: 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16); 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16I: 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16); 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32I: 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32); 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32I: 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32); 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_texture_rgb10_a2ui) { 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10_A2UI: 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT); 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT); 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_BGRA can be an internal format *only* in OpenGL ES (1.x or 2.0). 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_is_gles(ctx)) { 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA: 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ARB_texture_compression_rgtc) { 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED_RGTC1: 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RED_RGTC1: 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1); 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG_RGTC2: 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RG_RGTC2: 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2); 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_texture_compression_latc) { 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1); 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1); 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2); 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.ATI_texture_compression_3dc) { 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (internalFormat) { 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ETC1_RGB8_OES: 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8); 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fallthrough */ 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(internalFormat)); 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return MESA_FORMAT_NONE; 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 986