From c108dfc930f03ec916d889bf4e6bc59a4c3869f4 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 31 Oct 2024 12:09:55 -0700 Subject: [PATCH] panvk: force_fb_preload should insert a barrier Preloading is effectively texel fetching. When we force preloading, we need to insert a barrier for the feedback loop. Signed-off-by: Chia-I Wu Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 22 ++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 7b43251d73c..617ecbec612 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -537,6 +537,25 @@ force_fb_preload(struct panvk_cmd_buffer *cmdbuf, } } + /* insert a barrier for preload */ + const VkMemoryBarrier2 mem_barrier = { + .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, + .srcStageMask = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT, + .srcAccessMask = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, + .dstStageMask = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, + .dstAccessMask = VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, + }; + const VkDependencyInfo dep_info = { + .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, + .memoryBarrierCount = 1, + .pMemoryBarriers = &mem_barrier, + }; + panvk_per_arch(CmdPipelineBarrier2)(panvk_cmd_buffer_to_handle(cmdbuf), + &dep_info); + if (clear_att_count) { VkClearRect clear_rect = { .rect = render_info->renderArea, @@ -2539,10 +2558,11 @@ panvk_per_arch(cmd_flush_draws)(struct panvk_cmd_buffer *cmdbuf) flush_tiling(cmdbuf); issue_fragment_jobs(cmdbuf); - force_fb_preload(cmdbuf, NULL); memset(&cmdbuf->state.gfx.render.fbds, 0, sizeof(cmdbuf->state.gfx.render.fbds)); cmdbuf->state.gfx.render.tiler = 0; + + force_fb_preload(cmdbuf, NULL); } VKAPI_ATTR void VKAPI_CALL