mesa/es: Validate GL_TEXTURE_WRAP param in Mesa code rather than the ES wrapper
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 3 Oct 2011 20:03:47 +0000 (13:03 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 23 Aug 2012 17:15:29 +0000 (10:15 -0700)
v2: Add proper core-profile filtering.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/main/APIspec.xml
src/mesa/main/es1_conversion.c
src/mesa/main/texparam.c

index c26caf6..6d7dbfd 100644 (file)
                <value name="GL_TEXTURE_WRAP_S"/>
                <value name="GL_TEXTURE_WRAP_T"/>
                <value name="GL_TEXTURE_WRAP_R_OES" category="OES_texture_3D"/>
-
-               <desc name="param">
-                       <value name="GL_CLAMP_TO_EDGE"/>
-                       <value name="GL_REPEAT"/>
-                       <value name="GL_MIRRORED_REPEAT" category="GLES2.0"/>
-                       <value name="GL_MIRRORED_REPEAT_OES" category="OES_texture_mirrored_repeat"/>
-               </desc>
-       </desc>
-
-        <desc name="pname">
-               <value name="GL_TEXTURE_MIN_FILTER"/>
-               <value name="GL_TEXTURE_MAG_FILTER"/>
+               <value name="GL_TEXTURE_MIN_FILTER"/>
+               <value name="GL_TEXTURE_MAG_FILTER"/>
                <value name="GL_TEXTURE_MAX_ANISOTROPY_EXT" category="EXT_texture_filter_anisotropic"/>
         </desc>
 
index ebd1e88..0d9f5b4 100644 (file)
@@ -1253,11 +1253,6 @@ _es_TexParameterx(GLenum target, GLenum pname, GLfixed param)
    switch(pname) {
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
-      if (param != GL_CLAMP_TO_EDGE && param != GL_REPEAT && param != GL_MIRRORED_REPEAT) {
-         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                     "glTexParameterx(pname=0x%x)", pname);
-         return;
-      }
       convert_param_value = false;
       break;
    case GL_TEXTURE_MIN_FILTER:
@@ -1310,11 +1305,6 @@ _es_TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
    switch(pname) {
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
-      if (params[0] != GL_CLAMP_TO_EDGE && params[0] != GL_REPEAT && params[0] != GL_MIRRORED_REPEAT) {
-         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,
-                     "glTexParameterxv(pname=0x%x)", pname);
-         return;
-      }
       convert_params_value = false;
       n_params = 1;
       break;
index a0c508c..a0f736c 100644 (file)
@@ -56,11 +56,16 @@ static GLboolean
 validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap)
 {
    const struct gl_extensions * const e = & ctx->Extensions;
+   const bool is_desktop_gl = _mesa_is_desktop_gl(ctx);
    bool supported;
 
    switch (wrap) {
    case GL_CLAMP:
-      supported = (target != GL_TEXTURE_EXTERNAL_OES);
+      /* GL_CLAMP was removed in the core profile, and it has never existed in
+       * OpenGL ES.
+       */
+      supported = (ctx->API == API_OPENGL)
+         && (target != GL_TEXTURE_EXTERNAL_OES);
       break;
 
    case GL_CLAMP_TO_EDGE:
@@ -68,7 +73,7 @@ validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap)
       break;
 
    case GL_CLAMP_TO_BORDER:
-      supported = e->ARB_texture_border_clamp
+      supported = is_desktop_gl && e->ARB_texture_border_clamp
          && (target != GL_TEXTURE_EXTERNAL_OES);
       break;
 
@@ -80,13 +85,14 @@ validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap)
 
    case GL_MIRROR_CLAMP_EXT:
    case GL_MIRROR_CLAMP_TO_EDGE_EXT:
-      supported = (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp)
+      supported = is_desktop_gl 
+         && (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp)
         && (target != GL_TEXTURE_RECTANGLE_NV)
          && (target != GL_TEXTURE_EXTERNAL_OES);
       break;
 
    case GL_MIRROR_CLAMP_TO_BORDER_EXT:
-      supported = e->EXT_texture_mirror_clamp
+      supported = is_desktop_gl && e->EXT_texture_mirror_clamp
         && (target != GL_TEXTURE_RECTANGLE_NV)
          && (target != GL_TEXTURE_EXTERNAL_OES);
       break;