From a7f3697eb849376dda23556df479127909cb7fd4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 9 Jul 2012 02:23:22 +0200 Subject: [PATCH] st/mesa: set colormask to zero when blitting depth Reviewed-by: Alex Deucher --- src/gallium/auxiliary/util/u_blit.c | 12 ++++++++---- src/mesa/state_tracker/st_cb_blit.c | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c index 6cdfbcaca3e..30f4a93d2dc 100644 --- a/src/gallium/auxiliary/util/u_blit.c +++ b/src/gallium/auxiliary/util/u_blit.c @@ -56,7 +56,7 @@ struct blit_state struct pipe_context *pipe; struct cso_context *cso; - struct pipe_blend_state blend; + struct pipe_blend_state blend_write_color, blend_keep_color; struct pipe_depth_stencil_alpha_state depthstencil_keep; struct pipe_depth_stencil_alpha_state depthstencil_write; struct pipe_rasterizer_state rasterizer; @@ -94,7 +94,7 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso) ctx->cso = cso; /* disabled blending/masking */ - ctx->blend.rt[0].colormask = PIPE_MASK_RGBA; + ctx->blend_write_color.rt[0].colormask = PIPE_MASK_RGBA; /* no-op depth/stencil/alpha */ ctx->depthstencil_write.depth.enabled = 1; @@ -564,7 +564,11 @@ util_blit_pixels(struct blit_state *ctx, cso_save_vertex_buffers(ctx->cso); /* set misc state we care about */ - cso_set_blend(ctx->cso, &ctx->blend); + if (writemask) + cso_set_blend(ctx->cso, &ctx->blend_write_color); + else + cso_set_blend(ctx->cso, &ctx->blend_keep_color); + cso_set_depth_stencil_alpha(ctx->cso, dst_is_depth ? &ctx->depthstencil_write : &ctx->depthstencil_keep); @@ -721,7 +725,7 @@ util_blit_pixels_tex(struct blit_state *ctx, cso_save_vertex_buffers(ctx->cso); /* set misc state we care about */ - cso_set_blend(ctx->cso, &ctx->blend); + cso_set_blend(ctx->cso, &ctx->blend_write_color); cso_set_depth_stencil_alpha(ctx->cso, &ctx->depthstencil_keep); cso_set_rasterizer(ctx->cso, &ctx->rasterizer); cso_set_vertex_elements(ctx->cso, 2, ctx->velem); diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 4547ba7936f..a50b79a1852 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -294,7 +294,7 @@ st_BlitFramebuffer(struct gl_context *ctx, srcX0, srcY0, srcX1, srcY1, srcDepthRb->surface->u.tex.first_layer, dstDepthSurf, dstX0, dstY0, dstX1, dstY1, - 0.0, pFilter, TGSI_WRITEMASK_XYZW); + 0.0, pFilter, 0); } else { /* blitting depth and stencil separately */ @@ -305,7 +305,7 @@ st_BlitFramebuffer(struct gl_context *ctx, srcX0, srcY0, srcX1, srcY1, srcDepthRb->surface->u.tex.first_layer, dstDepthSurf, dstX0, dstY0, dstX1, dstY1, - 0.0, pFilter, TGSI_WRITEMASK_XYZW); + 0.0, pFilter, 0); } if (mask & GL_STENCIL_BUFFER_BIT) { -- 2.30.2