mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
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 <maraeo@gmail.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
(cherry picked from commit de99b6d117)
This commit is contained in:
parent
cc53944c26
commit
df4e6650e3
1 changed files with 14 additions and 12 deletions
|
|
@ -1120,18 +1120,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;
|
||||
|
|
@ -1153,15 +1152,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue