1169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/* 2169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Mesa 3-D graphics library 33f4e80c06b5b6efcd540ca5daf734100fad19ff0Brian Paul * Version: 7.1 4169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 53f4e80c06b5b6efcd540ca5daf734100fad19ff0Brian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 7169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 8169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * copy of this software and associated documentation files (the "Software"), 9169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * to deal in the Software without restriction, including without limitation 10169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 12169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Software is furnished to do so, subject to the following conditions: 13169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 14169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * The above copyright notice and this permission notice shall be included 15169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * in all copies or substantial portions of the Software. 16169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 17169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 24169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 25169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 26169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 27169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "glheader.h" 28169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "context.h" 29169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "get.h" 30169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "enums.h" 31169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "extensions.h" 32db61b9ce39bccc43140357652ceb78baaf2aea44Vinson Lee#include "mfeatures.h" 330117da40cd7edd3d165bb28569c289b37eca12b9Vinson Lee#include "mtypes.h" 34169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 35e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul 36e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul/** 37e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul * Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query. 38e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul */ 3904bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsbergstatic const GLubyte * 40f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergshading_language_version(struct gl_context *ctx) 4104bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg{ 4204bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg switch (ctx->API) { 4304bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg case API_OPENGL: 4409714c09a40501d82823e42f7461d7b8d7bf11c0Jordan Justen case API_OPENGL_CORE: 45e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul if (!ctx->Extensions.ARB_shader_objects) { 46e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetString"); 47e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul return (const GLubyte *) 0; 48e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul } 49e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul 50e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul switch (ctx->Const.GLSLVersion) { 51e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul case 110: 52e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul return (const GLubyte *) "1.10"; 53e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul case 120: 54e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul return (const GLubyte *) "1.20"; 55e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul case 130: 56e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul return (const GLubyte *) "1.30"; 57ac5a5b324335195b5a5ed98775ce442c573e7e1dEric Anholt case 140: 58ac5a5b324335195b5a5ed98775ce442c573e7e1dEric Anholt return (const GLubyte *) "1.40"; 59d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke case 150: 60d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke return (const GLubyte *) "1.50"; 61d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke case 330: 62d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke return (const GLubyte *) "3.30"; 63d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke case 400: 64d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke return (const GLubyte *) "4.00"; 65d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke case 410: 66d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke return (const GLubyte *) "4.10"; 67d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke case 420: 68d84b3a5a3c855e3f2ffc83bbbda9d615b04c0ad2Kenneth Graunke return (const GLubyte *) "4.20"; 69e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul default: 70e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul _mesa_problem(ctx, 71e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul "Invalid GLSL version in shading_language_version()"); 72e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul return (const GLubyte *) 0; 73e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul } 74e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul break; 7504bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg 7604bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg case API_OPENGLES2: 7704bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16"; 7804bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg 7904bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg case API_OPENGLES: 80e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul /* fall-through */ 81e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul 8204bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg default: 83e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul _mesa_problem(ctx, "Unexpected API value in shading_language_version()"); 8404bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg return (const GLubyte *) 0; 8504bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg } 8604bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg} 8704bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg 88169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 89169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 90169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Query string-valued state. The return value should _not_ be freed by 91169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the caller. 92169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 93169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param name the state variable to query. 94169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 95169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \sa glGetString(). 96169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 97169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Tries to get the string from dd_function_table::GetString, otherwise returns 98169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the hardcoded strings. 99169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 100169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paulconst GLubyte * GLAPIENTRY 101169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetString( GLenum name ) 102169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 103169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 104169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul static const char *vendor = "Brian Paul"; 105169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul static const char *renderer = "Mesa"; 106365582dd6f632aafbc1c817aa57926d679bb2efcMichal Krol 107346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul if (!ctx) 108346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul return NULL; 109346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul 110a0c85249244e1af8dac88076d5f384cf4bd01236Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); 111169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 112169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul /* this is a required driver function */ 113169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul assert(ctx->Driver.GetString); 114169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul { 115169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul /* Give the driver the chance to handle this query */ 116169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul const GLubyte *str = (*ctx->Driver.GetString)(ctx, name); 117169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (str) 118169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return str; 119169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 120169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 121169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul switch (name) { 122169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VENDOR: 123169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return (const GLubyte *) vendor; 124169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_RENDERER: 125948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return (const GLubyte *) renderer; 126169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VERSION: 1273510a1b0c5398b4fce4157d5b578344d2a0bd7d3Brian Paul return (const GLubyte *) ctx->VersionString; 128169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_EXTENSIONS: 1292bcf55549026972c186b5e6c9f351ee77da30166Ian Romanick if (ctx->API == API_OPENGL_CORE) { 1302bcf55549026972c186b5e6c9f351ee77da30166Ian Romanick _mesa_error(ctx, GL_INVALID_ENUM, "glGetString(GL_EXTENSIONS)"); 1312bcf55549026972c186b5e6c9f351ee77da30166Ian Romanick return (const GLubyte *) 0; 1322bcf55549026972c186b5e6c9f351ee77da30166Ian Romanick } 1336acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol return (const GLubyte *) ctx->Extensions.String; 13404bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg#if FEATURE_ARB_shading_language_100 || FEATURE_ES2 13504bf868ad9f0034ce7b726eadd2ffac346441a68Kristian Høgsberg case GL_SHADING_LANGUAGE_VERSION: 136c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick if (ctx->API == API_OPENGLES) 137c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick break; 13867ffbbbb5db88f936d54bacab971d20e44a83da1Kenneth Graunke return shading_language_version(ctx); 1391a5fecb4d6975418da055891f6899a9f4aaa0b31Michal Krol#endif 140169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \ 141169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program 142169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_PROGRAM_ERROR_STRING_NV: 143c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick if (ctx->API == API_OPENGL && 144c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick (ctx->Extensions.NV_fragment_program || 145c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick ctx->Extensions.ARB_fragment_program || 146c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick ctx->Extensions.NV_vertex_program || 147c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick ctx->Extensions.ARB_vertex_program)) { 148169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return (const GLubyte *) ctx->Program.ErrorString; 149169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 150c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick break; 1516acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol#endif 152169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul default: 153c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick break; 154169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 155c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick 156c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); 157c13f36ce4e34821144ca6479e4bc3598b598d855Ian Romanick return (const GLubyte *) 0; 158169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 159169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 160169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 161169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 16216e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul * GL3 16316e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul */ 16416e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paulconst GLubyte * GLAPIENTRY 16516e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul_mesa_GetStringi(GLenum name, GLuint index) 16616e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul{ 16716e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul GET_CURRENT_CONTEXT(ctx); 16816e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 16916e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul if (!ctx) 17016e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul return NULL; 17116e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 17216e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); 17316e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 17416e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul switch (name) { 17516e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul case GL_EXTENSIONS: 17616e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul if (index >= _mesa_get_extension_count(ctx)) { 17716e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glGetStringi(index=%u)", index); 17816e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul return (const GLubyte *) 0; 17916e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul } 18016e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul return _mesa_get_enabled_extension(ctx, index); 18116e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul default: 18216e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); 18316e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul return (const GLubyte *) 0; 18416e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul } 18516e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul} 18616e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 18716e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 18816e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul 18916e91d4c0e1088f5c4098b01b4b7bf670cd66c4aBrian Paul/** 190169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Return pointer-valued state, such as a vertex array pointer. 191169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 192169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param pname names state to be queried 193169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param params returns the pointer value 194169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 195169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \sa glGetPointerv(). 196169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 197169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Tries to get the specified pointer via dd_function_table::GetPointerv, 198169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * otherwise gets the specified pointer from the current context. 199169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 200169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paulvoid GLAPIENTRY 201169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetPointerv( GLenum pname, GLvoid **params ) 202169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 203169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 204169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul const GLuint clientUnit = ctx->Array.ActiveTexture; 205169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 206169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 207169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (!params) 208169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return; 209169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 210169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (MESA_VERBOSE & VERBOSE_API) 211169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname)); 212169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 213169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul switch (pname) { 214169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VERTEX_ARRAY_POINTER: 2159555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 2169555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 217762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Ptr; 218169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 219169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_NORMAL_ARRAY_POINTER: 2209555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 2219555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 222762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr; 223169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 224169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_COLOR_ARRAY_POINTER: 2259555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 2269555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 227762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr; 228169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 229169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: 2309555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2319555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 232762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr; 233169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 234169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: 2359555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2369555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 237762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Ptr; 238169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 239169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_INDEX_ARRAY_POINTER: 2409555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2419555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 242762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr; 243169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 244169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_TEXTURE_COORD_ARRAY_POINTER: 2459555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 2469555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 247762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(clientUnit)].Ptr; 248169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 249169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_EDGE_FLAG_ARRAY_POINTER: 2509555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2519555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 252762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr; 253169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 254169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_FEEDBACK_BUFFER_POINTER: 2559555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2569555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 257169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul *params = ctx->Feedback.Buffer; 258169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 259169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_SELECTION_BUFFER_POINTER: 2609555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGL) 2619555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 262169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul *params = ctx->Select.Buffer; 263169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 264c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu#if FEATURE_point_size_array 265c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu case GL_POINT_SIZE_ARRAY_POINTER_OES: 2669555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (ctx->API != API_OPENGLES) 2679555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 268762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Ptr; 269c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu break; 270c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu#endif 271ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled case GL_DEBUG_CALLBACK_FUNCTION_ARB: 2729555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (!_mesa_is_desktop_gl(ctx)) 2739555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 274ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled *params = (GLvoid *) ctx->Debug.Callback; 275ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled break; 276ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled case GL_DEBUG_CALLBACK_USER_PARAM_ARB: 2779555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick if (!_mesa_is_desktop_gl(ctx)) 2789555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 279ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled *params = ctx->Debug.CallbackData; 280ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled break; 281169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul default: 2829555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick goto invalid_pname; 283169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 2849555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick 2859555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick return; 2869555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick 2879555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanickinvalid_pname: 2889555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); 2899555d7bdc1cec4cf08be85a2d1e9095de8dd3771Ian Romanick return; 290169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 291169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 292169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 293169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 294169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Returns the current GL error code, or GL_NO_ERROR. 295169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \return current error code 296169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 297f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * Returns __struct gl_contextRec::ErrorValue. 298169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 299169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian PaulGLenum GLAPIENTRY 300169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetError( void ) 301169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 302169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 303169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GLenum e = ctx->ErrorValue; 304169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); 305169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 306169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (MESA_VERBOSE & VERBOSE_API) 307169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e)); 308169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 309169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->ErrorValue = (GLenum) GL_NO_ERROR; 310def77160d69dbb0a333ea3f9263e661f8557a7ecBrian Paul ctx->ErrorDebugCount = 0; 311169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return e; 312169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 3136b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 3146b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul/** 3156b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul * Returns an error code specified by GL_ARB_robustness, or GL_NO_ERROR. 3166b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul * \return current context status 3176b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul */ 3186b329b9274b18c50f4177eef7ee087d50ebc1525Brian PaulGLenum GLAPIENTRY 3196b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetGraphicsResetStatusARB( void ) 3206b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul{ 3216b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul GET_CURRENT_CONTEXT(ctx); 3226b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul GLenum status = ctx->ResetStatus; 3236b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 3246b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul if (MESA_VERBOSE & VERBOSE_API) 3256b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul _mesa_debug(ctx, "glGetGraphicsResetStatusARB" 3266b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul "(always returns GL_NO_ERROR)\n"); 3276b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 3286b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul return status; 3296b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul} 330