From bc198e800567cb4098cf4c1142d67bfc770a741d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 12 Jan 2023 17:34:44 -0500 Subject: [PATCH] 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: d849d9779a7 ("panfrost: Avoid blend shader when not blending") Signed-off-by: Alyssa Rosenzweig Part-of: (cherry picked from commit 41d99c10d1f2dff160b732e5311da398eb1ed90a) --- .pick_status.json | 2 +- src/gallium/drivers/panfrost/pan_cmdstream.c | 2 +- src/panfrost/lib/pan_blend.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5d103dc..4372dfc 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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" }, diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 1782ca1..63da955 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -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 */ diff --git a/src/panfrost/lib/pan_blend.c b/src/panfrost/lib/pan_blend.c index f6e6bf6..b4c3f15 100644 --- a/src/panfrost/lib/pan_blend.c +++ b/src/panfrost/lib/pan_blend.c @@ -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); -- 2.7.4