| From 0b90ffd534ff592b71190f4a6f779e32be4b534e Mon Sep 17 00:00:00 2001 |
| From: Gurchetan Singh <gurchetansingh@chromium.org> |
| Date: Fri, 22 Apr 2016 10:29:56 -0700 |
| Subject: [PATCH] CHROMIUM: mesa: Remove code that returns a desktop GL enum |
| |
| When the draw_buffer_enum_to_bitmask function |
| is called while Mesa is in it's meta state, |
| the wrong GLbitfield is returned sometimes for |
| OpenGL ES contexts. This is because the |
| _mesa_meta_begin function makes the ctx->API always |
| equal to desktop GL during the meta state. |
| |
| In the case of GL_BACK, the _mesa_is_gles(ctx) |
| function is checked when returning the enum. |
| This check evaluates to false during the meta state, |
| even on mobile devices. |
| |
| BUG=b/27656575 |
| TEST=Ran dEQP-GLES2.functional.clipping.line.line_attrib_clip |
| with the pbuffer option with on Cyan. Verified it |
| fails without the patch. |
| |
| Signed-off-by: Tomasz Figa <tfiga@chromium.org> |
| --- |
| src/mesa/main/buffers.c | 39 ++++++++++++++++++--------------------- |
| 1 file changed, 18 insertions(+), 21 deletions(-) |
| |
| diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c |
| index a28c583..36dbc8c 100644 |
| --- a/src/mesa/main/buffers.c |
| +++ b/src/mesa/main/buffers.c |
| @@ -97,27 +97,24 @@ draw_buffer_enum_to_bitmask(const struct gl_context *ctx, GLenum buffer) |
| case GL_FRONT: |
| return BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT; |
| case GL_BACK: |
| - if (_mesa_is_gles(ctx)) { |
| - /* Page 181 (page 192 of the PDF) in section 4.2.1 of the OpenGL |
| - * ES 3.0.1 specification says: |
| - * |
| - * "When draw buffer zero is BACK, color values are written |
| - * into the sole buffer for single-buffered contexts, or into |
| - * the back buffer for double-buffered contexts." |
| - * |
| - * Since there is no stereo rendering in ES 3.0, only return the |
| - * LEFT bits. This also satisfies the "n must be 1" requirement. |
| - * |
| - * We also do this for GLES 1 and 2 because those APIs have no |
| - * concept of selecting the front and back buffer anyway and it's |
| - * convenient to be able to maintain the magic behaviour of |
| - * GL_BACK in that case. |
| - */ |
| - if (ctx->DrawBuffer->Visual.doubleBufferMode) |
| - return BUFFER_BIT_BACK_LEFT; |
| - return BUFFER_BIT_FRONT_LEFT; |
| - } |
| - return BUFFER_BIT_BACK_LEFT | BUFFER_BIT_BACK_RIGHT; |
| + /* Page 181 (page 192 of the PDF) in section 4.2.1 of the OpenGL |
| + * ES 3.0.1 specification says: |
| + * |
| + * "When draw buffer zero is BACK, color values are written |
| + * into the sole buffer for single-buffered contexts, or into |
| + * the back buffer for double-buffered contexts." |
| + * |
| + * Since there is no stereo rendering in ES 3.0, only return the |
| + * LEFT bits. This also satisfies the "n must be 1" requirement. |
| + * |
| + * We also do this for GLES 1 and 2 because those APIs have no |
| + * concept of selecting the front and back buffer anyway and it's |
| + * convenient to be able to maintain the magic behaviour of |
| + * GL_BACK in that case. |
| + */ |
| + if (ctx->DrawBuffer->Visual.doubleBufferMode) |
| + return BUFFER_BIT_BACK_LEFT; |
| + return BUFFER_BIT_FRONT_LEFT; |
| case GL_RIGHT: |
| return BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT; |
| case GL_FRONT_RIGHT: |
| -- |
| 2.1.2 |
| |