summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2012-07-27 06:40:26 -0700
committerIan Romanick <[email protected]>2012-08-23 10:15:31 -0700
commit9848e86af0c937a6f7609289ab2705c3535f378f (patch)
tree93019698a8ec0ab0bc074da206ee68dffe0dbaa1 /src/mesa
parent409620e47748479aaef593dc9bec0d6dd520e14a (diff)
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 <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/APIspec.xml133
-rw-r--r--src/mesa/main/teximage.c17
2 files changed, 17 insertions, 133 deletions
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index ffc384c8756..7b6e25ebdf8 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 e22881ce6c9..3cd9d401553 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,