Am 11.08.2014 00:51, schrieb Brian Paul: > On 08/08/2014 07:43 PM, Roland Scheidegger wrote: >> Am 08.08.2014 23:20, schrieb Brian Paul: >>> Fixes failed assertion when _mesa_update_draw_buffers() was called >>> with GL_DRAW_BUFFER == GL_FRONT_AND_BACK. The piglit gl30basic hit >>> this. >>> >>> Cc: "10.2" <mesa-sta...@lists.freedesktop.org> >>> --- >>> src/mesa/main/buffers.c | 5 +++-- >>> 1 file changed, 3 insertions(+), 2 deletions(-) >>> >>> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c >>> index b13a7af..6b4fac9 100644 >>> --- a/src/mesa/main/buffers.c >>> +++ b/src/mesa/main/buffers.c >>> @@ -494,10 +494,11 @@ _mesa_drawbuffers(struct gl_context *ctx, >>> GLuint n, const GLenum *buffers, >>> } >>> >>> /* >>> - * If n==1, destMask[0] may have up to four bits set. >>> + * destMask[0] may have up to four bits set >>> + * (ex: glDrawBuffer(GL_FRONT_AND_BACK)). >>> * Otherwise, destMask[x] can only have one bit set. >>> */ >>> - if (n == 1) { >>> + if (_mesa_bitcount(destMask[0]) > 1) { >>> GLuint count = 0, destMask0 = destMask[0]; >>> while (destMask0) { >>> GLint bufIndex = ffs(destMask0) - 1; >>> >> >> Hmm I don't understand how that could fail. Either you have a winsys >> fbo, in which case n has to be 1, or you have a user fbo, in which case >> you can only have the single color_buffer_x bits. >> What am I missing here? > > It happened when called from _mesa_update_draw_buffers() where n = > MaxDrawBuffers (8) and the user had previously called > glDrawBuffer(GL_FRONT_AND_BACK). This could only happen during a > MakeCurrent() operation. > > -Brian >
Ahh I see now. MakeCurrent() will, unlike the other callers, cause all (max) draw buffers to be updated, without a destMask, thus n = 8 but only the first buffer really containing anything useful (the rest shouldn't be set and their calculated masks all zero). Looks good then. I wasn't able to trigger it for some reason, though. Reviewed-by: Roland Scheidegger <srol...@vmware.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev