summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0074.patch
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0074.patch')
-rw-r--r--third_party/libwebrtc/moz-patch-stack/0074.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0074.patch b/third_party/libwebrtc/moz-patch-stack/0074.patch
new file mode 100644
index 0000000000..92dd895153
--- /dev/null
+++ b/third_party/libwebrtc/moz-patch-stack/0074.patch
@@ -0,0 +1,74 @@
+From: Jan Grulich <jgrulich@redhat.com>
+Date: Fri, 10 Mar 2023 09:21:00 +0000
+Subject: Bug 1819035 - get EGL display based on the used platform in the
+ browser r=webrtc-reviewers,ng
+
+Because of a possible misconfiguration or a possible driver issue it
+might happen that the browser will use a different driver on X11 and
+end up using yet another one for wayland/gbm, which might lead to not
+working screen sharing in the better case, but also to a crash in the
+other driver (Nvidia). This adds a check for platform the browser runs
+on, if it's XWayland or Wayland and based on that query EGL display for
+that specific platform, rather than going for the Wayland one only.
+
+Differential Revision: https://phabricator.services.mozilla.com/D171858
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/c8606497de1f461a6352456e0e511c2ae498d526
+---
+ .../linux/wayland/egl_dmabuf.cc | 30 +++++++++++++++++--
+ 1 file changed, 28 insertions(+), 2 deletions(-)
+
+diff --git a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
+index b529077c6d..6a019c64b4 100644
+--- a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
++++ b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
+@@ -13,6 +13,7 @@
+ #include <asm/ioctl.h>
+ #include <dlfcn.h>
+ #include <fcntl.h>
++#include <gdk/gdk.h>
+ #include <libdrm/drm_fourcc.h>
+ #include <linux/types.h>
+ #include <spa/param/video/format-utils.h>
+@@ -217,6 +218,26 @@ static void CloseLibrary(void* library) {
+ }
+ }
+
++static bool IsWaylandDisplay() {
++ static auto sGdkWaylandDisplayGetType =
++ (GType (*)(void))dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_type");
++ if (!sGdkWaylandDisplayGetType) {
++ return false;
++ }
++ return (G_TYPE_CHECK_INSTANCE_TYPE ((gdk_display_get_default()),
++ sGdkWaylandDisplayGetType()));
++}
++
++static bool IsX11Display() {
++ static auto sGdkX11DisplayGetType =
++ (GType (*)(void))dlsym(RTLD_DEFAULT, "gdk_x11_display_get_type");
++ if (!sGdkX11DisplayGetType) {
++ return false;
++ }
++ return (G_TYPE_CHECK_INSTANCE_TYPE ((gdk_display_get_default()),
++ sGdkX11DisplayGetType()));
++}
++
+ static void* g_lib_egl = nullptr;
+
+ RTC_NO_SANITIZE("cfi-icall")
+@@ -362,8 +383,13 @@ EglDmaBuf::EglDmaBuf() {
+ return;
+ }
+
+- egl_.display = EglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR,
+- (void*)EGL_DEFAULT_DISPLAY, nullptr);
++ if (IsWaylandDisplay()) {
++ egl_.display = EglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR,
++ (void*)EGL_DEFAULT_DISPLAY, nullptr);
++ } else if (IsX11Display()) {
++ egl_.display = EglGetPlatformDisplay(EGL_PLATFORM_X11_KHR,
++ (void*)EGL_DEFAULT_DISPLAY, nullptr);
++ }
+
+ if (egl_.display == EGL_NO_DISPLAY) {
+ RTC_LOG(LS_ERROR) << "Failed to obtain default EGL display: "