pvr: Don't merge subpasses on framebuffer-global dependancy

When we have a framebuffer-local dependency we cannot merge
subpasses.

dEQP tests fixed:
  dEQP-VK.renderpass.suballocation.attachment_allocation
    .input_output.{15,23,35,61,80,93}
  dEQP-VK.renderpass.suballocation.attachment_allocation
    .roll.{13,31,42,47,55,59,61,98}

Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25612>
This commit is contained in:
Karmjit Mahil
2023-10-09 10:25:35 +01:00
committed by Marge Bot
parent 1c35e495d9
commit f1c9efc52e

View File

@@ -38,6 +38,7 @@
#include "vk_alloc.h" #include "vk_alloc.h"
#include "vk_format.h" #include "vk_format.h"
#include "vk_log.h" #include "vk_log.h"
#include "vk_render_pass.h"
/***************************************************************************** /*****************************************************************************
PDS pre-baked program generation parameters and variables. PDS pre-baked program generation parameters and variables.
@@ -611,10 +612,16 @@ VkResult pvr_CreateRenderPass2(VkDevice _device,
dep->dstSubpass != VK_SUBPASS_EXTERNAL && dep->dstSubpass != VK_SUBPASS_EXTERNAL &&
dep->srcSubpass != dep->dstSubpass) { dep->srcSubpass != dep->dstSubpass) {
struct pvr_render_subpass *subpass = &pass->subpasses[dep->dstSubpass]; struct pvr_render_subpass *subpass = &pass->subpasses[dep->dstSubpass];
bool is_dep_fb_local =
vk_subpass_dependency_is_fb_local(dep,
dep->srcStageMask,
dep->dstStageMask);
subpass->dep_list[subpass->dep_count] = dep->srcSubpass; subpass->dep_list[subpass->dep_count] = dep->srcSubpass;
if (pvr_subpass_has_msaa_input_attachment(subpass, pCreateInfo)) if (pvr_subpass_has_msaa_input_attachment(subpass, pCreateInfo) ||
!is_dep_fb_local) {
subpass->flush_on_dep[subpass->dep_count] = true; subpass->flush_on_dep[subpass->dep_count] = true;
}
subpass->dep_count++; subpass->dep_count++;
} }