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