[Mesa-dev] [PATCH 15/18] mesa/es: Validate glTexSubImage format and type in Mesa code rather than the ES wrapper

Ian Romanick idr at freedesktop.org
Mon Aug 20 17:06:41 PDT 2012


From: Ian Romanick <ian.d.romanick at intel.com>

v2: Add proper GLES3 filtering.

Signed-off-by: Ian Romanick <ian.d.romanick 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 9c97e60..1f0c127 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1964,6 +1964,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,
-- 
1.7.6.5



More information about the mesa-dev mailing list