mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-06-13 14:32:57 -04:00
render/vulkan: let vkRenderPass handle blend buffer layout transitions
This commit is contained in:
parent
5d150267e2
commit
5560a72fc8
2 changed files with 5 additions and 30 deletions
|
|
@ -428,35 +428,6 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) {
|
||||||
pass->render_buffer_out->transitioned = true;
|
pass->render_buffer_out->transitioned = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pass->two_pass) {
|
|
||||||
// On the first frame the clear render pass transitions the blend
|
|
||||||
// image from undefined and we just mark it transitioned. On every
|
|
||||||
// frame after, the previous frame left it read-only, so we change
|
|
||||||
// it back to a color attachment before the render pass starts
|
|
||||||
if (render_buffer->two_pass.blend_transitioned) {
|
|
||||||
VkImageMemoryBarrier blend_acq_barrier = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
|
||||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
|
||||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
|
||||||
.image = render_buffer->two_pass.blend_image,
|
|
||||||
.oldLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
|
||||||
.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
|
||||||
.srcAccessMask = VK_ACCESS_SHADER_READ_BIT,
|
|
||||||
.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
||||||
.subresourceRange = {
|
|
||||||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
.layerCount = 1,
|
|
||||||
.levelCount = 1,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
vkCmdPipelineBarrier(stage_cb->vk, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
|
||||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
|
||||||
0, 0, NULL, 0, NULL, 1, &blend_acq_barrier);
|
|
||||||
} else {
|
|
||||||
render_buffer->two_pass.blend_transitioned = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// acquire render buffer before rendering
|
// acquire render buffer before rendering
|
||||||
acquire_barriers[idx] = (VkImageMemoryBarrier){
|
acquire_barriers[idx] = (VkImageMemoryBarrier){
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||||
|
|
@ -602,6 +573,10 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pass->two_pass) {
|
||||||
|
render_buffer->two_pass.blend_transitioned = true;
|
||||||
|
}
|
||||||
|
|
||||||
free(render_wait);
|
free(render_wait);
|
||||||
|
|
||||||
vulkan_stage_mark_submit(renderer, render_timeline_point);
|
vulkan_stage_mark_submit(renderer, render_timeline_point);
|
||||||
|
|
|
||||||
|
|
@ -2485,7 +2485,7 @@ static struct wlr_vk_render_format_setup *find_or_create_render_setup(
|
||||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||||
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
|
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||||
.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
|
.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
|
||||||
.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
.initialLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue