From: Dave Airlie <[email protected]> this fixes the gl3.0 piglit clearbuffer-depth/stencil/invalid buffer tests for gallium drivers.
only question is should mesa be catching this somewhere higher? Signed-off-by: Dave Airlie <[email protected]> --- src/mesa/state_tracker/st_cb_clear.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index 23700ee..1442c6f 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -532,8 +532,9 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) if ((mask & BUFFER_BITS_DS) == BUFFER_BITS_DS && depthRb == stencilRb) { /* clearing combined depth + stencil */ struct st_renderbuffer *strb = st_renderbuffer(depthRb); - - if (strb->surface) { + if (!depthRb) + mask &= ~BUFFER_BITS_DS; + else if (strb->surface) { if (check_clear_depth_stencil_with_quad(ctx, depthRb)) quad_buffers |= PIPE_CLEAR_DEPTHSTENCIL; else @@ -546,7 +547,9 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) if (mask & BUFFER_BIT_DEPTH) { struct st_renderbuffer *strb = st_renderbuffer(depthRb); - if (strb->surface) { + if (!depthRb) + mask &= ~BUFFER_BIT_DEPTH; + else if (strb->surface) { if (check_clear_depth_with_quad(ctx, depthRb, st->clear.enable_ds_separate)) quad_buffers |= PIPE_CLEAR_DEPTH; @@ -557,7 +560,9 @@ st_Clear(struct gl_context *ctx, GLbitfield mask) if (mask & BUFFER_BIT_STENCIL) { struct st_renderbuffer *strb = st_renderbuffer(stencilRb); - if (strb->surface) { + if (!stencilRb) + mask &= ~BUFFER_BIT_STENCIL; + else if (strb->surface) { if (check_clear_stencil_with_quad(ctx, stencilRb, st->clear.enable_ds_separate)) quad_buffers |= PIPE_CLEAR_STENCIL; -- 1.7.7.4 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
