anv/pass: Move some dependency setup into a helper
This new helper takes a VkSubpassDependency2KHR for future-proofing. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
@@ -25,6 +25,29 @@
|
|||||||
|
|
||||||
#include "vk_util.h"
|
#include "vk_util.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
anv_render_pass_add_subpass_dep(struct anv_render_pass *pass,
|
||||||
|
const VkSubpassDependency2KHR *dep)
|
||||||
|
{
|
||||||
|
if (dep->dstSubpass == VK_SUBPASS_EXTERNAL) {
|
||||||
|
pass->subpass_flushes[pass->subpass_count] |=
|
||||||
|
anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
|
||||||
|
} else {
|
||||||
|
assert(dep->dstSubpass < pass->subpass_count);
|
||||||
|
pass->subpass_flushes[dep->dstSubpass] |=
|
||||||
|
anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dep->srcSubpass == VK_SUBPASS_EXTERNAL) {
|
||||||
|
pass->subpass_flushes[0] |=
|
||||||
|
anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
|
||||||
|
} else {
|
||||||
|
assert(dep->srcSubpass < pass->subpass_count);
|
||||||
|
pass->subpass_flushes[dep->srcSubpass + 1] |=
|
||||||
|
anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Do a second "compile" step on a render pass */
|
/* Do a second "compile" step on a render pass */
|
||||||
static void
|
static void
|
||||||
anv_render_pass_compile(struct anv_render_pass *pass)
|
anv_render_pass_compile(struct anv_render_pass *pass)
|
||||||
@@ -223,24 +246,17 @@ VkResult anv_CreateRenderPass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < pCreateInfo->dependencyCount; i++) {
|
for (uint32_t i = 0; i < pCreateInfo->dependencyCount; i++) {
|
||||||
const VkSubpassDependency *dep = &pCreateInfo->pDependencies[i];
|
/* Convert to a Dependency2KHR */
|
||||||
if (dep->dstSubpass == VK_SUBPASS_EXTERNAL) {
|
struct VkSubpassDependency2KHR dep2 = {
|
||||||
pass->subpass_flushes[pass->subpass_count] |=
|
.srcSubpass = pCreateInfo->pDependencies[i].srcSubpass,
|
||||||
anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
|
.dstSubpass = pCreateInfo->pDependencies[i].dstSubpass,
|
||||||
} else {
|
.srcStageMask = pCreateInfo->pDependencies[i].srcStageMask,
|
||||||
assert(dep->dstSubpass < pass->subpass_count);
|
.dstStageMask = pCreateInfo->pDependencies[i].dstStageMask,
|
||||||
pass->subpass_flushes[dep->dstSubpass] |=
|
.srcAccessMask = pCreateInfo->pDependencies[i].srcAccessMask,
|
||||||
anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
|
.dstAccessMask = pCreateInfo->pDependencies[i].dstAccessMask,
|
||||||
}
|
.dependencyFlags = pCreateInfo->pDependencies[i].dependencyFlags,
|
||||||
|
};
|
||||||
if (dep->srcSubpass == VK_SUBPASS_EXTERNAL) {
|
anv_render_pass_add_subpass_dep(pass, &dep2);
|
||||||
pass->subpass_flushes[0] |=
|
|
||||||
anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
|
|
||||||
} else {
|
|
||||||
assert(dep->srcSubpass < pass->subpass_count);
|
|
||||||
pass->subpass_flushes[dep->srcSubpass + 1] |=
|
|
||||||
anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* From the Vulkan 1.0.39 spec:
|
/* From the Vulkan 1.0.39 spec:
|
||||||
|
Reference in New Issue
Block a user