From b990b01d70bfb34745d7fb1e477377445f6c13cd Mon Sep 17 00:00:00 2001 From: Matthew Thode Date: Wed, 2 Feb 2022 18:22:32 -0600 Subject: 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 --- 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(+) create mode 100644 gui-libs/wlroots/files/0.15.0-59b9518f.patch create mode 100644 gui-libs/wlroots/wlroots-0.15.0-r2.ebuild (limited to 'gui-libs') 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 +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." +} -- cgit v1.2.3-65-gdbad