[Mesa-dev] [PATCH 1/9] copyteximage: check that sRGB usage is valid for GLES3 / GL
Ian Romanick
idr at freedesktop.org
Fri Jan 18 16:18:15 PST 2013
Assuming you fix the bug I mentioned in patch 6, the series is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
On 01/18/2013 03:55 PM, Matt Turner wrote:
> From: Jordan Justen <jordan.l.justen at intel.com>
>
> Cc: Eric Anholt <eric at anholt.net>
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
> src/mesa/main/teximage.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 5e451e2..2a406f3 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -2427,6 +2427,45 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
>
> rb_internal_format = rb->InternalFormat;
>
> + if ((_mesa_is_desktop_gl(ctx) &&
> + ctx->Extensions.ARB_framebuffer_object) ||
> + _mesa_is_gles3(ctx)) {
> + bool rb_is_srgb = false;
> + bool dst_is_srgb = false;
> +
> + if (ctx->Extensions.EXT_framebuffer_sRGB &&
> + _mesa_get_format_color_encoding(rb->Format) == GL_SRGB) {
> + rb_is_srgb = true;
> + }
> +
> + if (_mesa_get_linear_internalformat(internalFormat) != internalFormat) {
> + dst_is_srgb = true;
> + }
> +
> + if (rb_is_srgb != dst_is_srgb) {
> + /* Page 190 (page 211 of the PDF) in section 8.6 of the OpenGL 4.3
> + * Core Profile spec says:
> + *
> + * "An INVALID_OPERATION error is generated under any of the
> + * following conditions:
> + *
> + * ...
> + *
> + * - if the value of FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
> + * for the framebuffer attachment corresponding to the read
> + * buffer is LINEAR (see section 9.2.3) and internalformat
> + * is one of the sRGB formats in table 8.23
> + * - if the value of FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
> + * for the framebuffer attachment corresponding to the read
> + * buffer is SRGB and internalformat is not one of the sRGB
> + * formats. in table 8.23."
> + */
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glCopyTexImage%dD(srgb usage mismatch)", dimensions);
> + return GL_TRUE;
> + }
> + }
> +
> if (!_mesa_source_buffer_exists(ctx, baseFormat)) {
> _mesa_error(ctx, GL_INVALID_OPERATION,
> "glCopyTexImage%dD(missing readbuffer)", dimensions);
>
More information about the mesa-dev
mailing list