On 2022/11/17 15:39:53 +0000, Klemens Nanni <[email protected]> wrote:
> I see now.
>
> meson tries to install the same picom.desktop twice, so we might as well
> drop the second attempt and use the first file for @sample in PLIST.
Agreed, I haven't realized the two picom.desktop files are the same!
> git detection can also be neutered a tad simpler.
sure; sometimes i fall for having more '-' than what strictly needed ;)
> Here's your diff with a slightly simpler meson.build patch.
>
> So I have the following in my ~/.xsession
> picom --daemon --config /dev/null --vsync --backend glx
due to -Dopengl=false all the backends except for xrender were
disabled. Thanks to brynet for hinting at eglGetProcAddress, I've
come up with the patch below. Not sure how i've used it is
idiomatic...
eglGetProcAddress("glEGLImageTargetTexStorageEXT") should always
succeed because during the egl backend initialisation it checks
whether the GL_EXT_EGL_image_storage extension is supported.
i still don't know why we need such patch; looking at repology
freebsd, crux and fedora are already distributing the picom-10
package, and looking at their Makefile/recipe/whatever they don't seem
to do any fancy stuff.
sdk managed to link it by adding a dependency on libOSMesa, maybe
that's the way?
i'm also bundling another patch to fix a printf...
> Updating with your patch now gives me
> $ picom --config /dev/null --vsync --backend glx
> [ 11/17/22 19:33:29.791 get_cfg ERROR ] Backend "glx" is only available
> as part of the legacy backends.
> [ 11/17/22 19:33:29.792 session_init FATAL ERROR ] Failed to get
> configuration, usually mean you have specified invalid options.
> [ 11/17/22 19:33:29.792 main FATAL ERROR ] Failed to create new session.
>
> https://github.com/yshui/picom/releases/tag/v10-rc1 says we can use
> the `legacy-backends' option or switch to the "egl" one, but neither
> works for me:
> $ picom --config /dev/null --vsync --backend glx --legacy-backends
> [ 11/17/22 19:38:21.287 init_render ERROR ] GLX backend support not
> compiled in.
> [ 11/17/22 19:38:21.287 session_init FATAL ERROR ] Failed to initialize
> the backend
now this works
> $ picom --config /dev/null --vsync --backend egl
> [ 11/17/22 19:35:26.762 get_cfg WARN ] The egl backend is still
> experimental, use with care.
> [ 11/17/22 19:35:26.762 get_cfg ERROR ] Backend "egl" is only available
> as part of the legacy backends.
> [ 11/17/22 19:35:26.762 session_init FATAL ERROR ] Failed to get
> configuration, usually mean you have specified invalid options.
> [ 11/17/22 19:35:26.762 main FATAL ERROR ] Failed to create new session.
and this too.
I've tried the egl, glx and xrender backend. All seem to work fine
here (amdgpu) althought I hit one usual (for me) hang: after some time
I've left picom running on the system mostly idle the graphic froze,
network & co were still fine. Sadly, it's not a regression for me (:
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/x11/picom/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- Makefile 11 Mar 2022 20:16:55 -0000 1.7
+++ Makefile 18 Nov 2022 08:08:28 -0000
@@ -2,14 +2,14 @@ COMMENT = lightweight compositor for X11
GH_ACCOUNT = yshui
GH_PROJECT = picom
-GH_TAGNAME = v9.1
+GH_TAGNAME = v10
CATEGORIES = x11
# MPL 2.0
PERMIT_PACKAGE = Yes
-WANTLIB += GL X11 X11-xcb c config dbus-1 ev m pcre pixman-1
+WANTLIB += EGL GL X11 X11-xcb c config dbus-1 ev m pcre pixman-1
WANTLIB += xcb-composite xcb-damage xcb-glx xcb-image xcb-present
WANTLIB += xcb-randr xcb-render-util xcb-render xcb-shape xcb-sync
WANTLIB += xcb-xfixes xcb-xinerama xcb
@@ -34,6 +34,7 @@ LIB_DEPENDS = devel/libconfig \
CONFIGURE_ARGS += -Dwith_docs=true \
-Dunittest=true \
-Dcompton=false
+
CONFIGURE_ENV += CPPFLAGS="${CPPFLAGS} -I${LOCALBASE}/include" \
LDFLAGS="${LDFLAGS} -L${LOCALBASE}/lib"
Index: distinfo
===================================================================
RCS file: /home/cvs/ports/x11/picom/distinfo,v
retrieving revision 1.4
diff -u -p -r1.4 distinfo
--- distinfo 14 Feb 2022 13:04:05 -0000 1.4
+++ distinfo 17 Nov 2022 15:49:57 -0000
@@ -1,2 +1,2 @@
-SHA256 (picom-9.1.tar.gz) = hwCscb1JbJEmLIV24pyzrs8rTvSMBDlKkpUJ08s3uH0=
-SIZE (picom-9.1.tar.gz) = 263924
+SHA256 (picom-10.tar.gz) = 6EAwTDKfB5cgWWMwKJTFXhHXfPUaIsCnIINEzm/Qojg=
+SIZE (picom-10.tar.gz) = 286728
Index: pkg/PLIST
===================================================================
RCS file: /home/cvs/ports/x11/picom/pkg/PLIST,v
retrieving revision 1.3
diff -u -p -r1.3 PLIST
--- pkg/PLIST 11 Mar 2022 20:16:55 -0000 1.3
+++ pkg/PLIST 17 Nov 2022 15:49:57 -0000
@@ -3,6 +3,7 @@ bin/picom-trans
@man man/man1/picom-trans.1
@man man/man1/picom.1
share/applications/picom.desktop
+@sample ${SYSCONFDIR}/xdg/autostart/picom.desktop
share/examples/picom/
share/examples/picom/picom.sample.conf
share/icons/hicolor/48x48/apps/picom.png
Index: patches/patch-meson_build
===================================================================
RCS file: patches/patch-meson_build
diff -N patches/patch-meson_build
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-meson_build 18 Nov 2022 08:31:25 -0000
@@ -0,0 +1,24 @@
+- ignore git
+- autostart file in /etc/ needs PLIST @sample
+
+Index: meson.build
+--- meson.build.orig
++++ meson.build
+@@ -7,8 +7,7 @@ cc = meson.get_compiler('c')
+ version = 'v'+meson.project_version()
+
+ # use git describe if that's available
+-git = find_program('git', required: false)
+-if git.found()
++if false
+ gitv = run_command('git', 'rev-parse', '--short=5', 'HEAD', check:
false)
+ if gitv.returncode() == 0
+ version = 'vgit-'+gitv.stdout().strip()
+@@ -73,7 +72,6 @@ subdir('man')
+
+ install_data('bin/picom-trans', install_dir: get_option('bindir'))
+ install_data('picom.desktop', install_dir: 'share/applications')
+-install_data('picom.desktop', install_dir: get_option('sysconfdir') / 'xdg' /
'autostart')
+
+ if get_option('compton')
+ install_data('compton.desktop', install_dir: 'share/applications')
Index: patches/patch-src_backend_gl_egl_c
===================================================================
RCS file: patches/patch-src_backend_gl_egl_c
diff -N patches/patch-src_backend_gl_egl_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_backend_gl_egl_c 18 Nov 2022 08:31:25 -0000
@@ -0,0 +1,42 @@
+glEGLImageTargetTexStorageEXT fails to link because its pointer should
+be retrieved via eglGetProcAddress.
+
+Index: src/backend/gl/egl.c
+--- src/backend/gl/egl.c.orig
++++ src/backend/gl/egl.c
+@@ -36,6 +36,8 @@ struct egl_data {
+ EGLContext ctx;
+ };
+
++static void (*imageTargetTexStorageFn)(GLenum, GLeglImageOES, const GLint *);
++
+ /**
+ * Free a glx_texture_t.
+ */
+@@ -215,6 +217,17 @@ static backend_t *egl_init(session_t *ps) {
+
+ success = true;
+
++ /*
++ * should always succeed since if we reach this point
++ * it's ensured we have the GL_EXT_EGL_image_storage
++ * extension.
++ */
++ imageTargetTexStorageFn =
eglGetProcAddress("glEGLImageTargetTexStorageEXT");
++ if (imageTargetTexStorageFn == NULL) {
++ log_error("don't have glEGLImageTargetTexStorageEXT!");
++ success = false;
++ }
++
+ end:
+ if (!success) {
+ egl_deinit(&gd->gl.base);
+@@ -270,7 +283,7 @@ egl_bind_pixmap(backend_t *base, xcb_pixmap_t pixmap,
+ wd->dim = 0;
+ wd->inner->refcount = 1;
+ glBindTexture(GL_TEXTURE_2D, inner->texture);
+- glEGLImageTargetTexStorageEXT(GL_TEXTURE_2D, eglpixmap->image, NULL);
++ imageTargetTexStorageFn(GL_TEXTURE_2D, eglpixmap->image, NULL);
+ glBindTexture(GL_TEXTURE_2D, 0);
+
+ gl_check_err();
Index: patches/patch-src_picom_c
===================================================================
RCS file: patches/patch-src_picom_c
diff -N patches/patch-src_picom_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_picom_c 18 Nov 2022 08:31:25 -0000
@@ -0,0 +1,16 @@
+fix uint64_t printing
+
+Index: src/picom.c
+--- src/picom.c.orig
++++ src/picom.c
+@@ -539,8 +539,8 @@ static bool initialize_backend(session_t *ps) {
+ } else {
+ shader->attributes = 0;
+ }
+- log_debug("Shader %s has attributes %ld",
shader->key,
+- shader->attributes);
++ log_debug("Shader %s has attributes %"PRIu64,
++ shader->key, shader->attributes);
+ }
+ }
+