From 17355e737da14996bdcaf8587a78919bf2bae3af Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 14 Feb 2024 16:13:36 -0500 Subject: [PATCH] egl/wayland: split out kopper update_buffers no functional changes Acked-by: Daniel Stone Part-of: --- src/egl/drivers/dri2/platform_wayland.c | 48 ++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index f3135353421..a997462e750 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2252,6 +2252,25 @@ dri2_wl_swrast_allocate_buffer(struct dri2_egl_surface *dri2_surf, int format, return EGL_TRUE; } +static void +kopper_update_buffers(struct dri2_egl_surface *dri2_surf) +{ + /* we need to do the following operations only once per frame */ + if (dri2_surf->back) + return; + + if (dri2_surf->wl_win && + (dri2_surf->base.Width != dri2_surf->wl_win->width || + dri2_surf->base.Height != dri2_surf->wl_win->height)) { + + dri2_surf->base.Width = dri2_surf->wl_win->width; + dri2_surf->base.Height = dri2_surf->wl_win->height; + dri2_surf->dx = dri2_surf->wl_win->dx; + dri2_surf->dy = dri2_surf->wl_win->dy; + dri2_surf->current = NULL; + } +} + static int swrast_update_buffers(struct dri2_egl_surface *dri2_surf) { @@ -2406,6 +2425,19 @@ dri2_wl_swrast_commit_backbuffer(struct dri2_egl_surface *dri2_surf) wl_display_flush(dri2_dpy->wl_dpy); } +static void +dri2_wl_kopper_get_drawable_info(__DRIdrawable *draw, int *x, int *y, int *w, + int *h, void *loaderPrivate) +{ + struct dri2_egl_surface *dri2_surf = loaderPrivate; + + kopper_update_buffers(dri2_surf); + *x = 0; + *y = 0; + *w = dri2_surf->base.Width; + *h = dri2_surf->base.Height; +} + static void dri2_wl_swrast_get_drawable_info(__DRIdrawable *draw, int *x, int *y, int *w, int *h, void *loaderPrivate) @@ -2696,6 +2728,15 @@ static const __DRIswrastLoaderExtension swrast_loader_extension = { .putImage2 = dri2_wl_swrast_put_image2, }; +static const __DRIswrastLoaderExtension kopper_swrast_loader_extension = { + .base = {__DRI_SWRAST_LOADER, 2}, + + .getDrawableInfo = dri2_wl_kopper_get_drawable_info, + .putImage = dri2_wl_swrast_put_image, + .getImage = dri2_wl_swrast_get_image, + .putImage2 = dri2_wl_swrast_put_image2, +}; + static_assert(sizeof(struct kopper_vk_surface_create_storage) >= sizeof(VkWaylandSurfaceCreateInfoKHR), ""); @@ -2724,6 +2765,11 @@ static const __DRIkopperLoaderExtension kopper_loader_extension = { static const __DRIextension *swrast_loader_extensions[] = { &swrast_loader_extension.base, &image_lookup_extension.base, + NULL, +}; +static const __DRIextension *kopper_swrast_loader_extensions[] = { + &kopper_swrast_loader_extension.base, + &image_lookup_extension.base, &kopper_loader_extension.base, NULL, }; @@ -2781,7 +2827,7 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp) if (!dri2_load_driver_swrast(disp)) goto cleanup; - dri2_dpy->loader_extensions = swrast_loader_extensions; + dri2_dpy->loader_extensions = disp->Options.Zink ? kopper_swrast_loader_extensions : swrast_loader_extensions; if (!dri2_create_screen(disp)) goto cleanup;