Skip to content
Snippets Groups Projects
Commit 71be5b25 authored by Faith Ekstrand's avatar Faith Ekstrand :speech_balloon: Committed by Dylan Baker
Browse files

vulkan: Handle VK_SUBPASS_EXTERNAL at the end of a subpass


Fixes: 1d726940 ("vulkan: Add a common CmdBegin/EndRederPass implementation")
Reviewed-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <mesa/mesa!19599>
(cherry picked from commit 4ff50519)
parent fca0249e
No related branches found
No related tags found
No related merge requests found
...@@ -256,7 +256,7 @@ ...@@ -256,7 +256,7 @@
"description": "vulkan: Handle VK_SUBPASS_EXTERNAL at the end of a subpass", "description": "vulkan: Handle VK_SUBPASS_EXTERNAL at the end of a subpass",
"nominated": true, "nominated": true,
"nomination_type": 1, "nomination_type": 1,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": "1d726940d2881395994751078dad3bda0cabbdfb" "because_sha": "1d726940d2881395994751078dad3bda0cabbdfb"
}, },
...@@ -868,7 +868,7 @@ ...@@ -868,7 +868,7 @@
"description": "meson: Fixes name_prefix for clover on mingw", "description": "meson: Fixes name_prefix for clover on mingw",
"nominated": true, "nominated": true,
"nomination_type": 0, "nomination_type": 0,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": null "because_sha": null
}, },
...@@ -877,7 +877,7 @@ ...@@ -877,7 +877,7 @@
"description": "clover: Fixes building with mingw-x86", "description": "clover: Fixes building with mingw-x86",
"nominated": true, "nominated": true,
"nomination_type": 0, "nomination_type": 0,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": null "because_sha": null
}, },
...@@ -886,7 +886,7 @@ ...@@ -886,7 +886,7 @@
"description": "clover: Rename *OpenCL.def to *OpenCL.def.in", "description": "clover: Rename *OpenCL.def to *OpenCL.def.in",
"nominated": true, "nominated": true,
"nomination_type": 0, "nomination_type": 0,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": null "because_sha": null
}, },
...@@ -2054,9 +2054,42 @@ static void ...@@ -2054,9 +2054,42 @@ static void
end_subpass(struct vk_command_buffer *cmd_buffer, end_subpass(struct vk_command_buffer *cmd_buffer,
const VkSubpassEndInfo *end_info) const VkSubpassEndInfo *end_info)
{ {
const struct vk_render_pass *pass = cmd_buffer->render_pass;
const uint32_t subpass_idx = cmd_buffer->subpass_idx;
struct vk_device_dispatch_table *disp = struct vk_device_dispatch_table *disp =
&cmd_buffer->base.device->dispatch_table; &cmd_buffer->base.device->dispatch_table;
disp->CmdEndRendering(vk_command_buffer_to_handle(cmd_buffer)); disp->CmdEndRendering(vk_command_buffer_to_handle(cmd_buffer));
bool needs_mem_barrier = false;
VkMemoryBarrier2 mem_barrier = {
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2,
};
for (uint32_t d = 0; d < pass->dependency_count; d++) {
const struct vk_subpass_dependency *dep = &pass->dependencies[d];
if (dep->src_subpass != subpass_idx)
continue;
if (dep->dst_subpass != VK_SUBPASS_EXTERNAL)
continue;
needs_mem_barrier = true;
mem_barrier.srcStageMask |= dep->src_stage_mask;
mem_barrier.srcAccessMask |= dep->src_access_mask;
mem_barrier.dstStageMask |= dep->dst_stage_mask;
mem_barrier.dstAccessMask |= dep->dst_access_mask;
}
if (needs_mem_barrier) {
const VkDependencyInfo dependency_info = {
.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
.dependencyFlags = 0,
.memoryBarrierCount = 1,
.pMemoryBarriers = &mem_barrier,
};
disp->CmdPipelineBarrier2(vk_command_buffer_to_handle(cmd_buffer),
&dependency_info);
}
} }
VKAPI_ATTR void VKAPI_CALL VKAPI_ATTR void VKAPI_CALL
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment