summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2013-04-05 11:21:09 -0600
committerBrian Paul <[email protected]>2013-04-05 16:14:51 -0600
commitde99b6d1170277e228dfd3b22297554619169ebf (patch)
treefe7b5e18a1e0432d5e4738721ff6d4c2594e9d66
parent9cda3560048e8595d3ffa315b76487f4479bff2c (diff)
gallium/u_blitter: fix is_blit_generic_supported() stencil checking
Don't check if there's sampler support for stencil if we're not going to actually blit/copy stencil values. Fixes the case where we mistakenly said we can't support a blit of depth values from S8Z24 to X8Z24. Also, rename the is_stencil variable to dst_has_stencil to improve readability. NOTE: This is a candidate for the stable branches. Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: José Fonseca <[email protected]>
-rw-r--r--src/gallium/auxiliary/util/u_blitter.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 70fec9118ef..2a4a13e9ff4 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -1135,18 +1135,17 @@ static boolean is_blit_generic_supported(struct blitter_context *blitter,
if (dst) {
unsigned bind;
- boolean is_stencil;
const struct util_format_description *desc =
util_format_description(dst_format);
-
- is_stencil = util_format_has_stencil(desc);
+ boolean dst_has_stencil = util_format_has_stencil(desc);
/* Stencil export must be supported for stencil copy. */
- if ((mask & PIPE_MASK_S) && is_stencil && !ctx->has_stencil_export) {
+ if ((mask & PIPE_MASK_S) && dst_has_stencil &&
+ !ctx->has_stencil_export) {
return FALSE;
}
- if (is_stencil || util_format_has_depth(desc))
+ if (dst_has_stencil || util_format_has_depth(desc))
bind = PIPE_BIND_DEPTH_STENCIL;
else
bind = PIPE_BIND_RENDER_TARGET;
@@ -1168,15 +1167,18 @@ static boolean is_blit_generic_supported(struct blitter_context *blitter,
}
/* Check stencil sampler support for stencil copy. */
- if (util_format_has_stencil(util_format_description(src_format))) {
- enum pipe_format stencil_format =
+ if (mask & PIPE_MASK_S) {
+ if (util_format_has_stencil(util_format_description(src_format))) {
+ enum pipe_format stencil_format =
util_format_stencil_only(src_format);
- assert(stencil_format != PIPE_FORMAT_NONE);
+ assert(stencil_format != PIPE_FORMAT_NONE);
- if (stencil_format != src_format &&
- !screen->is_format_supported(screen, stencil_format, src->target,
- src->nr_samples, PIPE_BIND_SAMPLER_VIEW)) {
- return FALSE;
+ if (stencil_format != src_format &&
+ !screen->is_format_supported(screen, stencil_format,
+ src->target, src->nr_samples,
+ PIPE_BIND_SAMPLER_VIEW)) {
+ return FALSE;
+ }
}
}
}