commit:     b990b01d70bfb34745d7fb1e477377445f6c13cd
Author:     Matthew Thode <prometheanfire <AT> gentoo <DOT> org>
AuthorDate: Thu Feb  3 00:22:32 2022 +0000
Commit:     Matthew Thode <prometheanfire <AT> gentoo <DOT> org>
CommitDate: Thu Feb  3 00:22:39 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b990b01d

gui-libs/wlroots: fix gles on nvidia

upstream https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/59b9518f

Closes: https://bugs.gentoo.org/832005
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Matthew Thode <prometheanfire <AT> gentoo.org>

 gui-libs/wlroots/files/0.15.0-59b9518f.patch | 88 ++++++++++++++++++++++++++++
 gui-libs/wlroots/wlroots-0.15.0-r2.ebuild    | 75 ++++++++++++++++++++++++
 2 files changed, 163 insertions(+)

diff --git a/gui-libs/wlroots/files/0.15.0-59b9518f.patch 
b/gui-libs/wlroots/files/0.15.0-59b9518f.patch
new file mode 100644
index 000000000000..95ca0becd618
--- /dev/null
+++ b/gui-libs/wlroots/files/0.15.0-59b9518f.patch
@@ -0,0 +1,88 @@
+From 59b9518f072527ac59593e51df7f5d5331a34f0e Mon Sep 17 00:00:00 2001
+From: Thomas Hebb <[email protected]>
+Date: Wed, 5 Jan 2022 00:16:59 -0800
+Subject: [PATCH] render/gles2: don't constrain shm formats to ones that
+ support reading
+
+commit 44e8451cd93e ("render/gles2: hide shm formats without GL
+support") added the is_gles2_pixel_format_supported() function to
+render/gles2/pixel_format.c, whose stated purpose is to "check whether
+the renderer has the needed GL extensions to read a given pixel format."
+It then used that function to filter the pixel formats returned by
+get_gles2_shm_formats().
+
+The result of this change is that RGB formats are no longer reported for
+GL drivers that don't implement EXT_read_format_bgra, even when those
+formats are supported for rendering (which they have to be for
+wlr_gles2_renderer_create() to succeed). This is a pretty clear
+regression, since wlr_renderer_init_wl_shm() fails when either of
+WL_SHM_FORMAT_ARGB8888 or WL_SHM_FORMAT_XRGB8888 are missing.
+
+To fix the regression, change is_gles2_pixel_format_supported() to
+accept all pixel formats that support rendering, regardless of whether
+we can read them or not, and move the check for EXT_read_format_bgra
+back into gles2_read_pixels(). (There's already a check for this
+extension in gles2_preferred_read_format(), so we're not breaking any
+abstraction that wasn't already broken.)
+
+Tested on the NVIDIA 495.46 proprietary driver, which doesn't support
+EXT_read_format_bgra.
+
+Fixes: 44e8451cd93e ("render/gles2: hide shm formats without GL support")
+---
+ render/gles2/pixel_format.c | 14 ++++++++++----
+ render/gles2/renderer.c     |  6 ++++++
+ 2 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c
+index 31bb3908..b155bbbe 100644
+--- a/render/gles2/pixel_format.c
++++ b/render/gles2/pixel_format.c
+@@ -98,6 +98,10 @@ static const struct wlr_gles2_pixel_format formats[] = {
+ 
+ // TODO: more pixel formats
+ 
++/*
++ * Return true if supported for texturing, even if other operations like
++ * reading aren't supported.
++ */
+ bool is_gles2_pixel_format_supported(const struct wlr_gles2_renderer 
*renderer,
+               const struct wlr_gles2_pixel_format *format) {
+       if (format->gl_type == GL_UNSIGNED_INT_2_10_10_10_REV_EXT
+@@ -108,10 +112,12 @@ bool is_gles2_pixel_format_supported(const struct 
wlr_gles2_renderer *renderer,
+                       && !renderer->exts.OES_texture_half_float_linear) {
+               return false;
+       }
+-      if (format->gl_format == GL_BGRA_EXT
+-                      && !renderer->exts.EXT_read_format_bgra) {
+-              return false;
+-      }
++      /*
++       * Note that we don't need to check for GL_EXT_texture_format_BGRA8888
++       * here, since we've already checked if we have it at renderer creation
++       * time and bailed out if not. We do the check there because Wayland
++       * requires all compositors to support SHM buffers in that format.
++       */
+       return true;
+ }
+ 
+diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
+index 527d85bf..67b8ead4 100644
+--- a/render/gles2/renderer.c
++++ b/render/gles2/renderer.c
+@@ -441,6 +441,12 @@ static bool gles2_read_pixels(struct wlr_renderer 
*wlr_renderer,
+               return false;
+       }
+ 
++      if (fmt->gl_format == GL_BGRA_EXT && 
!renderer->exts.EXT_read_format_bgra) {
++              wlr_log(WLR_ERROR,
++                      "Cannot read pixels: missing GL_EXT_read_format_bgra 
extension");
++              return false;
++      }
++
+       const struct wlr_pixel_format_info *drm_fmt =
+               drm_get_pixel_format_info(fmt->drm_format);
+       assert(drm_fmt);
+-- 
+GitLab
+

diff --git a/gui-libs/wlroots/wlroots-0.15.0-r2.ebuild 
b/gui-libs/wlroots/wlroots-0.15.0-r2.ebuild
new file mode 100644
index 000000000000..75badbe1a0bc
--- /dev/null
+++ b/gui-libs/wlroots/wlroots-0.15.0-r2.ebuild
@@ -0,0 +1,75 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit meson
+
+DESCRIPTION="Pluggable, composable, unopinionated modules for building a 
Wayland compositor"
+HOMEPAGE="https://gitlab.freedesktop.org/wlroots/wlroots";
+
+if [[ ${PV} == 9999 ]]; then
+       EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git";
+       inherit git-r3
+       SLOT="0/9999"
+else
+       
SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.gz";
+       KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
+       SLOT="0/15"
+fi
+
+LICENSE="MIT"
+IUSE="vulkan x11-backend X"
+
+DEPEND="
+       >=dev-libs/libinput-1.14.0:0=
+       >=dev-libs/wayland-1.20.0
+       >=dev-libs/wayland-protocols-1.24
+       media-libs/mesa[egl(+),gles2,gbm(+)]
+       sys-auth/seatd:=
+       virtual/libudev
+       vulkan? (
+               dev-util/glslang:0=
+               dev-util/vulkan-headers:0=
+               media-libs/vulkan-loader:0=
+       )
+       >=x11-libs/libdrm-2.4.109:0=
+       x11-libs/libxkbcommon
+       x11-libs/pixman
+       x11-backend? ( x11-libs/libxcb:0= )
+       X? (
+               x11-base/xwayland
+               x11-libs/libxcb:0=
+               x11-libs/xcb-util-image
+               x11-libs/xcb-util-wm
+       )
+"
+RDEPEND="
+       ${DEPEND}
+"
+BDEPEND="
+       >=dev-libs/wayland-protocols-1.24
+       >=dev-util/meson-0.60.0
+       virtual/pkgconfig
+"
+
+PATCHES=( "${FILESDIR}/0.15.0-59b9518f.patch" )
+
+src_configure() {
+       # xcb-util-errors is not on Gentoo Repository (and upstream seems 
inactive?)
+       local emesonargs=(
+               "-Dxcb-errors=disabled"
+               "-Dexamples=false"
+               "-Dwerror=false"
+               -Drenderers=$(usex vulkan 'gles2,vulkan' gles2)
+               -Dxwayland=$(usex X enabled disabled)
+               -Dbackends=drm,libinput$(usex x11-backend ',x11' '')
+       )
+
+       meson_src_configure
+}
+
+pkg_postinst() {
+       elog "You must be in the input group to allow your compositor"
+       elog "to access input devices via libinput."
+}

Reply via email to