From 35eba5f2fe7580031d386a0857414f47f10fa7a0 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 21 Jun 2025 17:59:29 +0200 Subject: [PATCH] render/vulkan: add wlr_vk_render_pass.render_setup Simplifies the logic and prepares for a new render setup. --- include/render/vulkan.h | 1 + render/vulkan/pass.c | 17 +++++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/include/render/vulkan.h b/include/render/vulkan.h index ef5daceef..20272882d 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_format_setup *render_setup; struct wlr_vk_command_buffer *command_buffer; struct rect_union updated_region; VkPipeline bound_pipeline; diff --git a/render/vulkan/pass.c b/render/vulkan/pass.c index c18761b9f..00f840175 100644 --- a/render/vulkan/pass.c +++ b/render/vulkan/pass.c @@ -678,11 +678,8 @@ static void render_pass_add_rect(struct wlr_render_pass *wlr_pass, wlr_matrix_project_box(matrix, &box, WL_OUTPUT_TRANSFORM_NORMAL, proj); wlr_matrix_multiply(matrix, pass->projection, matrix); - struct wlr_vk_render_format_setup *setup = pass->srgb_pathway ? - pass->render_buffer->srgb.render_setup : - pass->render_buffer->two_pass.render_setup; struct wlr_vk_pipeline *pipe = setup_get_or_create_pipeline( - setup, + pass->render_setup, &(struct wlr_vk_pipeline_key) { .source = WLR_VK_SHADER_SOURCE_SINGLE_COLOR, .layout = { .ycbcr_format = NULL }, @@ -805,11 +802,8 @@ static void render_pass_add_texture(struct wlr_render_pass *wlr_pass, break; } - struct wlr_vk_render_format_setup *setup = pass->srgb_pathway ? - pass->render_buffer->srgb.render_setup : - pass->render_buffer->two_pass.render_setup; struct wlr_vk_pipeline *pipe = setup_get_or_create_pipeline( - setup, + pass->render_setup, &(struct wlr_vk_pipeline_key) { .source = WLR_VK_SHADER_SOURCE_TEXTURE, .layout = { @@ -1215,6 +1209,9 @@ 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_pass *pass = calloc(1, sizeof(*pass)); if (pass == NULL) { return NULL; @@ -1270,12 +1267,11 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, .renderArea = rect, .clearValueCount = 0, + .renderPass = render_setup->render_pass, }; if (pass->srgb_pathway) { - rp_info.renderPass = buffer->srgb.render_setup->render_pass; rp_info.framebuffer = buffer->srgb.out.framebuffer; } else { - rp_info.renderPass = buffer->two_pass.render_setup->render_pass; rp_info.framebuffer = buffer->two_pass.out.framebuffer; } vkCmdBeginRenderPass(cb->vk, &rp_info, VK_SUBPASS_CONTENTS_INLINE); @@ -1292,6 +1288,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_setup = render_setup; pass->command_buffer = cb; return pass; }