Mesa (main): tu: Fix logic errors with subpass implicit dependencies
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 17 19:18:51 UTC 2021
Module: Mesa
Branch: main
Commit: 09e0b29bb63f60231b26b4c8f02eadb68e51b623
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=09e0b29bb63f60231b26b4c8f02eadb68e51b623
Author: Connor Abbott <cwabbott0 at gmail.com>
Date: Mon Aug 16 11:59:03 2021 +0200
tu: Fix logic errors with subpass implicit dependencies
We were adding them if there was an external dep instead of if there
wasn't, and we were skipping the entire subpass which would've resulted
in attachments not getting marked as used.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12386>
---
.../ci/deqp-freedreno-a630-bypass-fails.txt | 4 ----
src/freedreno/vulkan/tu_pass.c | 24 +++++++++++-----------
2 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/src/freedreno/ci/deqp-freedreno-a630-bypass-fails.txt b/src/freedreno/ci/deqp-freedreno-a630-bypass-fails.txt
index 7c294084124..61587ebade3 100644
--- a/src/freedreno/ci/deqp-freedreno-a630-bypass-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a630-bypass-fails.txt
@@ -3,7 +3,3 @@ dEQP-GLES31.functional.blend_equation_advanced.msaa.exclusion,Fail
dEQP-GLES31.functional.blend_equation_advanced.msaa.hardlight,Fail
dEQP-GLES31.functional.blend_equation_advanced.msaa.multiply,Fail
dEQP-GLES31.functional.blend_equation_advanced.msaa.overlay,Fail
-dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.7,Fail
-dEQP-VK.renderpass.suballocation.attachment_allocation.input_output.7,Fail
-dEQP-VK.renderpass.suballocation.subpass_dependencies.implicit_dependencies.render_passes_5,Fail
-dEQP-VK.renderpass2.suballocation.subpass_dependencies.implicit_dependencies.render_passes_3,Fail
diff --git a/src/freedreno/vulkan/tu_pass.c b/src/freedreno/vulkan/tu_pass.c
index c67b3e6f1e1..f29d8054258 100644
--- a/src/freedreno/vulkan/tu_pass.c
+++ b/src/freedreno/vulkan/tu_pass.c
@@ -212,9 +212,6 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
memset(att_used, 0, sizeof(att_used));
for (unsigned i = 0; i < info->subpassCount; i++) {
- if (!has_external_src[i])
- continue;
-
const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
bool src_implicit_dep = false;
@@ -222,7 +219,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pInputAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].initialLayout != subpass->pInputAttachments[j].layout && !att_used[a])
+ if (att[a].initialLayout != subpass->pInputAttachments[j].layout &&
+ !att_used[a] && !has_external_src[i])
src_implicit_dep = true;
att_used[a] = true;
}
@@ -231,7 +229,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pColorAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].initialLayout != subpass->pColorAttachments[j].layout && !att_used[a])
+ if (att[a].initialLayout != subpass->pColorAttachments[j].layout &&
+ !att_used[a] && !has_external_src[i])
src_implicit_dep = true;
att_used[a] = true;
}
@@ -241,7 +240,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pResolveAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].initialLayout != subpass->pResolveAttachments[j].layout && !att_used[a])
+ if (att[a].initialLayout != subpass->pResolveAttachments[j].layout &&
+ !att_used[a] && !has_external_src[i])
src_implicit_dep = true;
att_used[a] = true;
}
@@ -267,9 +267,6 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
memset(att_used, 0, sizeof(att_used));
for (int i = info->subpassCount - 1; i >= 0; i--) {
- if (!has_external_dst[i])
- continue;
-
const VkSubpassDescription2 *subpass = &info->pSubpasses[i];
bool dst_implicit_dep = false;
@@ -277,7 +274,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pInputAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].finalLayout != subpass->pInputAttachments[j].layout && !att_used[a])
+ if (att[a].finalLayout != subpass->pInputAttachments[j].layout &&
+ !att_used[a] && !has_external_dst[i])
dst_implicit_dep = true;
att_used[a] = true;
}
@@ -286,7 +284,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pColorAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].finalLayout != subpass->pColorAttachments[j].layout && !att_used[a])
+ if (att[a].finalLayout != subpass->pColorAttachments[j].layout &&
+ !att_used[a] && !has_external_dst[i])
dst_implicit_dep = true;
att_used[a] = true;
}
@@ -296,7 +295,8 @@ tu_render_pass_add_implicit_deps(struct tu_render_pass *pass,
uint32_t a = subpass->pResolveAttachments[j].attachment;
if (a == VK_ATTACHMENT_UNUSED)
continue;
- if (att[a].finalLayout != subpass->pResolveAttachments[j].layout && !att_used[a])
+ if (att[a].finalLayout != subpass->pResolveAttachments[j].layout &&
+ !att_used[a] && !has_external_dst[i])
dst_implicit_dep = true;
att_used[a] = true;
}
More information about the mesa-commit
mailing list