Mesa (master): mesa/es: Validate glTexSubImage format and type in Mesa code rather than the ES wrapper

Ian Romanick idr at kemper.freedesktop.org
Thu Aug 23 17:20:51 UTC 2012


Module: Mesa
Branch: master
Commit: 9848e86af0c937a6f7609289ab2705c3535f378f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9848e86af0c937a6f7609289ab2705c3535f378f

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Fri Jul 27 06:40:26 2012 -0700

mesa/es: Validate glTexSubImage format and type in Mesa code rather than the ES wrapper

v2: Add proper GLES3 filtering.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

---

 src/mesa/main/APIspec.xml |  133 ---------------------------------------------
 src/mesa/main/teximage.c  |   17 ++++++
 2 files changed, 17 insertions(+), 133 deletions(-)

diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index ffc384c..7b6e25e 100644
--- a/src/mesa/main/APIspec.xml
+++ b/src/mesa/main/APIspec.xml
@@ -1455,85 +1455,6 @@
 		<param name="type" type="GLenum"/>
 		<param name="pixels" type="const GLvoid *"/>
 	</proto>
-
-	<desc name="format">
-		<value name="GL_ALPHA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_RGB"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_UNSIGNED_SHORT_5_6_5"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_RGBA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_UNSIGNED_SHORT_4_4_4_4"/>
-			<value name="GL_UNSIGNED_SHORT_5_5_5_1"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-			<value name="GL_UNSIGNED_INT_2_10_10_10_REV_EXT" category="EXT_texture_type_2_10_10_10_REV"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_LUMINANCE"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_LUMINANCE_ALPHA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format" category="OES_depth_texture">
-		<value name="GL_DEPTH_COMPONENT"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_SHORT"/>
-			<value name="GL_UNSIGNED_INT"/>
-		</desc>
-	</desc>
-
-	<desc name="format" category="OES_packed_depth_stencil">
-		<value name="GL_DEPTH_STENCIL_OES"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_INT_24_8_OES"/>
-		</desc>
-	</desc>
-
-	<desc name="format" category="EXT_texture_format_BGRA8888">
-		<value name="GL_BGRA_EXT"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-		</desc>
-	</desc>
 </template>
 
 <template name="BindTexture">
@@ -1624,60 +1545,6 @@
 		<param name="type" type="GLenum"/>
 		<param name="pixels" type="const GLvoid *"/>
 	</proto>
-
-	<desc name="format">
-		<value name="GL_ALPHA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_RGB"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_UNSIGNED_SHORT_5_6_5"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_RGBA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_UNSIGNED_SHORT_4_4_4_4"/>
-			<value name="GL_UNSIGNED_SHORT_5_5_5_1"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-			<value name="GL_UNSIGNED_INT_2_10_10_10_REV_EXT" category="EXT_texture_type_2_10_10_10_REV"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_LUMINANCE"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
-
-	<desc name="format">
-		<value name="GL_LUMINANCE_ALPHA"/>
-
-		<desc name="type" error="GL_INVALID_OPERATION">
-			<value name="GL_UNSIGNED_BYTE"/>
-			<value name="GL_FLOAT" category="OES_texture_float"/>
-			<value name="GL_HALF_FLOAT_OES" category="OES_texture_half_float"/>
-		</desc>
-	</desc>
 </template>
 
 <template name="CopyTexSubImage3D">
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index e22881c..3cd9d40 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1927,6 +1927,23 @@ subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
       return GL_TRUE;
    }
 
+   /* OpenGL ES 1.x and OpenGL ES 2.0 impose additional restrictions on the
+    * combinations of format and type that can be used.  Formats and types
+    * that require additional extensions (e.g., GL_FLOAT requires
+    * GL_OES_texture_float) are filtered elsewhere.
+    */
+   if (_mesa_is_gles(ctx) && !_mesa_is_gles3(ctx)) {
+      err = _mesa_es_error_check_format_and_type(format, type, dimensions);
+      if (err != GL_NO_ERROR) {
+         _mesa_error(ctx, err,
+                     "glTexSubImage%dD(format = %s, type = %s)",
+                     dimensions,
+                     _mesa_lookup_enum_by_nr(format),
+                     _mesa_lookup_enum_by_nr(type));
+         return GL_TRUE;
+      }
+   }
+
    err = _mesa_error_check_format_and_type(ctx, format, type);
    if (err != GL_NO_ERROR) {
       _mesa_error(ctx, err,




More information about the mesa-commit mailing list