pan: fix pan_blend_reads_dest to consider special min/max funcs
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

The min/max funcs are designed to operate solely on the source and
destination colors directly, without any scaling or multiplication by a
factor.

Test: dEQP-GLES3.functional.fragment_ops.blend.* pass with enabled FPK

Cc: mesa-stable
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38824>
This commit is contained in:
Yiwei Zhang 2025-12-05 01:14:25 -08:00 committed by Marge Bot
parent ea77f60c0e
commit d5bf0b0df7

View file

@ -408,6 +408,12 @@ is_dest_factor(enum pipe_blendfactor factor, bool alpha)
(factor == PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE && !alpha); (factor == PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE && !alpha);
} }
static inline bool
is_min_max(enum pipe_blend_func func)
{
return func == PIPE_BLEND_MIN || func == PIPE_BLEND_MAX;
}
/* Determines if a blend equation reads back the destination. This can occur by /* Determines if a blend equation reads back the destination. This can occur by
* explicitly referencing the destination in the blend equation, or by using a * explicitly referencing the destination in the blend equation, or by using a
* partial writemask. */ * partial writemask. */
@ -421,7 +427,8 @@ pan_blend_reads_dest(const struct pan_blend_equation equation)
if (!equation.blend_enable) if (!equation.blend_enable)
return false; return false;
return is_dest_factor(equation.rgb_src_factor, false) || return is_min_max(equation.rgb_func) || is_min_max(equation.alpha_func) ||
is_dest_factor(equation.rgb_src_factor, false) ||
is_dest_factor(equation.alpha_src_factor, true) || is_dest_factor(equation.alpha_src_factor, true) ||
equation.rgb_dst_factor != PIPE_BLENDFACTOR_ZERO || equation.rgb_dst_factor != PIPE_BLENDFACTOR_ZERO ||
equation.alpha_dst_factor != PIPE_BLENDFACTOR_ZERO; equation.alpha_dst_factor != PIPE_BLENDFACTOR_ZERO;