summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward O'Callaghan <[email protected]>2015-11-26 16:55:01 +1100
committerMarek Olšák <[email protected]>2015-12-02 18:23:43 +0100
commit772f429f0a7fc8ee0454a6480f7f71a3c45df4de (patch)
tree9ee8c351995cca74cf24df63a2fab513cd027b4f
parent8f2c5e281da6f750e76958a000e769023aa0a5a7 (diff)
gallium/util: Fix util_blitter_clear_depth_stencil() for num_layers>1
Previously util_blitter_clear_depth_stencil() could not clear more than the first layer. We need to generalise this as we did for util_blitter_clear_render_target(). Signed-off-by: Edward O'Callaghan <[email protected]> Signed-off-by: Marek Olšák <[email protected]>
-rw-r--r--src/gallium/auxiliary/util/u_blitter.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 7f213fad737..759c88f97ab 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -1929,11 +1929,19 @@ void util_blitter_clear_depth_stencil(struct blitter_context *blitter,
pipe->set_framebuffer_state(pipe, &fb_state);
pipe->set_sample_mask(pipe, ~0);
- blitter_set_common_draw_rect_state(ctx, FALSE, FALSE);
blitter_set_dst_dimensions(ctx, dstsurf->width, dstsurf->height);
- blitter->draw_rectangle(blitter, dstx, dsty, dstx+width, dsty+height,
- (float) depth,
- UTIL_BLITTER_ATTRIB_NONE, NULL);
+
+ unsigned num_layers = dstsurf->u.tex.last_layer - dstsurf->u.tex.first_layer + 1;
+ if (num_layers > 1 && ctx->has_layered) {
+ blitter_set_common_draw_rect_state(ctx, FALSE, TRUE);
+ blitter_draw(ctx, dstx, dsty, dstx+width, dsty+height, (float) depth, num_layers);
+ }
+ else {
+ blitter_set_common_draw_rect_state(ctx, FALSE, FALSE);
+ blitter->draw_rectangle(blitter, dstx, dsty, dstx+width, dsty+height,
+ (float) depth,
+ UTIL_BLITTER_ATTRIB_NONE, NULL);
+ }
blitter_restore_vertex_states(ctx);
blitter_restore_fragment_states(ctx);