asahi: Fix logic ops

Need to set colour mask correctly. Fixes spec@!opengl 1.0@gl-1.0-logicop@GL_AND,
at least the non-MSAA portion.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19811>
This commit is contained in:
Alyssa Rosenzweig 2022-11-17 11:22:25 -05:00 committed by Marge Bot
parent a22ed99906
commit 9dddbfeaef

View file

@ -129,14 +129,15 @@ agx_create_blend_state(struct pipe_context *ctx,
if (state->logicop_enable) {
so->logicop_enable = true;
so->logicop_func = state->logicop_func;
return so;
}
for (unsigned i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {
unsigned rti = state->independent_blend_enable ? i : 0;
struct pipe_rt_blend_state rt = state->rt[rti];
if (!rt.blend_enable) {
if (state->logicop_enable) {
/* No blending, but we get the colour mask below */
} else if (!rt.blend_enable) {
static const nir_lower_blend_channel replace = {
.func = BLEND_FUNC_ADD,
.src_factor = BLEND_FACTOR_ZERO,
@ -160,7 +161,7 @@ agx_create_blend_state(struct pipe_context *ctx,
so->rt[i].alpha.dst_factor = util_blend_factor_to_shader(rt.alpha_dst_factor);
so->rt[i].alpha.invert_dst_factor = util_blend_factor_is_inverted(rt.alpha_dst_factor);
so->blend_enable = true;
so->blend_enable = true;
}
so->rt[i].colormask = rt.colormask;