diff --git a/0001-Fix-a-segfault-in-wlEglCreatePlatformWindowSurfaceHo.patch b/0001-Fix-a-segfault-in-wlEglCreatePlatformWindowSurfaceHo.patch deleted file mode 100644 index c37fbcb..0000000 --- a/0001-Fix-a-segfault-in-wlEglCreatePlatformWindowSurfaceHo.patch +++ /dev/null @@ -1,37 +0,0 @@ -From c24fe0634f1f4f730ded955c69b20f1fc8b0a2d5 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Thu, 14 Nov 2024 12:37:11 -0700 -Subject: [PATCH 1/2] Fix a segfault in wlEglCreatePlatformWindowSurfaceHook - -In the error cleanup path in wlEglCreatePlatformWindowSurfaceHook, don't -try to dereference the WlEglSurface if we never allocated it. ---- - src/wayland-eglsurface.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index ae6cafc..16161f0 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -2843,15 +2843,14 @@ EGLSurface wlEglCreatePlatformWindowSurfaceHook(EGLDisplay dpy, - return surface; - - fail: -- if (surface->drmSyncobjHandle) { -- drmSyncobjDestroy(display->drmFd, surface->drmSyncobjHandle); -- } -- - if (drmSyncobjFd > 0) { - close(drmSyncobjFd); - } - - if (surface) { -+ if (surface->drmSyncobjHandle) { -+ drmSyncobjDestroy(display->drmFd, surface->drmSyncobjHandle); -+ } - wlEglDestroySurface(display, surface); - } - --- -2.43.0 - diff --git a/0001-egl-wayland-bump-version-to-1.1.17.patch b/0001-egl-wayland-bump-version-to-1.1.17.patch deleted file mode 100644 index 4002ffe..0000000 --- a/0001-egl-wayland-bump-version-to-1.1.17.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 2d31baa7831166fd27a2fc01ecc684613046bb28 Mon Sep 17 00:00:00 2001 -From: Austin Shafer -Date: Fri, 23 Aug 2024 10:12:10 -0400 -Subject: [PATCH 1/9] egl-wayland bump version to 1.1.17 - -We are changing the release process and bumping versions immediately -after a release tag is made, that way versions installed from the -latest git master will always have the "next" version. ---- - configure.ac | 2 +- - include/wayland-external-exports.h | 2 +- - meson.build | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 75489a5..36594a9 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2,7 +2,7 @@ AC_PREREQ([2.64]) - - m4_define([wayland_eglstream_major_version], [1]) - m4_define([wayland_eglstream_minor_version], [1]) --m4_define([wayland_eglstream_micro_version], [16]) -+m4_define([wayland_eglstream_micro_version], [17]) - m4_define([wayland_eglstream_version], - [wayland_eglstream_major_version.wayland_eglstream_minor_version.wayland_eglstream_micro_version]) - -diff --git a/include/wayland-external-exports.h b/include/wayland-external-exports.h -index 43579c9..2993dea 100644 ---- a/include/wayland-external-exports.h -+++ b/include/wayland-external-exports.h -@@ -53,7 +53,7 @@ - #define WAYLAND_EXTERNAL_VERSION_MINOR 0 - #endif - --#define WAYLAND_EXTERNAL_VERSION_MICRO 16 -+#define WAYLAND_EXTERNAL_VERSION_MICRO 17 - - - #define EGL_EXTERNAL_PLATFORM_VERSION_MAJOR WAYLAND_EXTERNAL_VERSION_MAJOR -diff --git a/meson.build b/meson.build -index 4d9bd1a..b3700fa 100644 ---- a/meson.build -+++ b/meson.build -@@ -1,5 +1,5 @@ - project('wayland-eglstream', 'c', -- version : '1.1.16', -+ version : '1.1.17', - default_options : [ - 'buildtype=debugoptimized', - 'c_std=gnu99', --- -2.43.0 - diff --git a/0001-egl-wayland-enable-CI-with-github-actions.patch b/0001-egl-wayland-enable-CI-with-github-actions.patch deleted file mode 100644 index 800ce9a..0000000 --- a/0001-egl-wayland-enable-CI-with-github-actions.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 40e835f197178e7e4387a042acc8f1dc42f810ee Mon Sep 17 00:00:00 2001 -From: Austin Shafer -Date: Wed, 9 Oct 2024 14:53:52 -0400 -Subject: [PATCH 1/3] egl-wayland: enable CI with github actions - -This enables CI for github actions builds, aimed for helping verify -new pull requests. This adds tests for the meson and autotools builds -on ubuntu 24.04. Other distros are apparently not supported by default -so we aren't able to expand testing this way. ---- - .github/workflows/arch-build.yml | 16 ++++++++++++++++ - .github/workflows/autoconf-build.yml | 14 ++++++++++++++ - .github/workflows/meson-build.yml | 14 ++++++++++++++ - .github/workflows/meson-llvm-build.yml | 17 +++++++++++++++++ - 4 files changed, 61 insertions(+) - create mode 100644 .github/workflows/arch-build.yml - create mode 100644 .github/workflows/autoconf-build.yml - create mode 100644 .github/workflows/meson-build.yml - create mode 100644 .github/workflows/meson-llvm-build.yml - -diff --git a/.github/workflows/arch-build.yml b/.github/workflows/arch-build.yml -new file mode 100644 -index 0000000..3f56616 ---- /dev/null -+++ b/.github/workflows/arch-build.yml -@@ -0,0 +1,16 @@ -+name: Arch Build -+on: [push, pull_request] -+jobs: -+ Meson-Build: -+ runs-on: ubuntu-24.04 -+ container: -+ image: archlinux:latest -+ steps: -+ - uses: actions/checkout@v4 -+ - run: pacman --noconfirm -Syy -+ - run: pacman --noconfirm -S wayland-protocols libdrm libglvnd pkgconf -+ - run: pacman --noconfirm -S wayland eglexternalplatform -+ - run: pacman --noconfirm -S meson ninja gcc -+ - run: meson build -+ - run: ninja -C build -+ - run: ninja -C build install -diff --git a/.github/workflows/autoconf-build.yml b/.github/workflows/autoconf-build.yml -new file mode 100644 -index 0000000..c52ed92 ---- /dev/null -+++ b/.github/workflows/autoconf-build.yml -@@ -0,0 +1,14 @@ -+name: Autotools GCC Build -+on: [push, pull_request] -+jobs: -+ Meson-Build: -+ runs-on: ubuntu-24.04 -+ steps: -+ - uses: actions/checkout@v4 -+ - run: sudo apt update -+ - run: sudo apt install -y wayland-protocols libdrm-dev libegl-dev -+ - run: sudo apt install -y libwayland-dev libwayland-egl-backend-dev eglexternalplatform-dev -+ - run: sudo apt install -y meson ninja-build gcc -+ - run: ./autogen.sh -+ - run: make -+ - run: sudo make install -diff --git a/.github/workflows/meson-build.yml b/.github/workflows/meson-build.yml -new file mode 100644 -index 0000000..ca070d6 ---- /dev/null -+++ b/.github/workflows/meson-build.yml -@@ -0,0 +1,14 @@ -+name: Meson GCC Build -+on: [push, pull_request] -+jobs: -+ Meson-Build: -+ runs-on: ubuntu-24.04 -+ steps: -+ - uses: actions/checkout@v4 -+ - run: sudo apt update -+ - run: sudo apt install -y wayland-protocols libdrm-dev libegl-dev -+ - run: sudo apt install -y libwayland-dev libwayland-egl-backend-dev eglexternalplatform-dev -+ - run: sudo apt install -y meson ninja-build gcc -+ - run: meson build -+ - run: ninja -C build -+ - run: sudo ninja -C build install -diff --git a/.github/workflows/meson-llvm-build.yml b/.github/workflows/meson-llvm-build.yml -new file mode 100644 -index 0000000..83a8dbe ---- /dev/null -+++ b/.github/workflows/meson-llvm-build.yml -@@ -0,0 +1,17 @@ -+name: Meson LLVM Build -+on: [push, pull_request] -+jobs: -+ Meson-Build: -+ runs-on: ubuntu-24.04 -+ steps: -+ - uses: actions/checkout@v4 -+ - run: sudo apt update -+ - run: sudo apt install -y wayland-protocols libdrm-dev libegl-dev -+ - run: sudo apt install -y libwayland-dev libwayland-egl-backend-dev eglexternalplatform-dev -+ - run: sudo apt install -y meson ninja-build clang -+ - name: meson build -+ run: meson build -+ env: -+ CC: clang -+ - run: ninja -C build -+ - run: sudo ninja -C build install --- -2.43.0 - diff --git a/0002-Check-for-a-duplicate-wl_surface-in-wlEglCreatePlatf.patch b/0002-Check-for-a-duplicate-wl_surface-in-wlEglCreatePlatf.patch deleted file mode 100644 index 57b273a..0000000 --- a/0002-Check-for-a-duplicate-wl_surface-in-wlEglCreatePlatf.patch +++ /dev/null @@ -1,73 +0,0 @@ -From eeb29e10e5e7bedb0ce81cfff34683eda960bc80 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Thu, 14 Nov 2024 12:40:45 -0700 -Subject: [PATCH 2/2] Check for a duplicate wl_surface in - wlEglCreatePlatformWindowSurfaceHook - -In wlEglCreatePlatformWindowSurfaceHook, check if there's already a -EGLSurface that uses the same wl_surface object, and if so, fail with -EGL_BAD_ALLOC. - -We've got a check (using the wl_egl_window::driver_private pointer) to -catch if the app tries to create multiple EGLSurfaces from the same -wl_egl_window. But, an app could still call wl_egl_window_create -multiple times, which would give it multiple wl_egl_window structs for -the same wl_surface. ---- - src/wayland-eglsurface.c | 25 ++++++++++++++++++++++--- - 1 file changed, 22 insertions(+), 3 deletions(-) - -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index 16161f0..72c0863 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -2652,7 +2652,10 @@ EGLSurface wlEglCreatePlatformWindowSurfaceHook(EGLDisplay dpy, - WlEglDisplay *display = wlEglAcquireDisplay(dpy); - WlEglPlatformData *data = NULL; - WlEglSurface *surface = NULL; -+ WlEglSurface *existingSurf = NULL; - struct wl_egl_window *window = (struct wl_egl_window *)nativeWin; -+ struct wl_surface *wsurf = NULL; -+ long int wver = 0; - EGLBoolean res = EGL_FALSE; - EGLint err = EGL_SUCCESS; - EGLint surfType; -@@ -2683,6 +2686,23 @@ EGLSurface wlEglCreatePlatformWindowSurfaceHook(EGLDisplay dpy, - goto fail; - } - -+ getWlEglWindowVersionAndSurface(window, &wver, &wsurf); -+ if (wsurf == NULL) { -+ err = EGL_BAD_ALLOC; -+ goto fail; -+ } -+ -+ // Make sure that we don't have any existing EGLSurfaces for this -+ // wl_surface. The driver_private check above isn't sufficient for this: If -+ // the app calls wl_egl_window_create more than once on the same -+ // wl_surface, then it would get multiple wl_egl_window structs. -+ wl_list_for_each(existingSurf, &display->wlEglSurfaceList, link) { -+ if (existingSurf->wlSurface == wsurf) { -+ err = EGL_BAD_ALLOC; -+ goto fail; -+ } -+ } -+ - res = data->egl.getConfigAttrib(dpy, config, EGL_SURFACE_TYPE, &surfType); - - if (!res || !(surfType & EGL_STREAM_BIT_KHR)) { -@@ -2757,9 +2777,8 @@ EGLSurface wlEglCreatePlatformWindowSurfaceHook(EGLDisplay dpy, - // Create per surface wayland queue - surface->wlEventQueue = wl_display_create_queue(display->nativeDpy); - -- getWlEglWindowVersionAndSurface(window, -- &surface->wlEglWinVer, -- &surface->wlSurface); -+ surface->wlEglWinVer = wver; -+ surface->wlSurface = wsurf; - - err = assignWlEglSurfaceAttribs(surface, attribs); - if (err != EGL_SUCCESS) { --- -2.43.0 - diff --git a/0002-Fix-the-include-path-for-drm_fourcc.h.patch b/0002-Fix-the-include-path-for-drm_fourcc.h.patch deleted file mode 100644 index 12e04fd..0000000 --- a/0002-Fix-the-include-path-for-drm_fourcc.h.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 7c18d91d3605785b0d5a821b067cda5d61b2710f Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Mon, 26 Aug 2024 09:16:20 -0600 -Subject: [PATCH 2/9] Fix the include path for drm_fourcc.h. - -Remove the leading "libdrm/" when including drm_fourcc.h. - -We shouldn't hard-code a path like that -- using pkg-config should add -the appropriate include path. ---- - src/wayland-eglsurface.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index da08fb2..1b8ff77 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -41,7 +41,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include --- -2.43.0 - diff --git a/0002-egl-wayland-Fix-use-after-free-in-library-teardown.patch b/0002-egl-wayland-Fix-use-after-free-in-library-teardown.patch deleted file mode 100644 index 61ebb56..0000000 --- a/0002-egl-wayland-Fix-use-after-free-in-library-teardown.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0cd471dcfd46e6cb8b71eceddb20cc02eadabf61 Mon Sep 17 00:00:00 2001 -From: Robin Ebert -Date: Tue, 15 Oct 2024 16:26:05 +0200 -Subject: [PATCH 2/3] egl-wayland: Fix use after free in library teardown - ---- - src/wayland-egldisplay.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c -index 7089271..edd79c4 100644 ---- a/src/wayland-egldisplay.c -+++ b/src/wayland-egldisplay.c -@@ -729,10 +729,10 @@ static EGLBoolean terminateDisplay(WlEglDisplay *display, EGLBoolean globalTeard - * destroy the display connection itself */ - wlEglDestroyAllSurfaces(display); - -- wlEglDestroyFormatSet(&display->formatSet); -- wlEglDestroyFeedback(&display->defaultFeedback); -- - if (!globalTeardown || display->ownNativeDpy) { -+ wlEglDestroyFormatSet(&display->formatSet); -+ wlEglDestroyFeedback(&display->defaultFeedback); -+ - if (display->wlRegistry) { - wl_registry_destroy(display->wlRegistry); - display->wlRegistry = NULL; --- -2.43.0 - diff --git a/0003-Fix-a-declaration-after-code.patch b/0003-Fix-a-declaration-after-code.patch deleted file mode 100644 index c9e2707..0000000 --- a/0003-Fix-a-declaration-after-code.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 80ecf7edc4659c580fcd9d752b57bf23ef7399c0 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Mon, 26 Aug 2024 09:19:15 -0600 -Subject: [PATCH 3/9] Fix a declaration after code. - -In wayland-egldisplay.c, move a declaration to the top of the function. -Older versions of C don't allow mixing declarations and code. ---- - src/wayland-egldisplay.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c -index 4d25cd7..468b32d 100644 ---- a/src/wayland-egldisplay.c -+++ b/src/wayland-egldisplay.c -@@ -568,9 +568,10 @@ static void - dmabuf_feedback_check_done(void *data, struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback) - { - WlServerProtocols *protocols = (WlServerProtocols *)data; -+ drmDevice *drm_device; -+ - (void) dmabuf_feedback; - -- drmDevice *drm_device; - assert(getDeviceFromDevId); - if (getDeviceFromDevId(protocols->devId, 0, &drm_device) == 0) { - if (drm_device->available_nodes & (1 << DRM_NODE_RENDER)) { --- -2.43.0 - diff --git a/0003-egl-wayland-Handle-failure-to-acquire-image-in-wlEgl.patch b/0003-egl-wayland-Handle-failure-to-acquire-image-in-wlEgl.patch deleted file mode 100644 index cb0e1ec..0000000 --- a/0003-egl-wayland-Handle-failure-to-acquire-image-in-wlEgl.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 218f67846472c9310355210ee9a7e1fabed95062 Mon Sep 17 00:00:00 2001 -From: shiningdracon -Date: Sun, 8 Sep 2024 19:34:26 -0700 -Subject: [PATCH 3/3] egl-wayland: Handle failure to acquire image in - wlEglSendDamageEvent - -The image parameter of send_explicit_sync_points is assumed not to be -null, however this is a case the rest of the code handles. This causes -sporadic problems on KDE when running overnight as the image will not -be valid at some point, causing us to crash. - -Fixes #143 ---- - src/wayland-eglsurface.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index 4e4dcff..ae6cafc 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -265,11 +265,13 @@ wlEglSendDamageEvent(WlEglSurface *surface, - } - - image = pop_acquired_image(surface); -- if (image) { -- surface->ctx.currentBuffer = image->buffer; -- image->attached = EGL_TRUE; -+ if (!image) { -+ return EGL_FALSE; - } - -+ surface->ctx.currentBuffer = image->buffer; -+ image->attached = EGL_TRUE; -+ - /* - * Send our explicit sync acquire and release points. This needs to be done - * as part of the surface attach as it is a protocol error to specify these --- -2.43.0 - diff --git a/0004-egl-swap-provide-damage-rectangles-to-wl_surface.patch b/0004-egl-swap-provide-damage-rectangles-to-wl_surface.patch deleted file mode 100644 index 8b82448..0000000 --- a/0004-egl-swap-provide-damage-rectangles-to-wl_surface.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 8dbdd61b7c07e23bc5b8913fe3d52f32995be98a Mon Sep 17 00:00:00 2001 -From: Christian Hergert -Date: Fri, 23 Aug 2024 19:10:27 +0200 -Subject: [PATCH 4/9] egl-swap: provide damage rectangles to wl_surface - -Previously, wlEglSendDamageEvent used the entire surface as damage to -the compositor but in the wrong coordinate system. wl_surface_damage() -requires coordinates for the surface which could be scaled while -wl_surface_damage_buffer() expects buffer coordinates which is what -surface->width and surface->height represent. - -This ensures that the parameters to eglSwapBuffersWithDamage() are passed -along to the compositor as well. The coordinate system is flipped between -eglSwapBuffersWithDamage() and wl_surface_damage_buffer() which is handled -as well. - -Signed-off-by: Christian Hergert ---- - include/wayland-eglsurface-internal.h | 4 +++- - src/wayland-eglsurface.c | 25 +++++++++++++++++++++---- - src/wayland-eglswap.c | 4 ++-- - 3 files changed, 26 insertions(+), 7 deletions(-) - -diff --git a/include/wayland-eglsurface-internal.h b/include/wayland-eglsurface-internal.h -index dfc5fd4..b70b9d3 100644 ---- a/include/wayland-eglsurface-internal.h -+++ b/include/wayland-eglsurface-internal.h -@@ -206,7 +206,9 @@ EGLBoolean - wlEglSurfaceCheckReleasePoints(WlEglDisplay *display, WlEglSurface *surface); - - EGLBoolean wlEglSendDamageEvent(WlEglSurface *surface, -- struct wl_event_queue *queue); -+ struct wl_event_queue *queue, -+ EGLint *rects, -+ EGLint n_rects); - - void wlEglCreateFrameSync(WlEglSurface *surface); - EGLint wlEglWaitFrameSync(WlEglSurface *surface); -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index da08fb2..1f01616 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -242,9 +242,13 @@ send_explicit_sync_points (WlEglDisplay *display, WlEglSurface *surface, - } - - EGLBoolean --wlEglSendDamageEvent(WlEglSurface *surface, struct wl_event_queue *queue) -+wlEglSendDamageEvent(WlEglSurface *surface, -+ struct wl_event_queue *queue, -+ EGLint *rects, -+ EGLint n_rects) - { - struct wl_display *wlDpy = surface->wlEglDpy->nativeDpy; -+ EGLint i; - - if (surface->ctx.wlStreamResource) { - /* Attach same buffer to indicate new content for the surface is -@@ -286,8 +290,21 @@ wlEglSendDamageEvent(WlEglSurface *surface, struct wl_event_queue *queue) - surface->dy); - } - -- wl_surface_damage(surface->wlSurface, 0, 0, -- surface->width, surface->height); -+ if (n_rects > 0 && -+ (wl_proxy_get_version((struct wl_proxy *)surface->wlSurface) >= -+ WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION)) { -+ for (i = 0; i < n_rects; i++) { -+ const EGLint *rect = &rects[i * 4]; -+ // Coordinate systems are flipped between eglSwapBuffersWithDamage -+ // and wl_surface_damage_buffer, so invert Y values. -+ int inv_y = surface->height - (rect[1] + rect[3]); -+ wl_surface_damage_buffer(surface->wlSurface, rect[0], inv_y, rect[2], rect[3]); -+ } -+ } else { -+ wl_surface_damage(surface->wlSurface, 0, 0, UINT32_MAX, UINT32_MAX); -+ } -+ -+ - wl_surface_commit(surface->wlSurface); - surface->ctx.isAttached = EGL_TRUE; - -@@ -357,7 +374,7 @@ damage_thread(void *args) - - wlEglCreateFrameSync(surface); - -- ok = wlEglSendDamageEvent(surface, queue); -+ ok = wlEglSendDamageEvent(surface, queue, NULL, 0); - surface->ctx.framesProcessed++; - - pthread_cond_signal(&surface->condFrameSync); -diff --git a/src/wayland-eglswap.c b/src/wayland-eglswap.c -index bf1157d..ea99f49 100644 ---- a/src/wayland-eglswap.c -+++ b/src/wayland-eglswap.c -@@ -147,7 +147,7 @@ EGLBoolean wlEglSwapBuffersWithDamageHook(EGLDisplay eglDisplay, EGLSurface eglS - surface->ctx.framesProduced++; - } else { - wlEglCreateFrameSync(surface); -- res = wlEglSendDamageEvent(surface, surface->wlEventQueue); -+ res = wlEglSendDamageEvent(surface, surface->wlEventQueue, rects, n_rects); - wlEglSurfaceCheckReleasePoints(display, surface); - } - } -@@ -434,7 +434,7 @@ EGLBoolean wlEglPostPresentExport2(WlEglSurface *surface, - surface->ctx.framesProduced++; - } else { - wlEglCreateFrameSync(surface); -- res = wlEglSendDamageEvent(surface, surface->wlEventQueue); -+ res = wlEglSendDamageEvent(surface, surface->wlEventQueue, NULL, 0); - } - - // Release wlEglSurface lock. --- -2.43.0 - diff --git a/0005-Use-INT32_MAX-for-wl_surface_damage.patch b/0005-Use-INT32_MAX-for-wl_surface_damage.patch deleted file mode 100644 index 1a532a7..0000000 --- a/0005-Use-INT32_MAX-for-wl_surface_damage.patch +++ /dev/null @@ -1,27 +0,0 @@ -From febf851acc9c6a9a067ec001104533777adb5572 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Tue, 27 Aug 2024 08:17:20 -0600 -Subject: [PATCH 5/9] Use INT32_MAX for wl_surface_damage - -The wl_surface_damage request takes signed integer parameters, so -sending UINT32_MAX would be received as -1. Instead, send INT32_MAX. ---- - src/wayland-eglsurface.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/wayland-eglsurface.c b/src/wayland-eglsurface.c -index c2e3fdc..4e4dcff 100644 ---- a/src/wayland-eglsurface.c -+++ b/src/wayland-eglsurface.c -@@ -301,7 +301,7 @@ wlEglSendDamageEvent(WlEglSurface *surface, - wl_surface_damage_buffer(surface->wlSurface, rect[0], inv_y, rect[2], rect[3]); - } - } else { -- wl_surface_damage(surface->wlSurface, 0, 0, UINT32_MAX, UINT32_MAX); -+ wl_surface_damage(surface->wlSurface, 0, 0, INT32_MAX, INT32_MAX); - } - - --- -2.43.0 - diff --git a/0006-egl-wayland-Accept-device-name-from-either-wl_drm-or.patch b/0006-egl-wayland-Accept-device-name-from-either-wl_drm-or.patch deleted file mode 100644 index 19698b1..0000000 --- a/0006-egl-wayland-Accept-device-name-from-either-wl_drm-or.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 6355c1605a0b0ccfdc1963170c5564b291ad0eb0 Mon Sep 17 00:00:00 2001 -From: Austin Shafer -Date: Fri, 6 Sep 2024 14:06:32 -0400 -Subject: [PATCH 6/9] egl-wayland: Accept device name from either wl_drm or - linux_dmabuf - -Commit 11386cc allowed for listening for the DRM device using the -dmabuf protocol instead of wl_drm, when possible. Unfortunately some -headless compositors (kwin) do not properly send the device id through -dmabuf, even though they send the device path properly through wl_drm. -This change relaxes our check to ensure that one of the protocols sends -the information so that we can use it to verify compositor support. ---- - src/wayland-egldisplay.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c -index 468b32d..0128dbd 100644 ---- a/src/wayland-egldisplay.c -+++ b/src/wayland-egldisplay.c -@@ -485,6 +485,7 @@ static void wl_drm_device(void *data, struct wl_drm *wl_drm, const char *name) - WlServerProtocols *protocols = (WlServerProtocols *)data; - (void) wl_drm; - -+ free(protocols->drm_name); - protocols->drm_name = strdup(name); - } - -@@ -575,6 +576,7 @@ dmabuf_feedback_check_done(void *data, struct zwp_linux_dmabuf_feedback_v1 *dmab - assert(getDeviceFromDevId); - if (getDeviceFromDevId(protocols->devId, 0, &drm_device) == 0) { - if (drm_device->available_nodes & (1 << DRM_NODE_RENDER)) { -+ free(protocols->drm_name); - protocols->drm_name = strdup(drm_device->nodes[DRM_NODE_RENDER]); - } - -@@ -632,6 +634,7 @@ registry_handle_global_check_protocols( - - if ((strcmp(interface, "wl_drm") == 0) && (version >= 2)) { - protocols->wlDrm = wl_registry_bind(registry, name, &wl_drm_interface, 2); -+ wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); - } - } - -@@ -828,10 +831,9 @@ static bool getServerProtocolsInfo(struct wl_display *nativeDpy, - wl_display_roundtrip_queue(nativeDpy, queue); - zwp_linux_dmabuf_feedback_v1_destroy(default_feedback); - } -- } else if (protocols->wlDrm) { -- wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); -- wl_display_roundtrip_queue(nativeDpy, queue); - } -+ -+ /* Check that one of our two protocols provided the device name */ - result = protocols->drm_name != NULL; - - if (protocols->wlDmaBuf) { --- -2.43.0 - diff --git a/0007-egl-wayland-fix-device-name-case-where-only-wl_drm-e.patch b/0007-egl-wayland-fix-device-name-case-where-only-wl_drm-e.patch deleted file mode 100644 index f59983b..0000000 --- a/0007-egl-wayland-fix-device-name-case-where-only-wl_drm-e.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 845568c64b69b462918ed89760abb21039e55368 Mon Sep 17 00:00:00 2001 -From: Austin Shafer -Date: Tue, 17 Sep 2024 10:39:26 -0400 -Subject: [PATCH 7/9] egl-wayland: fix device name case where only wl_drm - exists - -This fixes a problem in commit 6355c16 where we do not properly wait -for a roundtrip to get the wl_drm name, which can lead to failing to -initialize and falling back to another ICD. This fix also properly -prioritizes the device provided by dmabuf feedback over the wl_drm -name, only using wl_drm if dmabuf did not provide anything. ---- - src/wayland-egldisplay.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c -index 0128dbd..3921ede 100644 ---- a/src/wayland-egldisplay.c -+++ b/src/wayland-egldisplay.c -@@ -634,7 +634,6 @@ registry_handle_global_check_protocols( - - if ((strcmp(interface, "wl_drm") == 0) && (version >= 2)) { - protocols->wlDrm = wl_registry_bind(registry, name, &wl_drm_interface, 2); -- wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); - } - } - -@@ -833,6 +832,12 @@ static bool getServerProtocolsInfo(struct wl_display *nativeDpy, - } - } - -+ /* If we didn't get a name through linux_dmabuf then fall back to wl_drm */ -+ if (!protocols->drm_name && protocols->wlDrm) { -+ wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); -+ wl_display_roundtrip_queue(nativeDpy, queue); -+ } -+ - /* Check that one of our two protocols provided the device name */ - result = protocols->drm_name != NULL; - --- -2.43.0 - diff --git a/0008-Add-ICD-json-file.patch b/0008-Add-ICD-json-file.patch deleted file mode 100644 index ac6f4e5..0000000 --- a/0008-Add-ICD-json-file.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 954e094faacdacad6d82905d2f0a674c3e37fbec Mon Sep 17 00:00:00 2001 -From: Simone Caronni -Date: Thu, 19 Sep 2024 16:00:09 +0200 -Subject: [PATCH 8/9] Add ICD json file - ---- - src/10_nvidia_wayland.json | 6 ++++++ - src/meson.build | 3 +++ - 2 files changed, 9 insertions(+) - create mode 100644 src/10_nvidia_wayland.json - -diff --git a/src/10_nvidia_wayland.json b/src/10_nvidia_wayland.json -new file mode 100644 -index 0000000..c08a641 ---- /dev/null -+++ b/src/10_nvidia_wayland.json -@@ -0,0 +1,6 @@ -+{ -+ "file_format_version" : "1.0.0", -+ "ICD" : { -+ "library_path" : "libnvidia-egl-wayland.so.1" -+ } -+} -diff --git a/src/meson.build b/src/meson.build -index 704632b..1f1ca34 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -86,3 +86,6 @@ egl_wayland = library('nvidia-egl-wayland', - version : meson.project_version(), - install : true, - ) -+ -+install_data('10_nvidia_wayland.json', -+ install_dir: '@0@/egl/egl_external_platform.d'.format(get_option('datadir'))) --- -2.43.0 - diff --git a/0009-egl-wayland-Fix-roundtrip-eating-wl_drm-events-in-ge.patch b/0009-egl-wayland-Fix-roundtrip-eating-wl_drm-events-in-ge.patch deleted file mode 100644 index 028c3cc..0000000 --- a/0009-egl-wayland-Fix-roundtrip-eating-wl_drm-events-in-ge.patch +++ /dev/null @@ -1,64 +0,0 @@ -From c10c5300483a8ec975e64e5d76c0fb00ac94e026 Mon Sep 17 00:00:00 2001 -From: Austin Shafer -Date: Thu, 19 Sep 2024 09:35:47 -0400 -Subject: [PATCH 9/9] egl-wayland: Fix roundtrip eating wl_drm events in - getServerProtocolsInfo - -This resolves another issue where the wl_drm events sent by the -compositor are silently dropped by a roundtrip that happens before -the wl_drm listener is registered. This change immediately registers -wl_drm and triggers its roundtrip first. The dmabuf feedback can -then proceed, potentially replacing the wl_drm name if a valid device -was provided. ---- - src/wayland-egldisplay.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - -diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c -index 3921ede..7089271 100644 ---- a/src/wayland-egldisplay.c -+++ b/src/wayland-egldisplay.c -@@ -634,6 +634,7 @@ registry_handle_global_check_protocols( - - if ((strcmp(interface, "wl_drm") == 0) && (version >= 2)) { - protocols->wlDrm = wl_registry_bind(registry, name, &wl_drm_interface, 2); -+ wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); - } - } - -@@ -817,11 +818,19 @@ static bool getServerProtocolsInfo(struct wl_display *nativeDpy, - protocols); - if (ret == 0) { - wl_display_roundtrip_queue(nativeDpy, queue); -+ /* use a second roundtrip to handle any wl_drm events triggered by binding the protocol */ -+ wl_display_roundtrip_queue(nativeDpy, queue); -+ - if (!getDeviceFromDevIdInitialised) { - getDeviceFromDevId = dlsym(RTLD_DEFAULT, "drmGetDeviceFromDevId"); - getDeviceFromDevIdInitialised = true; - } - -+ /* -+ * if dmabuf feedback is available then use that. This will potentially -+ * replace the drm_name provided by wl_drm, assuming the feedback provides -+ * a valid dev_t. -+ */ - if (protocols->wlDmaBuf && getDeviceFromDevId) { - struct zwp_linux_dmabuf_feedback_v1 *default_feedback - = zwp_linux_dmabuf_v1_get_default_feedback(protocols->wlDmaBuf); -@@ -832,12 +841,6 @@ static bool getServerProtocolsInfo(struct wl_display *nativeDpy, - } - } - -- /* If we didn't get a name through linux_dmabuf then fall back to wl_drm */ -- if (!protocols->drm_name && protocols->wlDrm) { -- wl_drm_add_listener(protocols->wlDrm, &drmListener, protocols); -- wl_display_roundtrip_queue(nativeDpy, queue); -- } -- - /* Check that one of our two protocols provided the device name */ - result = protocols->drm_name != NULL; - --- -2.43.0 - diff --git a/egl-wayland-1.1.16.tar.gz b/egl-wayland-1.1.16.tar.gz deleted file mode 100644 index e445fec..0000000 --- a/egl-wayland-1.1.16.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3302002987128dac159ec5dde7a53831ccb905288daad62d1d18bafa0388858 -size 74615 diff --git a/egl-wayland-1.1.17.tar.gz b/egl-wayland-1.1.17.tar.gz new file mode 100644 index 0000000..7fc819e --- /dev/null +++ b/egl-wayland-1.1.17.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:974351af2057a385e98f4a0d4a40adab4480b77f4b65449d1bd6137c758c25b7 +size 75764 diff --git a/libnvidia-egl-wayland.changes b/libnvidia-egl-wayland.changes index bfaf0bb..d57573f 100644 --- a/libnvidia-egl-wayland.changes +++ b/libnvidia-egl-wayland.changes @@ -1,3 +1,24 @@ +------------------------------------------------------------------- +Wed Dec 11 22:17:37 UTC 2024 - Stefan Dirsch + +- update to 1.1.17 tarball; no source code changes; actually we + had 1.1.7 before without noticing it ... +- supersedes + * 0001-egl-wayland-bump-version-to-1.1.17.patch + * 0002-Fix-the-include-path-for-drm_fourcc.h.patch + * 0003-Fix-a-declaration-after-code.patch + * 0004-egl-swap-provide-damage-rectangles-to-wl_surface.patch + * 0005-Use-INT32_MAX-for-wl_surface_damage.patch + * 0006-egl-wayland-Accept-device-name-from-either-wl_drm-or.patch + * 0007-egl-wayland-fix-device-name-case-where-only-wl_drm-e.patch + * 0008-Add-ICD-json-file.patch + * 0009-egl-wayland-Fix-roundtrip-eating-wl_drm-events-in-ge.patch + * 0001-egl-wayland-enable-CI-with-github-actions.patch + * 0002-egl-wayland-Fix-use-after-free-in-library-teardown.patch + * 0003-egl-wayland-Handle-failure-to-acquire-image-in-wlEgl.patch + * 0001-Fix-a-segfault-in-wlEglCreatePlatformWindowSurfaceHo.patch + * 0002-Check-for-a-duplicate-wl_surface-in-wlEglCreatePlatf.patch + ------------------------------------------------------------------- Fri Dec 6 13:44:48 UTC 2024 - Stefan Dirsch diff --git a/libnvidia-egl-wayland.spec b/libnvidia-egl-wayland.spec index cd41d30..6195633 100644 --- a/libnvidia-egl-wayland.spec +++ b/libnvidia-egl-wayland.spec @@ -20,7 +20,7 @@ %define lname libnvidia-egl-wayland%{so_ver} %define rname egl-wayland Name: libnvidia-egl-wayland -Version: 1.1.16 +Version: 1.1.17 Release: 0 Summary: The EGLStream-based Wayland external platform License: MIT @@ -28,20 +28,6 @@ Group: Development/Libraries/C and C++ URL: https://github.com/NVIDIA/egl-wayland Source0: https://github.com/NVIDIA/egl-wayland/archive/%{version}/%{rname}-%{version}.tar.gz Source1: baselibs.conf -Patch1: 0001-egl-wayland-bump-version-to-1.1.17.patch -Patch2: 0002-Fix-the-include-path-for-drm_fourcc.h.patch -Patch3: 0003-Fix-a-declaration-after-code.patch -Patch4: 0004-egl-swap-provide-damage-rectangles-to-wl_surface.patch -Patch5: 0005-Use-INT32_MAX-for-wl_surface_damage.patch -Patch6: 0006-egl-wayland-Accept-device-name-from-either-wl_drm-or.patch -Patch7: 0007-egl-wayland-fix-device-name-case-where-only-wl_drm-e.patch -Patch8: 0008-Add-ICD-json-file.patch -Patch9: 0009-egl-wayland-Fix-roundtrip-eating-wl_drm-events-in-ge.patch -Patch11: 0001-egl-wayland-enable-CI-with-github-actions.patch -Patch12: 0002-egl-wayland-Fix-use-after-free-in-library-teardown.patch -Patch13: 0003-egl-wayland-Handle-failure-to-acquire-image-in-wlEgl.patch -Patch21: 0001-Fix-a-segfault-in-wlEglCreatePlatformWindowSurfaceHo.patch -Patch22: 0002-Check-for-a-duplicate-wl_surface-in-wlEglCreatePlatf.patch BuildRequires: gcc-c++ BuildRequires: meson >= 0.50 BuildRequires: ninja