[Mesa-dev] [PATCH 8/8] radv: take accesses into account in subpass dependencies

Fredrik Höglund fredrik at kde.org
Tue Jun 26 21:49:36 UTC 2018


Limit implicit external dependencies to accesses performed on the
attachments in a render pass instance.

Cc: <mesa-stable at lists.freedesktop.org>
Signed-off-by: Fredrik Höglund <fredrik at kde.org>
---
 src/amd/vulkan/radv_pass.c    | 19 +++++++------------
 src/amd/vulkan/radv_private.h |  1 +
 2 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c
index 5bdaa7fd554..2f783f8b3f4 100644
--- a/src/amd/vulkan/radv_pass.c
+++ b/src/amd/vulkan/radv_pass.c
@@ -118,6 +118,7 @@ VkResult radv_CreateRenderPass(
 					pass->attachments[a].view_mask |= subpass->view_mask;
 					pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
 					pass->attachments[a].last_subpass = i;
+					pass->attachments[a].access_mask |= VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
 				}
 			}
 		}
@@ -134,6 +135,8 @@ VkResult radv_CreateRenderPass(
 					pass->attachments[a].view_mask |= subpass->view_mask;
 					pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
 					pass->attachments[a].last_subpass = i;
+					pass->attachments[a].access_mask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+					                                    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
 					color_sample_count = pCreateInfo->pAttachments[a].samples;
 				}
 			}
@@ -165,6 +168,8 @@ VkResult radv_CreateRenderPass(
 				pass->attachments[a].view_mask |= subpass->view_mask;
 				pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
 				pass->attachments[a].last_subpass = i;
+				pass->attachments[a].access_mask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+				                                    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
 				depth_sample_count = pCreateInfo->pAttachments[a].samples;
 			}
 		} else {
@@ -256,22 +261,12 @@ VkResult radv_CreateRenderPass(
 		/* Implicit dependency from external */
 		if (first_subpass != UINT32_MAX && !pass->subpasses[first_subpass].explicit_dependency_from_external) {
 			/* We always add the dependency to the first subpass to avoid repeating dependencies */
-			pass->subpasses[0].start_barrier.dst_access_mask |=
-				VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
-				VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
-				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
-				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
-				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+			pass->subpasses[0].start_barrier.dst_access_mask |= pass->attachments[i].access_mask;
 		}
 
 		/* Implicit dependency to external */
 		if (last_subpass != UINT32_MAX && !pass->subpasses[last_subpass].explicit_dependency_to_external) {
-			pass->end_barrier.src_access_mask |=
-				VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
-				VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
-				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
-				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
-				VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+			pass->end_barrier.src_access_mask |= pass->attachments[i].access_mask;
 		}
 	}
 
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index adf259981f1..faeb618292f 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1727,6 +1727,7 @@ struct radv_render_pass_attachment {
 	uint32_t                                     view_mask;
 	uint32_t                                     first_subpass;
 	uint32_t                                     last_subpass;
+	VkAccessFlags                                access_mask;
 };
 
 struct radv_render_pass {
-- 
2.17.0



More information about the mesa-dev mailing list