From 61706915a3b5644faf7a5e67f47c9c593620bf8c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 8 Sep 2012 15:30:24 +0200 Subject: [PATCH] gallium/u_blitter: fix stencil-only blits NOTE: This is a candidate for the stable branches. --- src/gallium/auxiliary/util/u_blitter.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 44295c136a6..35b8edba75c 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -1213,6 +1213,21 @@ void util_blitter_copy_texture_view(struct blitter_context *blitter, pipe->bind_fragment_sampler_states(pipe, 2, samplers); pipe_sampler_view_reference(&views[1], NULL); + } else if (blit_stencil) { + /* Set a stencil-only sampler view for it not to sample depth instead. */ + struct pipe_sampler_view templ; + struct pipe_sampler_view *view; + + templ = *src; + templ.format = util_format_stencil_only(templ.format); + assert(templ.format != PIPE_FORMAT_NONE); + + view = pipe->create_sampler_view(pipe, src->texture, &templ); + + pipe->set_fragment_sampler_views(pipe, 1, &view); + pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state); + + pipe_sampler_view_reference(&view, NULL); } else { pipe->set_fragment_sampler_views(pipe, 1, &src); pipe->bind_fragment_sampler_states(pipe, 1, &ctx->sampler_state); -- 2.30.2