On Tue, Dec 18, 2012 at 4:35 PM, Anuj Phogat <anuj.pho...@gmail.com> wrote: > On Tue, Dec 18, 2012 at 1:26 PM, Kenneth Graunke <kenn...@whitecape.org> > wrote: >> In ES 3.0, when calling glDrawBuffers() on the window system >> framebuffer, the only valid targets are GL_NONE or GL_BACK. Since there >> is no stereo rendering in ES 3.0, this is a single buffer, unlike >> desktop where it may be two (and thus isn't allowed). >> >> For single-buffered configs, GL_BACK ironically means the front (and >> only) buffer. I'm not sure that it matters, however, as ES shouldn't >> have front buffer rendering in the first place. >> >> Fixes es3conform framebuffer_blit_coverage_default_draw_buffer_binding. >> --- >> src/mesa/main/buffers.c | 21 +++++++++++++++++---- >> 1 file changed, 17 insertions(+), 4 deletions(-) >> >> These two patches are a proposed replacement for Anuj's patch 1/6. >> > patch 1/6 is still required to fix failures related to > glGetFramebufferAttachmentParameteriv > in framebuffer_blit_functionality_multisampled_to_singlesampled_blit test > case. > I'll soon post an updated patch. > Please ignore this comment. I confused it with my patch 2/6.
>> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c >> index aa9b9f0..244f4de 100644 >> --- a/src/mesa/main/buffers.c >> +++ b/src/mesa/main/buffers.c >> @@ -94,7 +94,7 @@ supported_buffer_bitmask(const struct gl_context *ctx, >> * GL_FRONT_AND_BACK), return the corresponding bitmask of BUFFER_BIT_* >> flags. >> */ >> static GLbitfield >> -draw_buffer_enum_to_bitmask(GLenum buffer) >> +draw_buffer_enum_to_bitmask(const struct gl_context *ctx, GLenum buffer) >> { >> switch (buffer) { >> case GL_NONE: >> @@ -102,6 +102,19 @@ draw_buffer_enum_to_bitmask(GLenum buffer) >> case GL_FRONT: >> return BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT; >> case GL_BACK: >> + if (_mesa_is_gles3(ctx)) { >> + /* From the ES 3.0 specification, page 180: >> + * "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. >> + */ >> + if (ctx->DrawBuffer->Visual.doubleBufferMode) >> + return BUFFER_BIT_BACK_LEFT; >> + return BUFFER_BIT_FRONT_LEFT; >> + } >> return BUFFER_BIT_BACK_LEFT | BUFFER_BIT_BACK_RIGHT; >> case GL_RIGHT: >> return BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT; >> @@ -241,7 +254,7 @@ _mesa_DrawBuffer(GLenum buffer) >> else { >> const GLbitfield supportedMask >> = supported_buffer_bitmask(ctx, ctx->DrawBuffer); >> - destMask = draw_buffer_enum_to_bitmask(buffer); >> + destMask = draw_buffer_enum_to_bitmask(ctx, buffer); >> if (destMask == BAD_MASK) { >> /* totally bogus buffer */ >> _mesa_error(ctx, GL_INVALID_ENUM, >> @@ -321,7 +334,7 @@ _mesa_DrawBuffers(GLsizei n, const GLenum *buffers) >> return; >> } >> >> - destMask[output] = draw_buffer_enum_to_bitmask(buffers[output]); >> + destMask[output] = draw_buffer_enum_to_bitmask(ctx, >> buffers[output]); >> >> /* From the OpenGL 3.0 specification, page 258: >> * "Each buffer listed in bufs must be one of the values from >> tables >> @@ -451,7 +464,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, >> const GLenum *buffers, >> const GLbitfield supportedMask = supported_buffer_bitmask(ctx, fb); >> GLuint output; >> for (output = 0; output < n; output++) { >> - mask[output] = draw_buffer_enum_to_bitmask(buffers[output]); >> + mask[output] = draw_buffer_enum_to_bitmask(ctx, buffers[output]); >> ASSERT(mask[output] != BAD_MASK); >> mask[output] &= supportedMask; >> } >> -- >> 1.8.0.2 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev