This fixes piglit arb_draw_buffers-rt0_none on AMD CEDAR. No piglit regressions on the same hardware.
Signed-off-by: Henri Verbeet <hverb...@gmail.com> --- src/mesa/state_tracker/st_cb_clear.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index 887e58b..e7345a2 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -430,14 +430,20 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) st_validate_state( st ); if (mask & BUFFER_BITS_COLOR) { + unsigned int color_idx = ~0u; + for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { - GLuint b = ctx->DrawBuffer->_ColorDrawBufferIndexes[i]; + gl_buffer_index b = ctx->DrawBuffer->_ColorDrawBufferIndexes[i]; + + if (b == -1) + continue; + ++color_idx; if (mask & (1 << b)) { struct gl_renderbuffer *rb = ctx->DrawBuffer->Attachment[b].Renderbuffer; struct st_renderbuffer *strb = st_renderbuffer(rb); - int colormask_index = ctx->Extensions.EXT_draw_buffers2 ? i : 0; + int colormask_index = ctx->Extensions.EXT_draw_buffers2 ? color_idx : 0; if (!strb || !strb->surface) continue; @@ -447,9 +453,9 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) if (is_scissor_enabled(ctx, rb) || is_color_masked(ctx, colormask_index)) - quad_buffers |= PIPE_CLEAR_COLOR0 << i; + quad_buffers |= PIPE_CLEAR_COLOR0 << color_idx; else - clear_buffers |= PIPE_CLEAR_COLOR0 << i; + clear_buffers |= PIPE_CLEAR_COLOR0 << color_idx; } } } -- 1.7.10.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev