render/vk: Move render_setup into render_pass

Need to use imageless framebuffers, which every driver has implemented
This commit is contained in:
Julia Tatz 2023-12-14 19:54:01 -05:00
parent 5d4313eb82
commit 4ba290a7a9
4 changed files with 156 additions and 48 deletions

View file

@ -179,17 +179,27 @@ struct wlr_vk_pipeline {
struct wl_list link; // struct wlr_vk_render_format_setup
};
struct wlr_vk_framebuffer {
int width, height;
VkFramebuffer vk;
struct wlr_vk_render_format_setup *setup;
struct wl_list link; // struct wlr_vk_render_format_setup
};
// For each format we want to render, we need a separate renderpass
// and therefore also separate pipelines.
struct wlr_vk_render_format_setup {
struct wl_list link; // wlr_vk_renderer.render_format_setups
const struct wlr_vk_format *render_format; // used in renderpass
bool has_blending_buffer;
VkRenderPass render_pass;
VkPipeline output_pipe;
struct wlr_vk_renderer *renderer;
struct wl_list pipelines; // struct wlr_vk_pipeline.link
struct wl_list framebuffers; // struct wlr_vk_framebuffer.link
};
// Renderer-internal represenation of an wlr_buffer imported for rendering.
@ -197,12 +207,12 @@ struct wlr_vk_render_buffer {
struct wlr_buffer *wlr_buffer;
struct wlr_addon addon;
struct wlr_vk_renderer *renderer;
struct wlr_vk_render_format_setup *render_setup;
struct wl_list link; // wlr_vk_renderer.buffers
const struct wlr_vk_format *fmt;
VkImage image;
VkImageView image_view;
VkFramebuffer framebuffer;
uint32_t mem_count;
VkDeviceMemory memories[WLR_DMABUF_MAX_PLANES];
bool transitioned;
@ -299,12 +309,18 @@ struct wlr_vk_texture_view {
struct wlr_vk_descriptor_pool *ds_pool;
};
struct wlr_vk_render_format_setup *find_or_create_render_setup(
struct wlr_vk_renderer *renderer, const struct wlr_vk_format *format,
bool has_blending_buffer);
struct wlr_vk_pipeline *setup_get_or_create_pipeline(
struct wlr_vk_render_format_setup *setup,
const struct wlr_vk_pipeline_key *key);
struct wlr_vk_pipeline_layout *get_or_create_pipeline_layout(
struct wlr_vk_renderer *renderer,
const struct wlr_vk_pipeline_layout_key *key);
struct wlr_vk_framebuffer *get_or_create_framebuffer(
struct wlr_vk_render_format_setup *setup,
int width, int height);
struct wlr_vk_texture_view *vulkan_texture_get_or_create_view(
struct wlr_vk_texture *texture,
const struct wlr_vk_pipeline_layout *layout);
@ -325,6 +341,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;