summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/glformats.c69
-rw-r--r--src/mesa/main/glformats.h4
-rw-r--r--src/mesa/main/readpix.c1
-rw-r--r--src/mesa/main/teximage.c65
-rw-r--r--src/mesa/main/teximage.h3
5 files changed, 73 insertions, 69 deletions
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 047a613a131..04029c07c49 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -1372,3 +1372,72 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
}
return GL_NO_ERROR;
}
+
+
+/**
+ * Do error checking of format/type combinations for OpenGL ES glReadPixels
+ * and glTex[Sub]Image.
+ * \return error code, or GL_NO_ERROR.
+ */
+GLenum
+_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
+ unsigned dimensions)
+{
+ GLboolean type_valid = GL_TRUE;
+
+ switch (format) {
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ case GL_LUMINANCE_ALPHA:
+ type_valid = (type == GL_UNSIGNED_BYTE
+ || type == GL_FLOAT
+ || type == GL_HALF_FLOAT_OES);
+ break;
+
+ case GL_RGB:
+ type_valid = (type == GL_UNSIGNED_BYTE
+ || type == GL_UNSIGNED_SHORT_5_6_5
+ || type == GL_FLOAT
+ || type == GL_HALF_FLOAT_OES);
+ break;
+
+ case GL_RGBA:
+ type_valid = (type == GL_UNSIGNED_BYTE
+ || type == GL_UNSIGNED_SHORT_4_4_4_4
+ || type == GL_UNSIGNED_SHORT_5_5_5_1
+ || type == GL_FLOAT
+ || type == GL_HALF_FLOAT_OES
+ || type == GL_UNSIGNED_INT_2_10_10_10_REV);
+ break;
+
+ case GL_DEPTH_COMPONENT:
+ /* This format is filtered against invalid dimensionalities elsewhere.
+ */
+ type_valid = (type == GL_UNSIGNED_SHORT
+ || type == GL_UNSIGNED_INT);
+ break;
+
+ case GL_DEPTH_STENCIL:
+ /* This format is filtered against invalid dimensionalities elsewhere.
+ */
+ type_valid = (type == GL_UNSIGNED_INT_24_8);
+ break;
+
+ case GL_BGRA_EXT:
+ type_valid = (type == GL_UNSIGNED_BYTE);
+
+ /* This feels like a bug in the EXT_texture_format_BGRA8888 spec, but
+ * the format does not appear to be allowed for 3D textures in OpenGL
+ * ES.
+ */
+ if (dimensions != 2)
+ return GL_INVALID_VALUE;
+
+ break;
+
+ default:
+ return GL_INVALID_VALUE;
+ }
+
+ return type_valid ? GL_NO_ERROR : GL_INVALID_OPERATION;
+}
diff --git a/src/mesa/main/glformats.h b/src/mesa/main/glformats.h
index 24fbda99137..e5b63a9636d 100644
--- a/src/mesa/main/glformats.h
+++ b/src/mesa/main/glformats.h
@@ -98,6 +98,10 @@ extern GLenum
_mesa_error_check_format_and_type(const struct gl_context *ctx,
GLenum format, GLenum type);
+extern GLenum
+_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
+ unsigned dimensions);
+
#ifdef __cplusplus
}
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
index 1793095d4a9..f6680c91f44 100644
--- a/src/mesa/main/readpix.c
+++ b/src/mesa/main/readpix.c
@@ -38,7 +38,6 @@
#include "state.h"
#include "glformats.h"
#include "fbobject.h"
-#include "teximage.h"
/**
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index fb22c8d3af1..afda0eaafbf 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1681,71 +1681,6 @@ mutable_tex_object(struct gl_context *ctx, GLenum target)
}
-GLenum
-_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
- unsigned dimensions)
-{
- bool type_valid = true;
-
- switch (format) {
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- type_valid = (type == GL_UNSIGNED_BYTE
- || type == GL_FLOAT
- || type == GL_HALF_FLOAT_OES);
- break;
-
- case GL_RGB:
- type_valid = (type == GL_UNSIGNED_BYTE
- || type == GL_UNSIGNED_SHORT_5_6_5
- || type == GL_FLOAT
- || type == GL_HALF_FLOAT_OES);
- break;
-
- case GL_RGBA:
- type_valid = (type == GL_UNSIGNED_BYTE
- || type == GL_UNSIGNED_SHORT_4_4_4_4
- || type == GL_UNSIGNED_SHORT_5_5_5_1
- || type == GL_FLOAT
- || type == GL_HALF_FLOAT_OES
- || type == GL_UNSIGNED_INT_2_10_10_10_REV);
- break;
-
- case GL_DEPTH_COMPONENT:
- /* This format is filtered against invalid dimensionalities elsewhere.
- */
- type_valid = (type == GL_UNSIGNED_SHORT
- || type == GL_UNSIGNED_INT);
- break;
-
- case GL_DEPTH_STENCIL:
- /* This format is filtered against invalid dimensionalities elsewhere.
- */
- type_valid = (type == GL_UNSIGNED_INT_24_8);
- break;
-
- case GL_BGRA_EXT:
- type_valid = (type == GL_UNSIGNED_BYTE);
-
- /* This feels like a bug in the EXT_texture_format_BGRA8888 spec, but
- * the format does not appear to be allowed for 3D textures in OpenGL
- * ES.
- */
- if (dimensions != 2)
- return GL_INVALID_VALUE;
-
- break;
-
- default:
- return GL_INVALID_VALUE;
- }
-
- return type_valid ? GL_NO_ERROR : GL_INVALID_OPERATION;
-}
-
-
-
/**
* Return expected size of a compressed texture.
*/
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index c7c32d8acdd..e1b15d2520d 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -138,9 +138,6 @@ _mesa_tex_target_to_face(GLenum target);
extern GLint
_mesa_get_texture_dimensions(GLenum target);
-extern GLenum
-_mesa_es_error_check_format_and_type(GLenum format, GLenum type,
- unsigned dimensions);
extern GLboolean
_mesa_legal_texture_dimensions(struct gl_context *ctx, GLenum target,