diff options
author | Anuj Phogat <[email protected]> | 2014-06-06 11:59:28 -0700 |
---|---|---|
committer | Anuj Phogat <[email protected]> | 2014-08-04 17:12:05 -0700 |
commit | 6df48ff27ad14c341a7ba4f1f833c8dbfbd056c1 (patch) | |
tree | 2eb7286d184534b85597b1b7903840a43793c340 /src/mesa/main | |
parent | 5c0d2a12f30d75df10ede6ab98434f55abae3fef (diff) |
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: <[email protected]>
Signed-off-by: Anuj Phogat <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/teximage.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 64ccc915053..0bc8fea32ea 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); |