mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
render/vulkan: add wlr_vk_render_pass.render_setup
Simplifies the logic and prepares for a new render setup.
This commit is contained in:
parent
a91f96b391
commit
35eba5f2fe
2 changed files with 8 additions and 10 deletions
|
|
@ -398,6 +398,7 @@ struct wlr_vk_render_pass {
|
||||||
struct wlr_render_pass base;
|
struct wlr_render_pass base;
|
||||||
struct wlr_vk_renderer *renderer;
|
struct wlr_vk_renderer *renderer;
|
||||||
struct wlr_vk_render_buffer *render_buffer;
|
struct wlr_vk_render_buffer *render_buffer;
|
||||||
|
struct wlr_vk_render_format_setup *render_setup;
|
||||||
struct wlr_vk_command_buffer *command_buffer;
|
struct wlr_vk_command_buffer *command_buffer;
|
||||||
struct rect_union updated_region;
|
struct rect_union updated_region;
|
||||||
VkPipeline bound_pipeline;
|
VkPipeline bound_pipeline;
|
||||||
|
|
|
||||||
|
|
@ -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_project_box(matrix, &box, WL_OUTPUT_TRANSFORM_NORMAL, proj);
|
||||||
wlr_matrix_multiply(matrix, pass->projection, matrix);
|
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(
|
struct wlr_vk_pipeline *pipe = setup_get_or_create_pipeline(
|
||||||
setup,
|
pass->render_setup,
|
||||||
&(struct wlr_vk_pipeline_key) {
|
&(struct wlr_vk_pipeline_key) {
|
||||||
.source = WLR_VK_SHADER_SOURCE_SINGLE_COLOR,
|
.source = WLR_VK_SHADER_SOURCE_SINGLE_COLOR,
|
||||||
.layout = { .ycbcr_format = NULL },
|
.layout = { .ycbcr_format = NULL },
|
||||||
|
|
@ -805,11 +802,8 @@ static void render_pass_add_texture(struct wlr_render_pass *wlr_pass,
|
||||||
break;
|
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(
|
struct wlr_vk_pipeline *pipe = setup_get_or_create_pipeline(
|
||||||
setup,
|
pass->render_setup,
|
||||||
&(struct wlr_vk_pipeline_key) {
|
&(struct wlr_vk_pipeline_key) {
|
||||||
.source = WLR_VK_SHADER_SOURCE_TEXTURE,
|
.source = WLR_VK_SHADER_SOURCE_TEXTURE,
|
||||||
.layout = {
|
.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));
|
struct wlr_vk_render_pass *pass = calloc(1, sizeof(*pass));
|
||||||
if (pass == NULL) {
|
if (pass == NULL) {
|
||||||
return 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,
|
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
||||||
.renderArea = rect,
|
.renderArea = rect,
|
||||||
.clearValueCount = 0,
|
.clearValueCount = 0,
|
||||||
|
.renderPass = render_setup->render_pass,
|
||||||
};
|
};
|
||||||
if (pass->srgb_pathway) {
|
if (pass->srgb_pathway) {
|
||||||
rp_info.renderPass = buffer->srgb.render_setup->render_pass;
|
|
||||||
rp_info.framebuffer = buffer->srgb.out.framebuffer;
|
rp_info.framebuffer = buffer->srgb.out.framebuffer;
|
||||||
} else {
|
} else {
|
||||||
rp_info.renderPass = buffer->two_pass.render_setup->render_pass;
|
|
||||||
rp_info.framebuffer = buffer->two_pass.out.framebuffer;
|
rp_info.framebuffer = buffer->two_pass.out.framebuffer;
|
||||||
}
|
}
|
||||||
vkCmdBeginRenderPass(cb->vk, &rp_info, VK_SUBPASS_CONTENTS_INLINE);
|
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);
|
wlr_buffer_lock(buffer->wlr_buffer);
|
||||||
pass->render_buffer = buffer;
|
pass->render_buffer = buffer;
|
||||||
|
pass->render_setup = render_setup;
|
||||||
pass->command_buffer = cb;
|
pass->command_buffer = cb;
|
||||||
return pass;
|
return pass;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue