On Fri, Jun 6, 2014 at 4:57 PM, Anuj Phogat <anuj.pho...@gmail.com> wrote:
> Fixes many failures in gles3 Khronos CTS test: packed_pixels > > Khronos bug# 9807 > Cc: <mesa-sta...@lists.freedesktop.org> > Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> > > Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> > --- > src/mesa/main/teximage.c | 45 > ++++++++++++++++++++++++++++----------------- > 1 file changed, 28 insertions(+), 17 deletions(-) > > diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c > index c926a2f..11b8439 100644 > --- a/src/mesa/main/teximage.c > +++ b/src/mesa/main/teximage.c > @@ -3647,24 +3647,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. > + /* Conversion from GL_RGB10_A2 source buffer format is not allowed in > + * OpenGL ES 3.0. Khronos bug# 9807. > */ > It may be good to move the comment about RGB10_A2 inside the first two if statements to keep it closer to the actual check. > - 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)) { > + 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); > -- > 1.8.3.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev