Mesa (master): mesa: Add gles3 error condition for GL_RGBA10_A2 buffer format in glCopyTexImage* ()
Anuj Phogat
aphogat at kemper.freedesktop.org
Tue Aug 5 01:32:11 UTC 2014
Module: Mesa
Branch: master
Commit: 6df48ff27ad14c341a7ba4f1f833c8dbfbd056c1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6df48ff27ad14c341a7ba4f1f833c8dbfbd056c1
Author: Anuj Phogat <anuj.phogat at gmail.com>
Date: Fri Jun 6 11:59:28 2014 -0700
mesa: Add gles3 error condition for GL_RGBA10_A2 buffer format in glCopyTexImage*()
Fixes many failures in gles3 Khronos CTS test: packed_pixels
Khronos bug# 9807
Cc: <mesa-stable at lists.freedesktop.org>
Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
---
src/mesa/main/teximage.c | 47 ++++++++++++++++++++++++++++------------------
1 file changed, 29 insertions(+), 18 deletions(-)
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 64ccc91..0bc8fea 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -3694,24 +3694,35 @@ copyteximage(struct gl_context *ctx, GLuint dims,
rb = _mesa_get_read_renderbuffer_for_format(ctx, internalFormat);
- /* From Page 139 of OpenGL ES 3.0 spec:
- * "If internalformat is sized, the internal format of the new texel
- * array is internalformat, and this is also the new texel array’s
- * effective internal format. If the component sizes of internalformat
- * do not exactly match the corresponding component sizes of the source
- * buffer’s effective internal format, described below, an
- * INVALID_OPERATION error is generated. If internalformat is unsized,
- * the internal format of the new texel array is the effective internal
- * format of the source buffer, and this is also the new texel array’s
- * effective internal format.
- */
- if (_mesa_is_gles3(ctx)
- && !_mesa_is_enum_format_unsized(internalFormat)
- && formats_differ_in_component_sizes (texFormat, rb->Format)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexImage%uD(componenet size changed in"
- " internal format)", dims);
- return;
+ if (_mesa_is_gles3(ctx)) {
+ if (_mesa_is_enum_format_unsized(internalFormat)) {
+ /* Conversion from GL_RGB10_A2 source buffer format is not allowed in
+ * OpenGL ES 3.0. Khronos bug# 9807.
+ */
+ if (rb->InternalFormat == GL_RGB10_A2) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glCopyTexImage%uD(Reading from GL_RGB10_A2 buffer and"
+ " writing to unsized internal format)", dims);
+ return;
+ }
+ }
+ /* From Page 139 of OpenGL ES 3.0 spec:
+ * "If internalformat is sized, the internal format of the new texel
+ * array is internalformat, and this is also the new texel array’s
+ * effective internal format. If the component sizes of internalformat
+ * do not exactly match the corresponding component sizes of the source
+ * buffer’s effective internal format, described below, an
+ * INVALID_OPERATION error is generated. If internalformat is unsized,
+ * the internal format of the new texel array is the effective internal
+ * format of the source buffer, and this is also the new texel array’s
+ * effective internal format.
+ */
+ else if (formats_differ_in_component_sizes (texFormat, rb->Format)) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glCopyTexImage%uD(componenet size changed in"
+ " internal format)", dims);
+ return;
+ }
}
assert(texFormat != MESA_FORMAT_NONE);
More information about the mesa-commit
mailing list