1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (c) 2008-2009 VMware, Inc. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (c) 2012 Intel Corporation 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 * THE AUTHORS 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#include "context.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glformats.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_TRUE if type is packed pixel type, GL_FALSE otherwise. 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_type_is_packed(GLenum type) 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_UNSIGNED_BYTE_4_4: 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_MESA: 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_REV_MESA: 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_24_8_EXT: 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_5_9_9_9_REV: 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10F_11F_11F_REV: 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get the size of a GL data type. 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param type GL data type. 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return the size, in bytes, of the given data type, 0 if a GL_BITMAP, or -1 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * if an invalid type enum. 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLint 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_sizeof_type(GLenum type) 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BITMAP: 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLubyte); 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLbyte); 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLshort); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLint); 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLfloat); 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DOUBLE: 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLdouble); 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT_ARB: 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLhalfARB); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FIXED: 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLfixed); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Same as _mesa_sizeof_type() but also accepting the packed pixel 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * format data types. 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLint 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_sizeof_packed_type(GLenum type) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BITMAP: 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLubyte); 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLbyte); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLshort); 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLint); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT_ARB: 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLhalfARB); 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLfloat); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case MESA_UNSIGNED_BYTE_4_4: 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLubyte); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_MESA: 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_REV_MESA: 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_24_8_EXT: 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_5_9_9_9_REV: 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10F_11F_11F_REV: 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 8; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get the number of components in a pixel format. 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format pixel format. 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return the number of components in the given format, or -1 if a bad format. 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLint 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_components_in_format(GLenum format) 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_INDEX: 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX: 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT: 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_INTEGER_EXT: 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN: 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN_INTEGER_EXT: 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE: 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE_INTEGER_EXT: 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_INTEGER_EXT: 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_INTEGER_EXT: 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY: 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA: 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_INTEGER_EXT: 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG: 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_YCBCR_MESA: 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_STENCIL_EXT: 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DUDV_ATI: 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DU8DV8_ATI: 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_INTEGER: 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 2; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB: 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR: 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_INTEGER_EXT: 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR_INTEGER_EXT: 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 3; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA: 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA: 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ABGR_EXT: 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_INTEGER_EXT: 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA_INTEGER_EXT: 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 4; 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get the bytes per pixel of pixel format type pair. 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format pixel format. 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param type pixel type. 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return bytes per pixel, or -1 if a bad format or type was given. 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLint 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_bytes_per_pixel(GLenum format, GLenum type) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint comps = _mesa_components_in_format(format); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (comps < 0) 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BITMAP: 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* special case */ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return comps * sizeof(GLubyte); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return comps * sizeof(GLshort); 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return comps * sizeof(GLint); 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return comps * sizeof(GLfloat); 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT_ARB: 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return comps * sizeof(GLhalfARB); 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB || format == GL_BGR || 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT) 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLubyte); 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; /* error */ 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB || format == GL_BGR || 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_RGB_INTEGER_EXT || format == GL_BGR_INTEGER_EXT) 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; /* error */ 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT || 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT) 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGBA || format == GL_BGRA || format == GL_ABGR_EXT || 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT) 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_MESA: 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_REV_MESA: 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_YCBCR_MESA) 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLushort); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_24_8_EXT: 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_DEPTH_STENCIL_EXT) 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_5_9_9_9_REV: 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB) 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10F_11F_11F_REV: 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB) 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return sizeof(GLuint); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_DEPTH_STENCIL) 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 8; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given format is an integer (non-normalized) format. 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_enum_format_integer(GLenum format) 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* generic integer formats */ 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_INTEGER_EXT: 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN_INTEGER_EXT: 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE_INTEGER_EXT: 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_INTEGER_EXT: 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_INTEGER_EXT: 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_INTEGER_EXT: 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR_INTEGER_EXT: 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA_INTEGER_EXT: 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_INTEGER_EXT: 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_INTEGER_EXT: 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_INTEGER: 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* specific integer formats */ 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32UI_EXT: 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32UI_EXT: 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32UI: 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32UI: 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32UI_EXT: 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32UI_EXT: 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32UI_EXT: 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32UI_EXT: 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16UI_EXT: 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16UI_EXT: 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16UI: 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16UI: 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16UI_EXT: 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16UI_EXT: 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16UI_EXT: 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16UI_EXT: 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8UI_EXT: 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8UI_EXT: 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8UI: 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8UI: 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8UI_EXT: 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8UI_EXT: 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8UI_EXT: 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8UI_EXT: 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32I_EXT: 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32I_EXT: 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32I: 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32I: 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32I_EXT: 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32I_EXT: 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32I_EXT: 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32I_EXT: 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16I_EXT: 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16I_EXT: 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16I: 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16I: 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16I_EXT: 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16I_EXT: 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16I_EXT: 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16I_EXT: 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8I_EXT: 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8I_EXT: 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8I: 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8I: 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8I_EXT: 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8I_EXT: 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8I_EXT: 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8I_EXT: 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10_A2UI: 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given type is an integer (non-normalized) format. 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_type_integer(GLenum type) 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given format or type is an integer (non-normalized) format. 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern GLboolean 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_enum_format_or_type_integer(GLenum format, GLenum type) 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_enum_format_integer(format) || _mesa_is_type_integer(type); 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_type_unsigned(GLenum type) 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_MESA: 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_8_8_REV_MESA: 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a color/RGBA format (i.e., not color 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * index, depth, stencil, etc). 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format the image format value (may by an internal texture format) 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_TRUE if its a color/RGBA format, GL_FALSE otherwise. 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_color_format(GLenum format) 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN: 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE: 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA4: 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8: 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA12: 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16: 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE4: 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8: 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12: 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16: 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA: 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE4_ALPHA4: 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE6_ALPHA2: 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_ALPHA8: 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12_ALPHA4: 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE12_ALPHA12: 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_ALPHA16: 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY: 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY4: 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8: 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY12: 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16: 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8: 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16: 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG: 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8: 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16: 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB: 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR: 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R3_G3_B2: 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB4: 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB5: 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB565: 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8: 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10: 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB12: 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16: 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ABGR_EXT: 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA: 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA: 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA2: 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA4: 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB5_A1: 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8: 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10_A2: 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA12: 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16: 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* float texture formats */ 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16F_ARB: 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32F_ARB: 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16F_ARB: 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32F_ARB: 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16F_ARB: 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32F_ARB: 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16F_ARB: 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32F_ARB: 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16F: 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32F: 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16F: 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32F: 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16F_ARB: 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32F_ARB: 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16F_ARB: 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32F_ARB: 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* compressed formats */ 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_ALPHA: 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE: 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA: 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_INTENSITY: 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED: 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG: 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB: 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA: 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_S3TC: 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB4_S3TC: 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_S3TC: 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA4_S3TC: 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_FXT1_3DFX: 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_FXT1_3DFX: 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB_EXT: 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB8_EXT: 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB_ALPHA_EXT: 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SRGB8_ALPHA8_EXT: 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE_ALPHA_EXT: 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE8_ALPHA8_EXT: 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE_EXT: 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SLUMINANCE8_EXT: 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_EXT: 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_EXT: 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE_EXT: 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_EXT_texture_sRGB */ 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED_RGTC1: 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RED_RGTC1: 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG_RGTC2: 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RG_RGTC2: 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ETC1_RGB8_OES: 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* generic integer formats */ 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_INTEGER_EXT: 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN_INTEGER_EXT: 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE_INTEGER_EXT: 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_INTEGER_EXT: 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_INTEGER_EXT: 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_INTEGER_EXT: 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR_INTEGER_EXT: 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA_INTEGER_EXT: 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_INTEGER: 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_INTEGER_EXT: 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_INTEGER_EXT: 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* sized integer formats */ 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32UI_EXT: 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32UI_EXT: 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32UI: 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32UI: 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32UI_EXT: 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32UI_EXT: 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32UI_EXT: 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32UI_EXT: 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16UI_EXT: 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16UI_EXT: 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16UI: 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16UI: 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16UI_EXT: 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16UI_EXT: 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16UI_EXT: 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16UI_EXT: 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8UI_EXT: 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8UI_EXT: 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8UI: 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8UI: 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8UI_EXT: 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8UI_EXT: 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8UI_EXT: 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8UI_EXT: 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA32I_EXT: 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB32I_EXT: 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG32I: 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R32I: 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA32I_EXT: 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY32I_EXT: 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE32I_EXT: 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA32I_EXT: 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16I_EXT: 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16I_EXT: 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16I: 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16I: 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16I_EXT: 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16I_EXT: 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16I_EXT: 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA16I_EXT: 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8I_EXT: 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8I_EXT: 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8I: 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8I: 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8I_EXT: 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8I_EXT: 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8I_EXT: 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA8I_EXT: 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* signed, normalized texture formats */ 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_SNORM: 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R8_SNORM: 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R16_SNORM: 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_SNORM: 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG8_SNORM: 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG16_SNORM: 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_SNORM: 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB8_SNORM: 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB16_SNORM: 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_SNORM: 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA8_SNORM: 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA16_SNORM: 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_SNORM: 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA8_SNORM: 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA16_SNORM: 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_SNORM: 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_SNORM: 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_SNORM: 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_SNORM: 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE8_ALPHA8_SNORM: 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE16_ALPHA16_SNORM: 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY_SNORM: 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY8_SNORM: 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY16_SNORM: 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB9_E5: 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_R11F_G11F_B10F: 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB10_A2UI: 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_YCBCR_MESA: /* not considered to be RGB */ 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* fall-through */ 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a depth component format. 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_depth_format(GLenum format) 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT: 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT16: 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT24: 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32: 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32F: 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a stencil format. 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_stencil_format(GLenum format) 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX: 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a YCbCr format. 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_ycbcr_format(GLenum format) 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_YCBCR_MESA: 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a depth+stencil format. 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_depthstencil_format(GLenum format) 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH24_STENCIL8_EXT: 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_STENCIL_EXT: 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH32F_STENCIL8: 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a depth or stencil format. 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_depth_or_stencil_format(GLenum format) 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT: 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT16: 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT24: 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32: 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX: 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX1_EXT: 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX4_EXT: 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX8_EXT: 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX16_EXT: 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_STENCIL_EXT: 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH24_STENCIL8_EXT: 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT32F: 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH32F_STENCIL8: 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given image format is a dudv format. 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_dudv_format(GLenum format) 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DUDV_ATI: 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DU8DV8_ATI: 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if an image format is a supported compressed format. 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format the internal format token provided by the user. 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_TRUE if compressed, GL_FALSE if uncompressed 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_is_compressed_format(struct gl_context *ctx, GLenum format) 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.EXT_texture_compression_s3tc; 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_desktop_gl(ctx) 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.EXT_texture_compression_s3tc; 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_S3TC: 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB4_S3TC: 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_S3TC: 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA4_S3TC: 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_desktop_gl(ctx) && ctx->Extensions.S3_s3tc; 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_desktop_gl(ctx) 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.EXT_texture_sRGB 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.EXT_texture_compression_s3tc; 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB_FXT1_3DFX: 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA_FXT1_3DFX: 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_desktop_gl(ctx) 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.TDFX_texture_compression_FXT1; 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED_RGTC1: 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RED_RGTC1: 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG_RGTC2: 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_RG_RGTC2: 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_desktop_gl(ctx) 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.ARB_texture_compression_rgtc; 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_LATC1_EXT: 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGL 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.EXT_texture_compression_latc; 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGL 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.ATI_texture_compression_3dc; 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ETC1_RGB8_OES: 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _mesa_is_gles(ctx) 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ctx->Extensions.OES_compressed_ETC1_RGB8_texture; 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ES 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE4_RGB8_OES: 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE4_RGBA8_OES: 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE4_R5_G6_B5_OES: 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE4_RGBA4_OES: 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE4_RGB5_A1_OES: 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE8_RGB8_OES: 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE8_RGBA8_OES: 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE8_R5_G6_B5_OES: 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE8_RGBA4_OES: 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PALETTE8_RGB5_A1_OES: 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->API == API_OPENGLES; 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convert various base formats to the cooresponding integer format. 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLenum 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_base_format_to_integer_format(GLenum format) 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(format) { 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RED_INTEGER; 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN: 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_GREEN_INTEGER; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE: 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_BLUE_INTEGER; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG: 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RG_INTEGER; 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB: 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RGB_INTEGER; 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA: 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RGBA_INTEGER; 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR: 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_BGR_INTEGER; 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA: 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_BGRA_INTEGER; 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_ALPHA_INTEGER; 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_LUMINANCE_INTEGER_EXT; 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA: 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_LUMINANCE_ALPHA_INTEGER_EXT; 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return format; 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Does the given base texture/renderbuffer format have the channel 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * named by 'pname'? 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_base_format_has_channel(GLenum base_format, GLenum pname) 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (pname) { 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_RED_SIZE: 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_RED_TYPE: 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_RED_SIZE_EXT: 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_RED || 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RG || 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RGB || 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RGBA) { 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GREEN_SIZE: 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GREEN_TYPE: 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_GREEN_SIZE_EXT: 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_RG || 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RGB || 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RGBA) { 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_BLUE_SIZE: 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_BLUE_TYPE: 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_BLUE_SIZE_EXT: 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_RGB || 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_RGBA) { 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_ALPHA_SIZE: 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_ALPHA_TYPE: 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_ALPHA_SIZE_EXT: 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_RGBA || 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_ALPHA || 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_LUMINANCE_ALPHA) { 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_LUMINANCE_SIZE: 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_LUMINANCE_TYPE: 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_LUMINANCE || 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_LUMINANCE_ALPHA) { 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_INTENSITY_SIZE: 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_INTENSITY_TYPE: 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_INTENSITY) { 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_DEPTH_SIZE: 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_DEPTH_TYPE: 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_DEPTH_SIZE_EXT: 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_DEPTH_STENCIL || 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_DEPTH_COMPONENT) { 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RENDERBUFFER_STENCIL_SIZE_EXT: 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (base_format == GL_DEPTH_STENCIL || 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base_format == GL_STENCIL_INDEX) { 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "%s: Unexpected channel token 0x%x\n", 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, pname); 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If format is a generic compressed format, return the corresponding 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * non-compressed format. For other formats, return the format as-is. 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLenum 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_generic_compressed_format_to_uncompressed_format(GLenum format) 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RED: 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RED; 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RG: 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RG; 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGB: 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RGB; 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_RGBA: 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_RGBA; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_ALPHA: 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_ALPHA; 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE: 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_LUMINANCE; 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_LUMINANCE_ALPHA: 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_LUMINANCE_ALPHA; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_INTENSITY: 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INTENSITY; 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* sRGB formats */ 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB: 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_SRGB; 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SRGB_ALPHA: 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_SRGB_ALPHA; 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE: 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_SLUMINANCE; 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COMPRESSED_SLUMINANCE_ALPHA: 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_SLUMINANCE_ALPHA; 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return format; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Do error checking of format/type combinations for glReadPixels, 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glDrawPixels and glTex[Sub]Image. Note that depending on the format 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and type values, we may either generate GL_INVALID_OPERATION or 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_INVALID_ENUM. 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param format pixel format. 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param type pixel type. 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_INVALID_ENUM, GL_INVALID_OPERATION or GL_NO_ERROR 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLenum 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_error_check_format_and_type(const struct gl_context *ctx, 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum format, GLenum type) 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* special type-based checks (see glReadPixels, glDrawPixels error lists) */ 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BITMAP: 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format != GL_COLOR_INDEX && format != GL_STENCIL_INDEX) { 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB) { 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; /* OK */ 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGB_INTEGER_EXT && 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.ARB_texture_rgb10_a2ui) { 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; /* OK */ 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GL_RGBA || 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_BGRA || 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format == GL_ABGR_EXT) { 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; /* OK */ 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT) && 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.ARB_texture_rgb10_a2ui) { 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; /* OK */ 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_24_8: 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXT_packed_depth_stencil) { 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format != GL_DEPTH_STENCIL) { 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.ARB_depth_buffer_float) { 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format != GL_DEPTH_STENCIL) { 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10F_11F_11F_REV: 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXT_packed_float) { 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format != GL_RGB) { 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; /* fall-through */ 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* now, for each format, check the type for compatibility */ 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_INDEX: 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_INDEX: 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BITMAP: 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED: 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN: 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE: 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA: 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 /* not legal! see table 3.6 of the 1.5 spec */ 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INTENSITY: 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE: 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA: 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_COMPONENT: 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG: 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.ARB_texture_rg) 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB: 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_5_9_9_9_REV: 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.EXT_texture_shared_exponent 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10F_11F_11F_REV: 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.EXT_packed_float 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR: 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* NOTE: no packed types are supported with BGR. That's 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * intentional, according to the GL spec. 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA: 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA: 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ABGR_EXT: 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_HALF_FLOAT: 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_half_float_pixel 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_YCBCR_MESA: 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.MESA_ycbcr_texture) 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (type == GL_UNSIGNED_SHORT_8_8_MESA || 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org type == GL_UNSIGNED_SHORT_8_8_REV_MESA) 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_OPERATION; 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_STENCIL_EXT: 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Extensions.EXT_packed_depth_stencil && 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org type == GL_UNSIGNED_INT_24_8) 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (ctx->Extensions.ARB_depth_buffer_float && 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV) 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DUDV_ATI: 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DU8DV8_ATI: 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.ATI_envmap_bumpmap) 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FLOAT: 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* integer-valued formats */ 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RED_INTEGER_EXT: 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_GREEN_INTEGER_EXT: 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLUE_INTEGER_EXT: 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_INTEGER_EXT: 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RG_INTEGER: 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Version >= 30 || 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer) 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGB_INTEGER_EXT: 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Version >= 30 || 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer) 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_3_3_2: 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE_2_3_3_REV: 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5: 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_6_5_REV: 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_texture_rgb10_a2ui 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGR_INTEGER_EXT: 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* NOTE: no packed formats w/ BGR format */ 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Version >= 30 || 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer) 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RGBA_INTEGER_EXT: 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BGRA_INTEGER_EXT: 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Version >= 30 || 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Extensions.EXT_texture_integer) 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4: 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_4_4_4_4_REV: 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_5_5_5_1: 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT_1_5_5_5_REV: 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8: 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_8_8_8_8_REV: 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_10_10_10_2: 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT_2_10_10_10_REV: 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.ARB_texture_rgb10_a2ui 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_INTEGER_EXT: 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LUMINANCE_ALPHA_INTEGER_EXT: 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (type) { 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BYTE: 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_BYTE: 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SHORT: 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_SHORT: 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INT: 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_UNSIGNED_INT: 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Extensions.EXT_texture_integer 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_NO_ERROR : GL_INVALID_ENUM; 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_INVALID_ENUM; 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_NO_ERROR; 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1377