panfrost: Fix logic ops on Bifrost

opaque should not be set when logicops are enabled, that needs blending
even on Bifrost. Fixes is for when I believe the bug became possible to hit.
The logical error is older.

Fixes Piglit logicop tests again.

Fixes: d849d9779a ("panfrost: Avoid blend shader when not blending")
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20685>
(cherry picked from commit 41d99c10d1)
This commit is contained in:
Alyssa Rosenzweig 2023-01-12 17:34:44 -05:00 committed by Eric Engestrom
parent d8db0ee96d
commit bc198e8005
3 changed files with 4 additions and 3 deletions

View file

@ -4792,7 +4792,7 @@
"description": "panfrost: Fix logic ops on Bifrost",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "d849d9779a77f05d7acd418516e154a4e9018f40"
},

View file

@ -4511,7 +4511,7 @@ panfrost_create_blend_state(struct pipe_context *pipe,
const bool supports_2src = pan_blend_supports_2src(PAN_ARCH);
so->info[c] = (struct pan_blend_info) {
.enabled = (equation.color_mask != 0),
.opaque = pan_blend_is_opaque(equation),
.opaque = !blend->logicop_enable && pan_blend_is_opaque(equation),
.constant_mask = constant_mask,
/* TODO: check the dest for the logicop */

View file

@ -800,7 +800,8 @@ GENX(pan_blend_get_shader_locked)(const struct panfrost_device *dev,
};
/* Blend shaders should only be used for blending on Bifrost onwards */
assert(dev->arch <= 5 || !pan_blend_is_opaque(state->rts[rt].equation));
assert(dev->arch <= 5 || state->logicop_enable ||
!pan_blend_is_opaque(state->rts[rt].equation));
assert(state->rts[rt].equation.color_mask != 0);
struct hash_entry *he = _mesa_hash_table_search(dev->blend_shaders.shaders, &key);