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