diff --git a/.pick_status.json b/.pick_status.json index 1a750a5b659..d7044e09e1d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -554,7 +554,7 @@ "description": "panvk/csf: Stop calling blend_emit_descs() with no FS", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 3f6f26b8c20..ba89ef160fc 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -655,6 +655,8 @@ prepare_blend(struct panvk_cmd_buffer *cmdbuf) if (!dirty) return VK_SUCCESS; + const struct panvk_shader_variant *fs = + panvk_shader_only_variant(get_fs(cmdbuf)); uint32_t bd_count = MAX2(cmdbuf->state.gfx.render.fb.info.rt_count, 1); struct cs_builder *b = panvk_get_cs_builder(cmdbuf, PANVK_SUBQUEUE_VERTEX_TILER); @@ -664,7 +666,16 @@ prepare_blend(struct panvk_cmd_buffer *cmdbuf) if (bd_count && !ptr.gpu) return VK_ERROR_OUT_OF_DEVICE_MEMORY; - panvk_per_arch(blend_emit_descs)(cmdbuf, bds); + if (fs) { + panvk_per_arch(blend_emit_descs)(cmdbuf, bds); + } else { + for (unsigned i = 0; i < bd_count; i++) { + pan_pack(&bds[i], BLEND, cfg) { + cfg.enable = false; + cfg.internal.mode = MALI_BLEND_MODE_OFF; + } + } + } cs_update_vt_ctx(b) cs_move64_to(b, cs_sr_reg64(b, IDVS, BLEND_DESC), ptr.gpu | bd_count); diff --git a/src/panfrost/vulkan/panvk_vX_blend.c b/src/panfrost/vulkan/panvk_vX_blend.c index cc917167d9e..1497410ebfe 100644 --- a/src/panfrost/vulkan/panvk_vX_blend.c +++ b/src/panfrost/vulkan/panvk_vX_blend.c @@ -305,7 +305,7 @@ panvk_per_arch(blend_emit_descs)(struct panvk_cmd_buffer *cmdbuf, const struct vk_color_attachment_location_state *cal = &dyns->cal; const struct panvk_shader_variant *fs = panvk_shader_only_variant(cmdbuf->state.gfx.fs.shader); - const struct pan_shader_info *fs_info = fs ? &fs->info : NULL; + const struct pan_shader_info *fs_info = &fs->info; uint64_t fs_code = panvk_shader_variant_get_dev_addr(fs); const struct panvk_rendering_state *render = &cmdbuf->state.gfx.render; const VkFormat *color_attachment_formats = render->color_attachments.fmts;