From d6a40dee352883523a822dd4aba2daf02f9cb4eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 1 May 2025 09:49:47 +0200 Subject: [PATCH] shm: fix compilation on pixman without PIXMAN_rgba_float16 --- config.c | 4 +--- meson.build | 5 +++++ shm.c | 7 ++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/config.c b/config.c index 98b2c307..2ff4c4cd 100644 --- a/config.c +++ b/config.c @@ -2811,9 +2811,7 @@ parse_section_tweak(struct context *ctx) _Static_assert(sizeof(conf->tweak.surface_bit_depth) == sizeof(int), "enum is not 32-bit"); - /* TODO: check which version PIXMAN_rgba_float16 ended up in; - guessing 0.47.0, but PR is currently stuck at 0.44.3 */ -#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 44, 3) +#if defined(HAVE_PIXMAN_RGBA_FLOAT16) return value_to_enum( ctx, (const char *[]){"auto", "8-bit", "10-bit", "16f-bit", NULL}, diff --git a/meson.build b/meson.build index 3e87999d..5fe77aea 100644 --- a/meson.build +++ b/meson.build @@ -145,6 +145,11 @@ if utf8proc.found() add_project_arguments('-DFOOT_GRAPHEME_CLUSTERING=1', language: 'c') endif +# TODO: should be 0.47.0? +if pixman.version().version_compare('>=0.44.3') + add_project_arguments('-DHAVE_PIXMAN_RGBA_FLOAT16', language: 'c') +endif + tllist = dependency('tllist', version: '>=1.1.0', fallback: 'tllist') fcft = dependency('fcft', version: ['>=3.3.1', '<4.0.0'], fallback: 'fcft') diff --git a/shm.c b/shm.c index a3ad5de4..9c227e45 100644 --- a/shm.c +++ b/shm.c @@ -984,9 +984,11 @@ shm_chain_new(struct wayland *wayl, bool scrollable, size_t pix_instances, enum wl_shm_format shm_fmt_with_alpha = WL_SHM_FORMAT_ARGB8888; static bool have_logged = false; - static bool have_logged_16f_fallback = false; static bool have_logged_10_fallback = false; +#if defined(HAVE_PIXMAN_RGBA_FLOAT16) + static bool have_logged_16f_fallback = false; + if (desired_bit_depth == SHM_BITS_16F) { if (wayl->shm_have_abgr161616f && wayl->shm_have_xbgr161616f) { pixman_fmt_without_alpha = PIXMAN_rgba_float16; @@ -1010,6 +1012,7 @@ shm_chain_new(struct wayland *wayl, bool scrollable, size_t pix_instances, } } } +#endif if (desired_bit_depth == SHM_BITS_10 || (desired_bit_depth == SHM_BITS_16F && @@ -1097,7 +1100,9 @@ shm_chain_bit_depth(const struct buffer_chain *chain) return fmt == PIXMAN_a8r8g8b8 ? SHM_BITS_8 +#if defined(HAVE_PIXMAN_RGBA_FLOAT16) : fmt == PIXMAN_rgba_float16 ? SHM_BITS_16F +#endif : SHM_BITS_10; }