1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version:  7.5
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"),
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions:
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file texgen.c
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glTexGen-related functions
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h"
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/context.h"
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/enums.h"
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h"
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mfeatures.h"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/texgen.h"
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/texstate.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "math/m_matrix.h"
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/dispatch.h"
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texgen
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return texgen state for given coordinate
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct gl_texgen *
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_texgen(struct gl_context *ctx, struct gl_texture_unit *texUnit,
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org           GLenum coord)
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->API == API_OPENGLES) {
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return (coord == GL_TEXTURE_GEN_STR_OES)
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         ? &texUnit->GenS : NULL;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (coord) {
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_S:
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return &texUnit->GenS;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_T:
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return &texUnit->GenT;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_R:
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return &texUnit->GenR;
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_Q:
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return &texUnit->GenQ;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texture_unit *texUnit;
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texgen *texgen;
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE))
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_debug(ctx, "glTexGen %s %s %.1f(%s)...\n",
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(coord),
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  _mesa_lookup_enum_by_nr(pname),
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  *params,
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		  _mesa_lookup_enum_by_nr((GLenum) (GLint) *params));
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_OPERATION, "glTexGen(current unit)");
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texUnit = _mesa_get_current_tex_unit(ctx);
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texgen = get_texgen(ctx, texUnit, coord);
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!texgen) {
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glTexGen(coord)");
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_GEN_MODE:
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLenum mode = (GLenum) (GLint) params[0];
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLbitfield bit = 0x0;
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (texgen->Mode == mode)
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         switch (mode) {
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         case GL_OBJECT_LINEAR:
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            bit = TEXGEN_OBJ_LINEAR;
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         case GL_EYE_LINEAR:
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            bit = TEXGEN_EYE_LINEAR;
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         case GL_SPHERE_MAP:
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if (coord == GL_S || coord == GL_T)
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               bit = TEXGEN_SPHERE_MAP;
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         case GL_REFLECTION_MAP_NV:
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if (coord != GL_Q)
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               bit = TEXGEN_REFLECTION_MAP_NV;
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         case GL_NORMAL_MAP_NV:
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if (coord != GL_Q)
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               bit = TEXGEN_NORMAL_MAP_NV;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         default:
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            ; /* nop */
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (!bit) {
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (ctx->API != API_OPENGL
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org             && (bit & (TEXGEN_REFLECTION_MAP_NV | TEXGEN_NORMAL_MAP_NV)) == 0) {
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         FLUSH_VERTICES(ctx, _NEW_TEXTURE);
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         texgen->Mode = mode;
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         texgen->_ModeBit = bit;
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_OBJECT_PLANE:
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (ctx->API != API_OPENGL) {
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (TEST_EQ_4V(texgen->ObjectPlane, params))
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         FLUSH_VERTICES(ctx, _NEW_TEXTURE);
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         COPY_4FV(texgen->ObjectPlane, params);
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_EYE_PLANE:
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         GLfloat tmp[4];
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (ctx->API != API_OPENGL) {
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         /* Transform plane equation by the inverse modelview matrix */
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            _math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_transform_vector(tmp, params,
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                ctx->ModelviewMatrixStack.Top->inv);
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (TEST_EQ_4V(texgen->EyePlane, tmp))
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return;
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         FLUSH_VERTICES(ctx, _NEW_TEXTURE);
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         COPY_4FV(texgen->EyePlane, tmp);
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" );
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Driver.TexGen)
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ctx->Driver.TexGen( ctx, coord, pname, params );
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat p[4];
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[0] = (GLfloat) params[0];
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (pname == GL_TEXTURE_GEN_MODE) {
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[1] = p[2] = p[3] = 0.0F;
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else {
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[1] = (GLfloat) params[1];
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[2] = (GLfloat) params[2];
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[3] = (GLfloat) params[3];
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv(coord, pname, p);
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat p[4];
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[0] = (GLfloat) param;
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[1] = p[2] = p[3] = 0.0F;
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv( coord, pname, p );
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ES1
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_GetTexGenfv(GL_S, pname, params);
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_es_TexGenf(GLenum coord, GLenum pname, GLfloat param)
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (coord != GL_TEXTURE_GEN_STR_OES) {
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GET_CURRENT_CONTEXT(ctx);
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glTexGen[fx](pname)" );
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* set S, T, and R at the same time */
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenf(GL_S, pname, param);
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenf(GL_T, pname, param);
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenf(GL_R, pname, param);
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_es_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (coord != GL_TEXTURE_GEN_STR_OES) {
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GET_CURRENT_CONTEXT(ctx);
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glTexGen[fx]v(pname)" );
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* set S, T, and R at the same time */
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv(GL_S, pname, params);
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv(GL_T, pname, params);
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv(GL_R, pname, params);
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat p[4];
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[0] = (GLfloat) params[0];
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (pname == GL_TEXTURE_GEN_MODE) {
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[1] = p[2] = p[3] = 0.0F;
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else {
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[1] = (GLfloat) params[1];
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[2] = (GLfloat) params[2];
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p[3] = (GLfloat) params[3];
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv( coord, pname, p );
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLfloat p[4];
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[0] = param;
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[1] = p[2] = p[3] = 0.0F;
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGenfv(coord, pname, p);
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLint p[4];
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[0] = param;
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p[1] = p[2] = p[3] = 0;
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_TexGeniv( coord, pname, p );
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void GLAPIENTRY
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texture_unit *texUnit;
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texgen *texgen;
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGendv(current unit)");
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texUnit = _mesa_get_current_tex_unit(ctx);
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texgen = get_texgen(ctx, texUnit, coord);
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!texgen) {
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGendv(coord)");
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_GEN_MODE:
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = ENUM_TO_DOUBLE(texgen->Mode);
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_OBJECT_PLANE:
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_4V(params, texgen->ObjectPlane);
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_EYE_PLANE:
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_4V(params, texgen->EyePlane);
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" );
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texture_unit *texUnit;
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texgen *texgen;
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGenfv(current unit)");
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texUnit = _mesa_get_current_tex_unit(ctx);
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texgen = get_texgen(ctx, texUnit, coord);
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!texgen) {
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)");
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_GEN_MODE:
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = ENUM_TO_FLOAT(texgen->Mode);
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_OBJECT_PLANE:
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (ctx->API != API_OPENGL) {
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" );
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return;
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_4V(params, texgen->ObjectPlane);
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_EYE_PLANE:
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (ctx->API != API_OPENGL) {
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" );
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return;
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_4V(params, texgen->EyePlane);
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" );
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texture_unit *texUnit;
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct gl_texgen *texgen;
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx);
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ASSERT_OUTSIDE_BEGIN_END(ctx);
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGeniv(current unit)");
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texUnit = _mesa_get_current_tex_unit(ctx);
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texgen = get_texgen(ctx, texUnit, coord);
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!texgen) {
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGeniv(coord)");
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (pname) {
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_TEXTURE_GEN_MODE:
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = texgen->Mode;
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_OBJECT_PLANE:
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (ctx->API != API_OPENGL) {
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" );
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return;
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = (GLint) texgen->ObjectPlane[0];
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = (GLint) texgen->ObjectPlane[1];
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = (GLint) texgen->ObjectPlane[2];
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = (GLint) texgen->ObjectPlane[3];
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_EYE_PLANE:
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (ctx->API != API_OPENGL) {
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" );
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[0] = (GLint) texgen->EyePlane[0];
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[1] = (GLint) texgen->EyePlane[1];
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[2] = (GLint) texgen->EyePlane[2];
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      params[3] = (GLint) texgen->EyePlane[3];
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" );
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_init_texgen_dispatch(struct _glapi_table *disp)
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetTexGendv(disp, _mesa_GetTexGendv);
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetTexGenfv(disp, _mesa_GetTexGenfv);
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_GetTexGeniv(disp, _mesa_GetTexGeniv);
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGend(disp, _mesa_TexGend);
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGendv(disp, _mesa_TexGendv);
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGenf(disp, _mesa_TexGenf);
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGenfv(disp, _mesa_TexGenfv);
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGeni(disp, _mesa_TexGeni);
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   SET_TexGeniv(disp, _mesa_TexGeniv);
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_texgen */
447