vulkan: Add vk_subpass_dependency_is_fb_local() helper

Some tilers check for framebuffer local dependancy to determine if
they can rearrange or merge some sub-passes without breaking
their dependencies. Adding a helper for that.

Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25612>
This commit is contained in:
Karmjit Mahil
2023-10-09 10:01:05 +01:00
committed by Marge Bot
parent 7397502a1f
commit 9b7d437653

View File

@@ -399,6 +399,41 @@ vk_get_command_buffer_inheritance_as_rendering_resume(
const VkCommandBufferBeginInfo *pBeginInfo, const VkCommandBufferBeginInfo *pBeginInfo,
void *stack_data); void *stack_data);
/**
* Return true if the subpass dependency is framebuffer-local.
*/
static bool
vk_subpass_dependency_is_fb_local(const VkSubpassDependency2 *dep,
VkPipelineStageFlags2 src_stage_mask,
VkPipelineStageFlags2 dst_stage_mask)
{
if (dep->srcSubpass == VK_SUBPASS_EXTERNAL ||
dep->dstSubpass == VK_SUBPASS_EXTERNAL)
return true;
/* This is straight from the Vulkan 1.2 spec, section 7.1.4 "Framebuffer
* Region Dependencies":
*/
const VkPipelineStageFlags2 framebuffer_space_stages =
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT |
VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT;
const VkPipelineStageFlags2 src_framebuffer_space_stages =
framebuffer_space_stages | VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT;
const VkPipelineStageFlags2 dst_framebuffer_space_stages =
framebuffer_space_stages | VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT;
/* Check for frambuffer-space dependency. */
if ((src_stage_mask & ~src_framebuffer_space_stages) ||
(dst_stage_mask & ~dst_framebuffer_space_stages))
return false;
/* Check for framebuffer-local dependency. */
return dep->dependencyFlags & VK_DEPENDENCY_BY_REGION_BIT;
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif