From b2d09cdee9bcc512bda047c27942976561e44b5f Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 21 Jun 2025 18:06:28 +0200 Subject: [PATCH] render/vulkan: add wlr_vk_render_pass.render_buffer_out Simplifies the logic and prepares for a new render setup. --- include/render/vulkan.h | 1 + render/vulkan/pass.c | 25 ++++++++++--------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/include/render/vulkan.h b/include/render/vulkan.h index 20272882d..5f84ca57d 100644 --- a/include/render/vulkan.h +++ b/include/render/vulkan.h @@ -398,6 +398,7 @@ struct wlr_vk_render_pass { struct wlr_render_pass base; struct wlr_vk_renderer *renderer; struct wlr_vk_render_buffer *render_buffer; + struct wlr_vk_render_buffer_out *render_buffer_out; struct wlr_vk_render_format_setup *render_setup; struct wlr_vk_command_buffer *command_buffer; struct rect_union updated_region; diff --git a/render/vulkan/pass.c b/render/vulkan/pass.c index 00f840175..c843b9b8f 100644 --- a/render/vulkan/pass.c +++ b/render/vulkan/pass.c @@ -398,16 +398,12 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) { // also add acquire/release barriers for the current render buffer VkImageLayout src_layout = VK_IMAGE_LAYOUT_GENERAL; - if (pass->srgb_pathway) { - if (!render_buffer->srgb.out.transitioned) { - src_layout = VK_IMAGE_LAYOUT_PREINITIALIZED; - render_buffer->srgb.out.transitioned = true; - } - } else { - if (!render_buffer->two_pass.out.transitioned) { - src_layout = VK_IMAGE_LAYOUT_PREINITIALIZED; - render_buffer->two_pass.out.transitioned = true; - } + if (!pass->render_buffer_out->transitioned) { + src_layout = VK_IMAGE_LAYOUT_PREINITIALIZED; + pass->render_buffer_out->transitioned = true; + } + + if (!pass->srgb_pathway) { // The render pass changes the blend image layout from // color attachment to read only, so on each frame, before // the render pass starts, we change it back @@ -1211,6 +1207,8 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend struct wlr_vk_render_format_setup *render_setup = using_srgb_pathway ? buffer->srgb.render_setup : buffer->two_pass.render_setup; + struct wlr_vk_render_buffer_out *buffer_out = + using_srgb_pathway ? &buffer->srgb.out : &buffer->two_pass.out; struct wlr_vk_render_pass *pass = calloc(1, sizeof(*pass)); if (pass == NULL) { @@ -1268,12 +1266,8 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend .renderArea = rect, .clearValueCount = 0, .renderPass = render_setup->render_pass, + .framebuffer = buffer_out->framebuffer, }; - if (pass->srgb_pathway) { - rp_info.framebuffer = buffer->srgb.out.framebuffer; - } else { - rp_info.framebuffer = buffer->two_pass.out.framebuffer; - } vkCmdBeginRenderPass(cb->vk, &rp_info, VK_SUBPASS_CONTENTS_INLINE); vkCmdSetViewport(cb->vk, 0, 1, &(VkViewport){ @@ -1288,6 +1282,7 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend wlr_buffer_lock(buffer->wlr_buffer); pass->render_buffer = buffer; + pass->render_buffer_out = buffer_out; pass->render_setup = render_setup; pass->command_buffer = cb; return pass;