mesa/es: Validate glGetTexGen parameters in Mesa code rather than the ES wrapper
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 27 Jul 2012 23:47:27 +0000 (16:47 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 29 Aug 2012 22:09:35 +0000 (15:09 -0700)
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/APIspec.xml
src/mesa/main/es1_conversion.c
src/mesa/main/texgen.c
src/mesa/main/texgen.h

index 02e2c9fa3055786ce5b64853c5fe6b60114586b3..ff204fc35c5f3e3f218f438526f241bd7dff2554 100644 (file)
                <param name="pname" type="GLenum"/>
                <vector name="params" type="GLtype *" size="dynamic"/>
        </proto>
-
-       <desc name="coord">
-               <value name="GL_TEXTURE_GEN_STR_OES"/>
-       </desc>
-       <desc name="pname">
-               <value name="GL_TEXTURE_GEN_MODE_OES"/>
-               <desc name="params" vector_size="1" convert="false"/>
-       </desc>
 </template>
 
 <template name="GetTexParameter" direction="get">
index 6edc97bd468cad128ed5007864ddef6fce20d282..851dc726bc246377f2ad05405457f3ef236b5f7b 100644 (file)
@@ -398,63 +398,13 @@ _es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
 void GL_APIENTRY
 _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
 {
-   unsigned int i;
-   unsigned int n_params = 1;
-   GLfloat converted_params[1];
-
-   switch(coord) {
-   case GL_TEXTURE_GEN_STR_OES:
-      break;
-   default:
-      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                  "glGetTexGenivOES(coord=0x%x)", coord);
-      return;
-   }
-   switch(pname) {
-   case GL_TEXTURE_GEN_MODE:
-      n_params = 1;
-      break;
-   default:
-      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                  "glGetTexGenivOES(pname=0x%x)", pname);
-      return;
-   }
-
-   _es_GetTexGenfv(coord, pname, converted_params);
-   for (i = 0; i < n_params; i++) {
-      params[i] = (GLfloat) converted_params[i];
-   }
+   _mesa_GetTexGeniv(coord, pname, params);
 }
 
 void GL_APIENTRY
 _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
 {
-   unsigned int i;
-   unsigned int n_params = 1;
-   GLfloat converted_params[1];
-
-   switch(coord) {
-   case GL_TEXTURE_GEN_STR_OES:
-      break;
-   default:
-      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                  "glGetTexGenxvOES(coord=0x%x)", coord);
-      return;
-   }
-   switch(pname) {
-   case GL_TEXTURE_GEN_MODE:
-      n_params = 1;
-      break;
-   default:
-      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                  "glGetTexGenxvOES(pname=0x%x)", pname);
-      return;
-   }
-
-   _es_GetTexGenfv(coord, pname, converted_params);
-   for (i = 0; i < n_params; i++) {
-      params[i] = (GLfloat) converted_params[i];
-   }
+   _mesa_GetTexGeniv(coord, pname, (GLint *) params);
 }
 
 void GL_APIENTRY
index 05d68915add87b681b315e089402b1c22b2b6997..3788669d4ea86e97fe02ee230150d3a62e02821c 100644 (file)
@@ -220,7 +220,6 @@ _mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
 void GLAPIENTRY
 _es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
 {
-   ASSERT(coord == GL_TEXTURE_GEN_STR_OES);
    _mesa_GetTexGenfv(GL_S, pname, params);
 }
 
@@ -358,9 +357,17 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
       params[0] = ENUM_TO_FLOAT(texgen->Mode);
       break;
    case GL_OBJECT_PLANE:
+      if (ctx->API != API_OPENGL) {
+         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" );
+         return;
+      }
       COPY_4V(params, texgen->ObjectPlane);
       break;
    case GL_EYE_PLANE:
+      if (ctx->API != API_OPENGL) {
+         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" );
+         return;
+      }
       COPY_4V(params, texgen->EyePlane);
       break;
    default:
@@ -370,7 +377,7 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 
 
 
-static void GLAPIENTRY
+void GLAPIENTRY
 _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 {
    struct gl_texture_unit *texUnit;
@@ -396,12 +403,20 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
       params[0] = texgen->Mode;
       break;
    case GL_OBJECT_PLANE:
+      if (ctx->API != API_OPENGL) {
+         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" );
+         return;
+      }
       params[0] = (GLint) texgen->ObjectPlane[0];
       params[1] = (GLint) texgen->ObjectPlane[1];
       params[2] = (GLint) texgen->ObjectPlane[2];
       params[3] = (GLint) texgen->ObjectPlane[3];
       break;
    case GL_EYE_PLANE:
+      if (ctx->API != API_OPENGL) {
+         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" );
+         return;
+      }
       params[0] = (GLint) texgen->EyePlane[0];
       params[1] = (GLint) texgen->EyePlane[1];
       params[2] = (GLint) texgen->EyePlane[2];
index 60a9522af8814a1184c8c5358b1add3baa2cd1e5..1d13422b2db979d412d305e1d842f12488548ce8 100644 (file)
@@ -48,6 +48,9 @@ _mesa_TexGeni( GLenum coord, GLenum pname, GLint param );
 extern void GLAPIENTRY
 _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );
 
+extern void GLAPIENTRY
+_mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params );
+
 extern void
 _mesa_init_texgen_dispatch(struct _glapi_table *disp);