mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
vulkan/wsi/wayland: Pass damage through to the compositor
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
f82b6c6272
commit
be1ecd8c6e
1 changed files with 15 additions and 1 deletions
|
|
@ -488,6 +488,7 @@ struct wsi_wl_swapchain {
|
|||
struct wsi_wl_display * display;
|
||||
struct wl_event_queue * queue;
|
||||
struct wl_surface * surface;
|
||||
uint32_t surface_version;
|
||||
|
||||
VkExtent2D extent;
|
||||
VkFormat vk_format;
|
||||
|
|
@ -594,7 +595,19 @@ wsi_wl_swapchain_queue_present(struct wsi_swapchain *wsi_chain,
|
|||
|
||||
assert(image_index < chain->base.image_count);
|
||||
wl_surface_attach(chain->surface, chain->images[image_index].buffer, 0, 0);
|
||||
wl_surface_damage(chain->surface, 0, 0, INT32_MAX, INT32_MAX);
|
||||
|
||||
if (chain->surface_version >= 4 && damage &&
|
||||
damage->pRectangles && damage->rectangleCount > 0) {
|
||||
for (unsigned i = 0; i < damage->rectangleCount; i++) {
|
||||
const VkRectLayerKHR *rect = &damage->pRectangles[i];
|
||||
assert(rect->layer == 0);
|
||||
wl_surface_damage_buffer(chain->surface,
|
||||
rect->offset.x, rect->offset.y,
|
||||
rect->extent.width, rect->extent.height);
|
||||
}
|
||||
} else {
|
||||
wl_surface_damage(chain->surface, 0, 0, INT32_MAX, INT32_MAX);
|
||||
}
|
||||
|
||||
if (chain->base.present_mode == VK_PRESENT_MODE_FIFO_KHR) {
|
||||
struct wl_callback *frame = wl_surface_frame(chain->surface);
|
||||
|
|
@ -731,6 +744,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
|||
chain->base.image_count = num_images;
|
||||
chain->base.needs_linear_copy = false;
|
||||
chain->surface = surface->surface;
|
||||
chain->surface_version = wl_proxy_get_version((void *)surface->surface);
|
||||
chain->extent = pCreateInfo->imageExtent;
|
||||
chain->vk_format = pCreateInfo->imageFormat;
|
||||
chain->drm_format = wl_drm_format_for_vk_format(chain->vk_format, alpha);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue