Merge branch 'vk-shared-blend' into 'master'

Draft: render/vulkan: Cache blending buffer on swapchain

See merge request wlroots/wlroots!4740
This commit is contained in:
Kenny Levinsen 2024-10-28 00:28:25 +00:00
commit 2ba9e6424a
5 changed files with 252 additions and 83 deletions

View file

@ -197,6 +197,15 @@ struct wlr_vk_render_format_setup {
struct wl_list pipelines; // struct wlr_vk_pipeline.link
};
// Internal blending buffer shraed between render buffers
struct wlr_vk_blend_buffer {
struct wlr_vk_renderer *renderer;
VkImageView blend_image_view;
VkImage blend_image;
VkDeviceMemory blend_memory;
int refcnt;
};
// Renderer-internal represenation of an wlr_buffer imported for rendering.
struct wlr_vk_render_buffer {
struct wlr_buffer *wlr_buffer;
@ -228,9 +237,8 @@ struct wlr_vk_render_buffer {
VkFramebuffer framebuffer;
bool transitioned;
VkImage blend_image;
VkImageView blend_image_view;
VkDeviceMemory blend_memory;
struct wlr_vk_blend_buffer *blend_buffer;
VkDescriptorSet blend_descriptor_set;
struct wlr_vk_descriptor_pool *blend_attachment_pool;
bool blend_transitioned;

View file

@ -4,6 +4,7 @@
#include <stdbool.h>
#include <wayland-server-core.h>
#include <wlr/render/drm_format_set.h>
#include <wlr/util/addon.h>
#define WLR_SWAPCHAIN_CAP 4
@ -23,6 +24,8 @@ struct wlr_swapchain {
struct wlr_swapchain_slot slots[WLR_SWAPCHAIN_CAP];
struct wl_listener allocator_destroy;
struct wlr_addon_set addons;
};
struct wlr_swapchain *wlr_swapchain_create(
@ -43,4 +46,7 @@ struct wlr_buffer *wlr_swapchain_acquire(struct wlr_swapchain *swapchain);
bool wlr_swapchain_has_buffer(struct wlr_swapchain *swapchain,
struct wlr_buffer *buffer);
struct wlr_swapchain *wlr_swapchain_try_from_wlr_buffer(
struct wlr_buffer *buffer);
#endif