* [PATCH v5 01/19] build-sys: add a "pixman" feature
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 6:35 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 02/19] ui: compile out some qemu-pixman functions when !PIXMAN marcandre.lureau
` (19 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
For now, pixman is mandatory, but we set config_host.h and Kconfig.
Once compilation is fixed, "pixman" will become actually optional.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 10 ++++++++--
include/ui/qemu-pixman.h | 2 ++
Kconfig.host | 3 +++
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
5 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
index 4961c82a6b..395d7155f6 100644
--- a/meson.build
+++ b/meson.build
@@ -813,10 +813,14 @@ if 'ust' in get_option('trace_backends')
method: 'pkg-config')
endif
pixman = not_found
-if have_system or have_tools
- pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
+if not get_option('pixman').auto() or have_system or have_tools
+ pixman = dependency('pixman-1', required: get_option('pixman'), version:'>=0.21.8',
method: 'pkg-config')
endif
+if not pixman.found() and (have_system or have_tools)
+ error('FIXME: pixman is currently required')
+endif
+
zlib = dependency('zlib', required: true)
libaio = not_found
@@ -2125,6 +2129,7 @@ config_host_data.set('CONFIG_SECCOMP', seccomp.found())
if seccomp.found()
config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc)
endif
+config_host_data.set('CONFIG_PIXMAN', pixman.found())
config_host_data.set('CONFIG_SNAPPY', snappy.found())
config_host_data.set('CONFIG_SOLARIS', targetos == 'sunos')
if get_option('tcg').allowed()
@@ -2843,6 +2848,7 @@ have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
host_kconfig = \
(get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
(have_tpm ? ['CONFIG_TPM=y'] : []) + \
+ (pixman.found() ? ['CONFIG_PIXMAN=y'] : []) + \
(spice.found() ? ['CONFIG_SPICE=y'] : []) + \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
(opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index e587c48b1f..d37feb5e3c 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -6,11 +6,13 @@
#ifndef QEMU_PIXMAN_H
#define QEMU_PIXMAN_H
+#ifdef CONFIG_PIXMAN
/* pixman-0.16.0 headers have a redundant declaration */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wredundant-decls"
#include <pixman.h>
#pragma GCC diagnostic pop
+#endif
/*
* pixman image formats are defined to be native endian,
diff --git a/Kconfig.host b/Kconfig.host
index d763d89269..b6ac2b9316 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -11,6 +11,9 @@ config OPENGL
config X11
bool
+config PIXMAN
+ bool
+
config SPICE
bool
diff --git a/meson_options.txt b/meson_options.txt
index 3c7398f3c6..de0e616e76 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -224,6 +224,8 @@ option('l2tpv3', type : 'feature', value : 'auto',
description: 'l2tpv3 network backend support')
option('netmap', type : 'feature', value : 'auto',
description: 'netmap network backend support')
+option('pixman', type : 'feature', value : 'auto',
+ description: 'pixman support')
option('slirp', type: 'feature', value: 'auto',
description: 'libslirp user mode network backend support')
option('vde', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 7ca4b77eae..8a75796c04 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -159,6 +159,7 @@ meson_options_help() {
printf "%s\n" ' pa PulseAudio sound support'
printf "%s\n" ' parallels parallels image format support'
printf "%s\n" ' pipewire PipeWire sound support'
+ printf "%s\n" ' pixman pixman support'
printf "%s\n" ' plugins TCG plugins via shared library loading'
printf "%s\n" ' png PNG support with libpng'
printf "%s\n" ' pvrdma Enable PVRDMA support'
@@ -416,6 +417,8 @@ _meson_option_parse() {
--disable-parallels) printf "%s" -Dparallels=disabled ;;
--enable-pipewire) printf "%s" -Dpipewire=enabled ;;
--disable-pipewire) printf "%s" -Dpipewire=disabled ;;
+ --enable-pixman) printf "%s" -Dpixman=enabled ;;
+ --disable-pixman) printf "%s" -Dpixman=disabled ;;
--with-pkgversion=*) quote_sh "-Dpkgversion=$2" ;;
--enable-plugins) printf "%s" -Dplugins=true ;;
--disable-plugins) printf "%s" -Dplugins=false ;;
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 01/19] build-sys: add a "pixman" feature
2023-10-23 11:30 ` [PATCH v5 01/19] build-sys: add a "pixman" feature marcandre.lureau
@ 2023-10-25 6:35 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 6:35 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> For now, pixman is mandatory, but we set config_host.h and Kconfig.
> Once compilation is fixed, "pixman" will become actually optional.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> meson.build | 10 ++++++++--
> include/ui/qemu-pixman.h | 2 ++
> Kconfig.host | 3 +++
> meson_options.txt | 2 ++
> scripts/meson-buildoptions.sh | 3 +++
> 5 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 4961c82a6b..395d7155f6 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -813,10 +813,14 @@ if 'ust' in get_option('trace_backends')
> method: 'pkg-config')
> endif
> pixman = not_found
> -if have_system or have_tools
> - pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
> +if not get_option('pixman').auto() or have_system or have_tools
> + pixman = dependency('pixman-1', required: get_option('pixman'), version:'>=0.21.8',
> method: 'pkg-config')
> endif
> +if not pixman.found() and (have_system or have_tools)
> + error('FIXME: pixman is currently required')
> +endif
> +
> zlib = dependency('zlib', required: true)
>
> libaio = not_found
> @@ -2125,6 +2129,7 @@ config_host_data.set('CONFIG_SECCOMP', seccomp.found())
> if seccomp.found()
> config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc)
> endif
> +config_host_data.set('CONFIG_PIXMAN', pixman.found())
> config_host_data.set('CONFIG_SNAPPY', snappy.found())
> config_host_data.set('CONFIG_SOLARIS', targetos == 'sunos')
> if get_option('tcg').allowed()
> @@ -2843,6 +2848,7 @@ have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
> host_kconfig = \
> (get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
> (have_tpm ? ['CONFIG_TPM=y'] : []) + \
> + (pixman.found() ? ['CONFIG_PIXMAN=y'] : []) + \
> (spice.found() ? ['CONFIG_SPICE=y'] : []) + \
> (have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
> (opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
> diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
> index e587c48b1f..d37feb5e3c 100644
> --- a/include/ui/qemu-pixman.h
> +++ b/include/ui/qemu-pixman.h
> @@ -6,11 +6,13 @@
> #ifndef QEMU_PIXMAN_H
> #define QEMU_PIXMAN_H
>
> +#ifdef CONFIG_PIXMAN
> /* pixman-0.16.0 headers have a redundant declaration */
> #pragma GCC diagnostic push
> #pragma GCC diagnostic ignored "-Wredundant-decls"
> #include <pixman.h>
> #pragma GCC diagnostic pop
> +#endif
Since we already require pixman 0.21, I wonder whether we still need these
pragmas .... anyway, removing it would be something for another patch, so
for this one:
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 02/19] ui: compile out some qemu-pixman functions when !PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 01/19] build-sys: add a "pixman" feature marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 10:05 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 03/19] ui: add pixman-compat.h marcandre.lureau
` (18 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Those functions require the PIXMAN library.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/qemu-pixman.h | 7 +++++--
ui/qemu-pixman.c | 6 ++++++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index d37feb5e3c..2ff6c4a656 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -76,17 +76,17 @@ pixman_format_code_t qemu_default_pixman_format(int bpp, bool native_endian);
pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format);
uint32_t qemu_pixman_to_drm_format(pixman_format_code_t pixman);
int qemu_pixman_get_type(int rshift, int gshift, int bshift);
-pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
bool qemu_pixman_check_format(DisplayChangeListener *dcl,
pixman_format_code_t format);
+#ifdef CONFIG_PIXMAN
+pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
int width);
void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
int width, int x, int y);
pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
pixman_image_t *image);
-void qemu_pixman_image_unref(pixman_image_t *image);
pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font,
unsigned int ch);
@@ -95,6 +95,9 @@ void qemu_pixman_glyph_render(pixman_image_t *glyph,
pixman_color_t *fgcol,
pixman_color_t *bgcol,
int x, int y, int cw, int ch);
+#endif
+
+void qemu_pixman_image_unref(pixman_image_t *image);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(pixman_image_t, qemu_pixman_image_unref)
diff --git a/ui/qemu-pixman.c b/ui/qemu-pixman.c
index b43ec38bf0..5ca55dd199 100644
--- a/ui/qemu-pixman.c
+++ b/ui/qemu-pixman.c
@@ -145,6 +145,7 @@ int qemu_pixman_get_type(int rshift, int gshift, int bshift)
return type;
}
+#ifdef CONFIG_PIXMAN
pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
{
pixman_format_code_t format;
@@ -158,6 +159,7 @@ pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
}
return format;
}
+#endif
/*
* Return true for known-good pixman conversions.
@@ -186,6 +188,7 @@ bool qemu_pixman_check_format(DisplayChangeListener *dcl,
}
}
+#ifdef CONFIG_PIXMAN
pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
int width)
{
@@ -211,6 +214,7 @@ pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format,
NULL,
pixman_image_get_stride(image));
}
+#endif
void qemu_pixman_image_unref(pixman_image_t *image)
{
@@ -220,6 +224,7 @@ void qemu_pixman_image_unref(pixman_image_t *image)
pixman_image_unref(image);
}
+#ifdef CONFIG_PIXMAN
pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font,
unsigned int ch)
{
@@ -262,3 +267,4 @@ void qemu_pixman_glyph_render(pixman_image_t *glyph,
pixman_image_unref(ifg);
pixman_image_unref(ibg);
}
+#endif /* CONFIG_PIXMAN */
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 02/19] ui: compile out some qemu-pixman functions when !PIXMAN
2023-10-23 11:30 ` [PATCH v5 02/19] ui: compile out some qemu-pixman functions when !PIXMAN marcandre.lureau
@ 2023-10-25 10:05 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 10:05 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Those functions require the PIXMAN library.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/ui/qemu-pixman.h | 7 +++++--
> ui/qemu-pixman.c | 6 ++++++
> 2 files changed, 11 insertions(+), 2 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 03/19] ui: add pixman-compat.h
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 01/19] build-sys: add a "pixman" feature marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 02/19] ui: compile out some qemu-pixman functions when !PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 10:08 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 04/19] vl: move display early init before default devices marcandre.lureau
` (17 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This is a tiny subset of PIXMAN API that is used pervasively in QEMU
codebase to manage images and identify the underlying format.
It doesn't seems worth to wrap this in a QEMU-specific API.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/pixman-compat.h | 195 +++++++++++++++++++++++++++++++++++++
include/ui/qemu-pixman.h | 2 +
2 files changed, 197 insertions(+)
create mode 100644 include/ui/pixman-compat.h
diff --git a/include/ui/pixman-compat.h b/include/ui/pixman-compat.h
new file mode 100644
index 0000000000..566ad99fcb
--- /dev/null
+++ b/include/ui/pixman-compat.h
@@ -0,0 +1,195 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Tiny subset of PIXMAN API commonly used by QEMU.
+ *
+ * Copyright 1987, 1988, 1989, 1998 The Open Group
+ * Copyright 1987, 1988, 1989 Digital Equipment Corporation
+ * Copyright 1999, 2004, 2008 Keith Packard
+ * Copyright 2000 SuSE, Inc.
+ * Copyright 2000 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc.
+ * Copyright 2004 Nicholas Miell
+ * Copyright 2005 Lars Knoll & Zack Rusin, Trolltech
+ * Copyright 2005 Trolltech AS
+ * Copyright 2007 Luca Barbato
+ * Copyright 2008 Aaron Plattner, NVIDIA Corporation
+ * Copyright 2008 Rodrigo Kumpera
+ * Copyright 2008 André Tupinambá
+ * Copyright 2008 Mozilla Corporation
+ * Copyright 2008 Frederic Plourde
+ * Copyright 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2009, 2010 Nokia Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef PIXMAN_COMPAT_H
+#define PIXMAN_COMPAT_H
+
+#define PIXMAN_TYPE_OTHER 0
+#define PIXMAN_TYPE_ARGB 2
+#define PIXMAN_TYPE_ABGR 3
+#define PIXMAN_TYPE_BGRA 8
+#define PIXMAN_TYPE_RGBA 9
+
+#define PIXMAN_FORMAT(bpp, type, a, r, g, b) (((bpp) << 24) | \
+ ((type) << 16) | \
+ ((a) << 12) | \
+ ((r) << 8) | \
+ ((g) << 4) | \
+ ((b)))
+
+#define PIXMAN_FORMAT_RESHIFT(val, ofs, num) \
+ (((val >> (ofs)) & ((1 << (num)) - 1)) << ((val >> 22) & 3))
+
+#define PIXMAN_FORMAT_BPP(f) PIXMAN_FORMAT_RESHIFT(f, 24, 8)
+#define PIXMAN_FORMAT_TYPE(f) (((f) >> 16) & 0x3f)
+#define PIXMAN_FORMAT_A(f) PIXMAN_FORMAT_RESHIFT(f, 12, 4)
+#define PIXMAN_FORMAT_R(f) PIXMAN_FORMAT_RESHIFT(f, 8, 4)
+#define PIXMAN_FORMAT_G(f) PIXMAN_FORMAT_RESHIFT(f, 4, 4)
+#define PIXMAN_FORMAT_B(f) PIXMAN_FORMAT_RESHIFT(f, 0, 4)
+#define PIXMAN_FORMAT_DEPTH(f) (PIXMAN_FORMAT_A(f) + \
+ PIXMAN_FORMAT_R(f) + \
+ PIXMAN_FORMAT_G(f) + \
+ PIXMAN_FORMAT_B(f))
+
+typedef enum {
+ /* 32bpp formats */
+ PIXMAN_a8r8g8b8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_ARGB, 8, 8, 8, 8),
+ PIXMAN_x8r8g8b8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_ARGB, 0, 8, 8, 8),
+ PIXMAN_a8b8g8r8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_ABGR, 8, 8, 8, 8),
+ PIXMAN_x8b8g8r8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_ABGR, 0, 8, 8, 8),
+ PIXMAN_b8g8r8a8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_BGRA, 8, 8, 8, 8),
+ PIXMAN_b8g8r8x8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_BGRA, 0, 8, 8, 8),
+ PIXMAN_r8g8b8a8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_RGBA, 8, 8, 8, 8),
+ PIXMAN_r8g8b8x8 = PIXMAN_FORMAT(32, PIXMAN_TYPE_RGBA, 0, 8, 8, 8),
+ /* 24bpp formats */
+ PIXMAN_r8g8b8 = PIXMAN_FORMAT(24, PIXMAN_TYPE_ARGB, 0, 8, 8, 8),
+ PIXMAN_b8g8r8 = PIXMAN_FORMAT(24, PIXMAN_TYPE_ABGR, 0, 8, 8, 8),
+ /* 16bpp formats */
+ PIXMAN_r5g6b5 = PIXMAN_FORMAT(16, PIXMAN_TYPE_ARGB, 0, 5, 6, 5),
+ PIXMAN_a1r5g5b5 = PIXMAN_FORMAT(16, PIXMAN_TYPE_ARGB, 1, 5, 5, 5),
+ PIXMAN_x1r5g5b5 = PIXMAN_FORMAT(16, PIXMAN_TYPE_ARGB, 0, 5, 5, 5),
+} pixman_format_code_t;
+
+typedef struct pixman_image pixman_image_t;
+
+typedef void (*pixman_image_destroy_func_t)(pixman_image_t *image, void *data);
+
+struct pixman_image {
+ int ref_count;
+ pixman_format_code_t format;
+ int width;
+ int height;
+ int stride;
+ uint32_t *data;
+ uint32_t *free_me;
+ pixman_image_destroy_func_t destroy_func;
+ void *destroy_data;
+};
+
+typedef struct pixman_color {
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+ uint16_t alpha;
+} pixman_color_t;
+
+static inline pixman_image_t *pixman_image_create_bits(pixman_format_code_t format,
+ int width,
+ int height,
+ uint32_t *bits,
+ int rowstride_bytes)
+{
+ pixman_image_t *i = g_new0(pixman_image_t, 1);
+
+ i->width = width;
+ i->height = height;
+ i->stride = rowstride_bytes ?: width * DIV_ROUND_UP(PIXMAN_FORMAT_BPP(format), 8);
+ i->format = format;
+ if (bits) {
+ i->data = bits;
+ } else {
+ i->free_me = i->data = g_malloc0(rowstride_bytes * height);
+ }
+ i->ref_count = 1;
+
+ return i;
+}
+
+static inline pixman_image_t *pixman_image_ref(pixman_image_t *i)
+{
+ i->ref_count++;
+ return i;
+}
+
+static inline bool pixman_image_unref(pixman_image_t *i)
+{
+ i->ref_count--;
+
+ if (i->ref_count == 0) {
+ if (i->destroy_func) {
+ i->destroy_func(i, i->destroy_data);
+ }
+ g_free(i->free_me);
+ g_free(i);
+
+ return true;
+ }
+
+ return false;
+}
+
+static inline void pixman_image_set_destroy_function(pixman_image_t *i,
+ pixman_image_destroy_func_t func,
+ void *data)
+
+{
+ i->destroy_func = func;
+ i->destroy_data = data;
+}
+
+static inline uint32_t *pixman_image_get_data(pixman_image_t *i)
+{
+ return i->data;
+}
+
+static inline int pixman_image_get_height(pixman_image_t *i)
+{
+ return i->height;
+}
+
+static inline int pixman_image_get_width(pixman_image_t *i)
+{
+ return i->width;
+}
+
+static inline int pixman_image_get_stride(pixman_image_t *i)
+{
+ return i->stride;
+}
+
+static inline pixman_format_code_t pixman_image_get_format(pixman_image_t *i)
+{
+ return i->format;
+}
+
+#endif /* PIXMAN_COMPAT_H */
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index 2ff6c4a656..de303d7654 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -12,6 +12,8 @@
#pragma GCC diagnostic ignored "-Wredundant-decls"
#include <pixman.h>
#pragma GCC diagnostic pop
+#else
+#include "pixman-compat.h"
#endif
/*
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 03/19] ui: add pixman-compat.h
2023-10-23 11:30 ` [PATCH v5 03/19] ui: add pixman-compat.h marcandre.lureau
@ 2023-10-25 10:08 ` Thomas Huth
2023-10-25 11:28 ` Marc-André Lureau
0 siblings, 1 reply; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 10:08 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> This is a tiny subset of PIXMAN API that is used pervasively in QEMU
> codebase to manage images and identify the underlying format.
>
> It doesn't seems worth to wrap this in a QEMU-specific API.
IMHO it's not very beautiful, but after thinking about it for a while, I
think it's acceptable and likely still better than disabling all the
dependend devices...
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/ui/pixman-compat.h | 195 +++++++++++++++++++++++++++++++++++++
Just a matter of taste, but I think I'd rather name it "pixman-minimal.h"
instead.
Anyway:
Acked-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 03/19] ui: add pixman-compat.h
2023-10-25 10:08 ` Thomas Huth
@ 2023-10-25 11:28 ` Marc-André Lureau
0 siblings, 0 replies; 40+ messages in thread
From: Marc-André Lureau @ 2023-10-25 11:28 UTC (permalink / raw)
To: Thomas Huth
Cc: QEMU, Michael S. Tsirkin, BALATON Zoltan, open list:sPAPR pseries,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, open list:ARM, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
[-- Attachment #1: Type: text/plain, Size: 926 bytes --]
Le mer. 25 oct. 2023, 15:18, Thomas Huth <thuth@redhat.com> a écrit :
> On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > This is a tiny subset of PIXMAN API that is used pervasively in QEMU
> > codebase to manage images and identify the underlying format.
> >
> > It doesn't seems worth to wrap this in a QEMU-specific API.
>
> IMHO it's not very beautiful, but after thinking about it for a while, I
> think it's acceptable and likely still better than disabling all the
> dependend devices...
>
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > include/ui/pixman-compat.h | 195 +++++++++++++++++++++++++++++++++++++
>
> Just a matter of taste, but I think I'd rather name it "pixman-minimal.h"
> instead.
>
> Anyway:
> Acked-by: Thomas Huth <thuth@redhat.com
Good suggestion 👍
>
>
[-- Attachment #2: Type: text/html, Size: 1838 bytes --]
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 04/19] vl: move display early init before default devices
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (2 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 03/19] ui: add pixman-compat.h marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 9:56 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 05/19] ui/console: allow to override the default VC marcandre.lureau
` (16 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The next commit needs to have the display registered itself before
creating the default VCs.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
system/vl.c | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git a/system/vl.c b/system/vl.c
index 92d29bf521..2cecb3d884 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1349,6 +1349,28 @@ static void qemu_disable_default_devices(void)
}
}
+static void qemu_early_display_init(void)
+{
+#if defined(CONFIG_VNC)
+ if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
+ display_remote++;
+ }
+#endif
+ if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
+ if (!qemu_display_find_default(&dpy)) {
+ dpy.type = DISPLAY_TYPE_NONE;
+#if defined(CONFIG_VNC)
+ vnc_parse("localhost:0,to=99,id=default");
+#endif
+ }
+ }
+ if (dpy.type == DISPLAY_TYPE_DEFAULT) {
+ dpy.type = DISPLAY_TYPE_NONE;
+ }
+
+ qemu_display_early_init(&dpy);
+}
+
static void qemu_create_default_devices(void)
{
MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
@@ -1398,23 +1420,6 @@ static void qemu_create_default_devices(void)
#endif
}
-#if defined(CONFIG_VNC)
- if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
- display_remote++;
- }
-#endif
- if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
- if (!qemu_display_find_default(&dpy)) {
- dpy.type = DISPLAY_TYPE_NONE;
-#if defined(CONFIG_VNC)
- vnc_parse("localhost:0,to=99,id=default");
-#endif
- }
- }
- if (dpy.type == DISPLAY_TYPE_DEFAULT) {
- dpy.type = DISPLAY_TYPE_NONE;
- }
-
/* If no default VGA is requested, the default is "none". */
if (default_vga) {
vga_model = get_default_vga_model(machine_class);
@@ -1939,7 +1944,6 @@ static void qemu_create_early_backends(void)
"ignoring option");
}
- qemu_display_early_init(&dpy);
qemu_console_early_init();
if (dpy.has_gl && dpy.gl != DISPLAYGL_MODE_OFF && display_opengl == 0) {
@@ -3670,6 +3674,7 @@ void qemu_init(int argc, char **argv)
suspend_mux_open();
qemu_disable_default_devices();
+ qemu_early_display_init();
qemu_create_default_devices();
qemu_create_early_backends();
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 04/19] vl: move display early init before default devices
2023-10-23 11:30 ` [PATCH v5 04/19] vl: move display early init before default devices marcandre.lureau
@ 2023-10-25 9:56 ` Thomas Huth
2023-10-25 13:26 ` Marc-André Lureau
0 siblings, 1 reply; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 9:56 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The next commit needs to have the display registered itself before
> creating the default VCs.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> system/vl.c | 41 +++++++++++++++++++++++------------------
> 1 file changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/system/vl.c b/system/vl.c
> index 92d29bf521..2cecb3d884 100644
> --- a/system/vl.c
> +++ b/system/vl.c
> @@ -1349,6 +1349,28 @@ static void qemu_disable_default_devices(void)
> }
> }
>
> +static void qemu_early_display_init(void)
> +{
> +#if defined(CONFIG_VNC)
> + if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
> + display_remote++;
> + }
> +#endif
> + if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
> + if (!qemu_display_find_default(&dpy)) {
> + dpy.type = DISPLAY_TYPE_NONE;
> +#if defined(CONFIG_VNC)
> + vnc_parse("localhost:0,to=99,id=default");
> +#endif
> + }
> + }
> + if (dpy.type == DISPLAY_TYPE_DEFAULT) {
> + dpy.type = DISPLAY_TYPE_NONE;
> + }
> +
> + qemu_display_early_init(&dpy);
> +}
So we now have qemu_early_display_init() and qemu_display_early_init() ... ?
That's very confusing, could you maybe come up with a different name for the
new function?
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 04/19] vl: move display early init before default devices
2023-10-25 9:56 ` Thomas Huth
@ 2023-10-25 13:26 ` Marc-André Lureau
2023-10-25 13:38 ` Thomas Huth
0 siblings, 1 reply; 40+ messages in thread
From: Marc-André Lureau @ 2023-10-25 13:26 UTC (permalink / raw)
To: Thomas Huth
Cc: qemu-devel, Michael S. Tsirkin, BALATON Zoltan, qemu-ppc,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
Hi
On Wed, Oct 25, 2023 at 1:56 PM Thomas Huth <thuth@redhat.com> wrote:
>
> On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > The next commit needs to have the display registered itself before
> > creating the default VCs.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > system/vl.c | 41 +++++++++++++++++++++++------------------
> > 1 file changed, 23 insertions(+), 18 deletions(-)
> >
> > diff --git a/system/vl.c b/system/vl.c
> > index 92d29bf521..2cecb3d884 100644
> > --- a/system/vl.c
> > +++ b/system/vl.c
> > @@ -1349,6 +1349,28 @@ static void qemu_disable_default_devices(void)
> > }
> > }
> >
> > +static void qemu_early_display_init(void)
> > +{
> > +#if defined(CONFIG_VNC)
> > + if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
> > + display_remote++;
> > + }
> > +#endif
> > + if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
> > + if (!qemu_display_find_default(&dpy)) {
> > + dpy.type = DISPLAY_TYPE_NONE;
> > +#if defined(CONFIG_VNC)
> > + vnc_parse("localhost:0,to=99,id=default");
> > +#endif
> > + }
> > + }
> > + if (dpy.type == DISPLAY_TYPE_DEFAULT) {
> > + dpy.type = DISPLAY_TYPE_NONE;
> > + }
> > +
> > + qemu_display_early_init(&dpy);
> > +}
>
> So we now have qemu_early_display_init() and qemu_display_early_init() ... ?
> That's very confusing, could you maybe come up with a different name for the
> new function?
Ok, what about qemu_setup_display() ? I'll also simplify a bit the logic there.
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 04/19] vl: move display early init before default devices
2023-10-25 13:26 ` Marc-André Lureau
@ 2023-10-25 13:38 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 13:38 UTC (permalink / raw)
To: Marc-André Lureau
Cc: qemu-devel, Michael S. Tsirkin, BALATON Zoltan, qemu-ppc,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
On 25/10/2023 15.26, Marc-André Lureau wrote:
> Hi
>
> On Wed, Oct 25, 2023 at 1:56 PM Thomas Huth <thuth@redhat.com> wrote:
>>
>> On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
>>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>>
>>> The next commit needs to have the display registered itself before
>>> creating the default VCs.
>>>
>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>> ---
>>> system/vl.c | 41 +++++++++++++++++++++++------------------
>>> 1 file changed, 23 insertions(+), 18 deletions(-)
>>>
>>> diff --git a/system/vl.c b/system/vl.c
>>> index 92d29bf521..2cecb3d884 100644
>>> --- a/system/vl.c
>>> +++ b/system/vl.c
>>> @@ -1349,6 +1349,28 @@ static void qemu_disable_default_devices(void)
>>> }
>>> }
>>>
>>> +static void qemu_early_display_init(void)
>>> +{
>>> +#if defined(CONFIG_VNC)
>>> + if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
>>> + display_remote++;
>>> + }
>>> +#endif
>>> + if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
>>> + if (!qemu_display_find_default(&dpy)) {
>>> + dpy.type = DISPLAY_TYPE_NONE;
>>> +#if defined(CONFIG_VNC)
>>> + vnc_parse("localhost:0,to=99,id=default");
>>> +#endif
>>> + }
>>> + }
>>> + if (dpy.type == DISPLAY_TYPE_DEFAULT) {
>>> + dpy.type = DISPLAY_TYPE_NONE;
>>> + }
>>> +
>>> + qemu_display_early_init(&dpy);
>>> +}
>>
>> So we now have qemu_early_display_init() and qemu_display_early_init() ... ?
>> That's very confusing, could you maybe come up with a different name for the
>> new function?
>
> Ok, what about qemu_setup_display() ? I'll also simplify a bit the logic there.
Fine for me.
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 05/19] ui/console: allow to override the default VC
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (3 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 04/19] vl: move display early init before default devices marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 06/19] ui/vc: console-vc requires PIXMAN marcandre.lureau
` (15 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
If a display is backed by a specialized VC, allow to override the
default "vc:80Cx24C". For that, set the dpy.type just before creating
the default serial/parallel/monitor.
As suggested by Paolo, if the display doesn't implement a VC (get_vc()
returns NULL), use a fallback that will use a muxed console on stdio.
This changes the behaviour of "qemu -display none", to create a muxed
serial/monitor by default.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/console.h | 2 ++
system/vl.c | 27 +++++++++++++++++----------
ui/console.c | 14 ++++++++++++++
3 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index acb61a7f15..a4a49ffc64 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -462,12 +462,14 @@ struct QemuDisplay {
DisplayType type;
void (*early_init)(DisplayOptions *opts);
void (*init)(DisplayState *ds, DisplayOptions *opts);
+ const char *vc;
};
void qemu_display_register(QemuDisplay *ui);
bool qemu_display_find_default(DisplayOptions *opts);
void qemu_display_early_init(DisplayOptions *opts);
void qemu_display_init(DisplayState *ds, DisplayOptions *opts);
+const char *qemu_display_get_vc(DisplayOptions *opts);
void qemu_display_help(void);
/* vnc.c */
diff --git a/system/vl.c b/system/vl.c
index 2cecb3d884..2821b1c790 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1374,6 +1374,7 @@ static void qemu_early_display_init(void)
static void qemu_create_default_devices(void)
{
MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
+ const char *vc = qemu_display_get_vc(&dpy);
if (is_daemonized()) {
/* According to documentation and historically, -nographic redirects
@@ -1392,24 +1393,30 @@ static void qemu_create_default_devices(void)
}
}
- if (nographic) {
- if (default_parallel)
+ if (nographic || (!vc && !is_daemonized() && isatty(STDOUT_FILENO))) {
+ if (default_parallel) {
add_device_config(DEV_PARALLEL, "null");
+ }
if (default_serial && default_monitor) {
add_device_config(DEV_SERIAL, "mon:stdio");
} else {
- if (default_serial)
+ if (default_serial) {
add_device_config(DEV_SERIAL, "stdio");
- if (default_monitor)
+ }
+ if (default_monitor) {
monitor_parse("stdio", "readline", false);
+ }
}
} else {
- if (default_serial)
- add_device_config(DEV_SERIAL, "vc:80Cx24C");
- if (default_parallel)
- add_device_config(DEV_PARALLEL, "vc:80Cx24C");
- if (default_monitor)
- monitor_parse("vc:80Cx24C", "readline", false);
+ if (default_serial) {
+ add_device_config(DEV_SERIAL, vc ?: "null");
+ }
+ if (default_parallel) {
+ add_device_config(DEV_PARALLEL, vc ?: "null");
+ }
+ if (default_monitor && vc) {
+ monitor_parse(vc, "readline", false);
+ }
}
if (default_net) {
diff --git a/ui/console.c b/ui/console.c
index 8ee66d10c5..a758ed62ad 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1675,6 +1675,20 @@ void qemu_display_init(DisplayState *ds, DisplayOptions *opts)
dpys[opts->type]->init(ds, opts);
}
+const char *qemu_display_get_vc(DisplayOptions *opts)
+{
+ assert(opts->type < DISPLAY_TYPE__MAX);
+ if (opts->type == DISPLAY_TYPE_NONE) {
+ return NULL;
+ }
+ assert(dpys[opts->type] != NULL);
+ if (dpys[opts->type]->vc) {
+ return dpys[opts->type]->vc;
+ } else {
+ return "vc:80Cx24C";
+ }
+}
+
void qemu_display_help(void)
{
int idx;
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 06/19] ui/vc: console-vc requires PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (4 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 05/19] ui/console: allow to override the default VC marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 9:59 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 07/19] qmp/hmp: disable screendump if PIXMAN is missing marcandre.lureau
` (14 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Add stubs for the fallback paths.
get_vc() now returns NULL by default if !PIXMAN.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/console-vc-stubs.c | 33 +++++++++++++++++++++++++++++++++
ui/console.c | 3 +++
ui/meson.build | 2 +-
3 files changed, 37 insertions(+), 1 deletion(-)
create mode 100644 ui/console-vc-stubs.c
diff --git a/ui/console-vc-stubs.c b/ui/console-vc-stubs.c
new file mode 100644
index 0000000000..2afc52329f
--- /dev/null
+++ b/ui/console-vc-stubs.c
@@ -0,0 +1,33 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * QEMU VC stubs
+ */
+#include "qemu/osdep.h"
+
+#include "qapi/error.h"
+#include "qemu/error-report.h"
+#include "qemu/option.h"
+#include "chardev/char.h"
+#include "ui/console-priv.h"
+
+void qemu_text_console_select(QemuTextConsole *c)
+{
+}
+
+const char *
+qemu_text_console_get_label(QemuTextConsole *c)
+{
+ return NULL;
+}
+
+void qemu_text_console_update_cursor(void)
+{
+}
+
+void qemu_text_console_handle_keysym(QemuTextConsole *s, int keysym)
+{
+}
+
+void qemu_console_early_init(void)
+{
+}
diff --git a/ui/console.c b/ui/console.c
index a758ed62ad..a72c495b5a 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1685,8 +1685,11 @@ const char *qemu_display_get_vc(DisplayOptions *opts)
if (dpys[opts->type]->vc) {
return dpys[opts->type]->vc;
} else {
+#ifdef CONFIG_PIXMAN
return "vc:80Cx24C";
+#endif
}
+ return NULL;
}
void qemu_display_help(void)
diff --git a/ui/meson.build b/ui/meson.build
index 0a1e8272a3..3085e10a72 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -6,7 +6,6 @@ system_ss.add(png)
system_ss.add(files(
'clipboard.c',
'console.c',
- 'console-vc.c',
'cursor.c',
'input-keymap.c',
'input-legacy.c',
@@ -19,6 +18,7 @@ system_ss.add(files(
'ui-qmp-cmds.c',
'util.c',
))
+system_ss.add(when: pixman, if_true: files('console-vc.c'), if_false: files('console-vc-stubs.c'))
if dbus_display
system_ss.add(files('dbus-module.c'))
endif
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 06/19] ui/vc: console-vc requires PIXMAN
2023-10-23 11:30 ` [PATCH v5 06/19] ui/vc: console-vc requires PIXMAN marcandre.lureau
@ 2023-10-25 9:59 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 9:59 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Add stubs for the fallback paths.
>
> get_vc() now returns NULL by default if !PIXMAN.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/console-vc-stubs.c | 33 +++++++++++++++++++++++++++++++++
> ui/console.c | 3 +++
> ui/meson.build | 2 +-
> 3 files changed, 37 insertions(+), 1 deletion(-)
> create mode 100644 ui/console-vc-stubs.c
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 07/19] qmp/hmp: disable screendump if PIXMAN is missing
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (5 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 06/19] ui/vc: console-vc requires PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 10:04 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 08/19] virtio-gpu: replace PIXMAN for region/rect test marcandre.lureau
` (13 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The command requires color conversion and line-by-line feeding. We could
have a simple fallback for simple formats though.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
qapi/ui.json | 3 ++-
ui/ui-hmp-cmds.c | 2 ++
ui/ui-qmp-cmds.c | 2 ++
hmp-commands.hx | 2 ++
4 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/qapi/ui.json b/qapi/ui.json
index 006616aa77..e74cc3efb6 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -200,7 +200,8 @@
{ 'command': 'screendump',
'data': {'filename': 'str', '*device': 'str', '*head': 'int',
'*format': 'ImageFormat'},
- 'coroutine': true }
+ 'coroutine': true,
+ 'if': 'CONFIG_PIXMAN' }
##
# == Spice
diff --git a/ui/ui-hmp-cmds.c b/ui/ui-hmp-cmds.c
index c671389473..26c8ced1f2 100644
--- a/ui/ui-hmp-cmds.c
+++ b/ui/ui-hmp-cmds.c
@@ -437,6 +437,7 @@ void sendkey_completion(ReadLineState *rs, int nb_args, const char *str)
}
}
+#ifdef CONFIG_PIXMAN
void coroutine_fn
hmp_screendump(Monitor *mon, const QDict *qdict)
{
@@ -458,6 +459,7 @@ hmp_screendump(Monitor *mon, const QDict *qdict)
end:
hmp_handle_error(mon, err);
}
+#endif
void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
{
diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c
index debc07d678..d772e1cb7f 100644
--- a/ui/ui-qmp-cmds.c
+++ b/ui/ui-qmp-cmds.c
@@ -212,6 +212,7 @@ void qmp_client_migrate_info(const char *protocol, const char *hostname,
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "'spice'");
}
+#ifdef CONFIG_PIXMAN
#ifdef CONFIG_PNG
/**
* png_save: Take a screenshot as PNG
@@ -391,3 +392,4 @@ qmp_screendump(const char *filename, const char *device,
}
}
}
+#endif /* CONFIG_PIXMAN */
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 63eac22734..c343d82fbc 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -252,6 +252,7 @@ SRST
ERST
+#ifdef CONFIG_PIXMAN
{
.name = "screendump",
.args_type = "filename:F,format:-fs,device:s?,head:i?",
@@ -267,6 +268,7 @@ SRST
``screendump`` *filename*
Save screen into PPM image *filename*.
ERST
+#endif
{
.name = "logfile",
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 07/19] qmp/hmp: disable screendump if PIXMAN is missing
2023-10-23 11:30 ` [PATCH v5 07/19] qmp/hmp: disable screendump if PIXMAN is missing marcandre.lureau
@ 2023-10-25 10:04 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 10:04 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The command requires color conversion and line-by-line feeding. We could
> have a simple fallback for simple formats though.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> qapi/ui.json | 3 ++-
> ui/ui-hmp-cmds.c | 2 ++
> ui/ui-qmp-cmds.c | 2 ++
> hmp-commands.hx | 2 ++
> 4 files changed, 8 insertions(+), 1 deletion(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 08/19] virtio-gpu: replace PIXMAN for region/rect test
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (6 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 07/19] qmp/hmp: disable screendump if PIXMAN is missing marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg marcandre.lureau
` (12 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Use a simpler implementation for rectangle geometry & intersect, drop
the need for (more complex) PIXMAN functions.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/ui/rect.h | 59 +++++++++++++++++++++++++++++++++++++++++
hw/display/virtio-gpu.c | 30 ++++++++-------------
2 files changed, 70 insertions(+), 19 deletions(-)
create mode 100644 include/ui/rect.h
diff --git a/include/ui/rect.h b/include/ui/rect.h
new file mode 100644
index 0000000000..94898f92d0
--- /dev/null
+++ b/include/ui/rect.h
@@ -0,0 +1,59 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#ifndef QEMU_RECT_H
+#define QEMU_RECT_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef struct QemuRect {
+ int16_t x;
+ int16_t y;
+ uint16_t width;
+ uint16_t height;
+} QemuRect;
+
+static inline void qemu_rect_init(QemuRect *rect,
+ int16_t x, int16_t y,
+ uint16_t width, uint16_t height)
+{
+ rect->x = x;
+ rect->y = x;
+ rect->width = width;
+ rect->height = height;
+}
+
+static inline void qemu_rect_translate(QemuRect *rect,
+ int16_t dx, int16_t dy)
+{
+ rect->x += dx;
+ rect->y += dy;
+}
+
+static inline bool qemu_rect_intersect(const QemuRect *a, const QemuRect *b,
+ QemuRect *res)
+{
+ int16_t x1, x2, y1, y2;
+
+ x1 = MAX(a->x, b->x);
+ y1 = MAX(a->y, b->y);
+ x2 = MIN(a->x + a->width, b->x + b->width);
+ y2 = MIN(a->y + a->height, b->y + b->height);
+
+ if (x1 >= x2 || y1 >= y2) {
+ if (res) {
+ qemu_rect_init(res, 0, 0, 0, 0);
+ }
+
+ return false;
+ }
+
+ if (res) {
+ qemu_rect_init(res, x1, y1, x2 - x1, y2 - y1);
+ }
+
+ return true;
+}
+
+#endif
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 4265316cbb..a8e767245f 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -16,6 +16,7 @@
#include "qemu/iov.h"
#include "sysemu/cpus.h"
#include "ui/console.h"
+#include "ui/rect.h"
#include "trace.h"
#include "sysemu/dma.h"
#include "sysemu/sysemu.h"
@@ -503,7 +504,7 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
struct virtio_gpu_simple_resource *res;
struct virtio_gpu_resource_flush rf;
struct virtio_gpu_scanout *scanout;
- pixman_region16_t flush_region;
+ QemuRect flush_rect;
bool within_bounds = false;
bool update_submitted = false;
int i;
@@ -565,34 +566,25 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
return;
}
- pixman_region_init_rect(&flush_region,
- rf.r.x, rf.r.y, rf.r.width, rf.r.height);
+ qemu_rect_init(&flush_rect, rf.r.x, rf.r.y, rf.r.width, rf.r.height);
for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
- pixman_region16_t region, finalregion;
- pixman_box16_t *extents;
+ QemuRect rect;
if (!(res->scanout_bitmask & (1 << i))) {
continue;
}
scanout = &g->parent_obj.scanout[i];
- pixman_region_init(&finalregion);
- pixman_region_init_rect(®ion, scanout->x, scanout->y,
- scanout->width, scanout->height);
+ qemu_rect_init(&rect, scanout->x, scanout->y,
+ scanout->width, scanout->height);
- pixman_region_intersect(&finalregion, &flush_region, ®ion);
- pixman_region_translate(&finalregion, -scanout->x, -scanout->y);
- extents = pixman_region_extents(&finalregion);
/* work out the area we need to update for each console */
- dpy_gfx_update(g->parent_obj.scanout[i].con,
- extents->x1, extents->y1,
- extents->x2 - extents->x1,
- extents->y2 - extents->y1);
-
- pixman_region_fini(®ion);
- pixman_region_fini(&finalregion);
+ if (qemu_rect_intersect(&flush_rect, &rect, &rect)) {
+ qemu_rect_translate(&rect, -scanout->x, -scanout->y);
+ dpy_gfx_update(g->parent_obj.scanout[i].con,
+ rect.x, rect.y, rect.width, rect.height);
+ }
}
- pixman_region_fini(&flush_region);
}
static void virtio_unref_resource(pixman_image_t *image, void *data)
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (7 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 08/19] virtio-gpu: replace PIXMAN for region/rect test marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 11:48 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 10/19] vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN marcandre.lureau
` (11 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
When we can't draw text, simply show a blank display.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/console.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ui/console.c b/ui/console.c
index a72c495b5a..8e688d3569 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -584,6 +584,7 @@ DisplaySurface *qemu_create_placeholder_surface(int w, int h,
const char *msg)
{
DisplaySurface *surface = qemu_create_displaysurface(w, h);
+#ifdef CONFIG_PIXMAN
pixman_color_t bg = QEMU_PIXMAN_COLOR_BLACK;
pixman_color_t fg = QEMU_PIXMAN_COLOR_GRAY;
pixman_image_t *glyph;
@@ -598,6 +599,7 @@ DisplaySurface *qemu_create_placeholder_surface(int w, int h,
x+i, y, FONT_WIDTH, FONT_HEIGHT);
qemu_pixman_image_unref(glyph);
}
+#endif
surface->flags |= QEMU_PLACEHOLDER_FLAG;
return surface;
}
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg
2023-10-23 11:30 ` [PATCH v5 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg marcandre.lureau
@ 2023-10-25 11:48 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 11:48 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> When we can't draw text, simply show a blank display.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/console.c | 2 ++
> 1 file changed, 2 insertions(+)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 10/19] vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (8 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 09/19] ui/console: when PIXMAN is unavailable, don't draw placeholder msg marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 11/19] ui/gl: opengl doesn't require PIXMAN marcandre.lureau
` (10 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This simply means that 2d drawing updates won't be handled, but 3d
should work.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/display/vhost-user-gpu.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c
index 1150521d9d..709c8a02a1 100644
--- a/hw/display/vhost-user-gpu.c
+++ b/hw/display/vhost-user-gpu.c
@@ -307,6 +307,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUserGpuMsg *msg)
dpy_gl_update(con, m->x, m->y, m->width, m->height);
break;
}
+#ifdef CONFIG_PIXMAN
case VHOST_USER_GPU_UPDATE: {
VhostUserGpuUpdate *m = &msg->payload.update;
@@ -334,6 +335,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUserGpuMsg *msg)
}
break;
}
+#endif
default:
g_warning("unhandled message %d %d", msg->request, msg->size);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 11/19] ui/gl: opengl doesn't require PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (9 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 10/19] vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN marcandre.lureau
` (9 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The QEMU fallback covers the requirements. We still need the flags of
header inclusion with CONFIG_PIXMAN.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/meson.build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/meson.build b/ui/meson.build
index 3085e10a72..7c99613950 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -60,8 +60,8 @@ endif
system_ss.add(opengl)
if opengl.found()
opengl_ss = ss.source_set()
- opengl_ss.add(gbm)
- opengl_ss.add(when: [opengl, pixman],
+ opengl_ss.add(gbm, pixman)
+ opengl_ss.add(when: [opengl],
if_true: files('shader.c', 'console-gl.c', 'egl-helpers.c', 'egl-context.c'))
ui_modules += {'opengl' : opengl_ss}
endif
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (10 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 11/19] ui/gl: opengl doesn't require PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 11:52 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 13/19] ui/spice: SPICE/QXL " marcandre.lureau
` (8 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 6 +++++-
ui/meson.build | 4 ++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/meson.build b/meson.build
index 395d7155f6..c4dd9e01ea 100644
--- a/meson.build
+++ b/meson.build
@@ -1536,7 +1536,11 @@ endif
vnc = not_found
jpeg = not_found
sasl = not_found
-if get_option('vnc').allowed() and have_system
+if get_option('vnc') \
+ .disable_auto_if(not have_system) \
+ .require(pixman.found(),
+ error_message: 'cannot enable VNC if pixman is not available') \
+ .allowed()
vnc = declare_dependency() # dummy dependency
jpeg = dependency('libjpeg', required: get_option('vnc_jpeg'),
method: 'pkg-config')
diff --git a/ui/meson.build b/ui/meson.build
index 7c99613950..b3525ef064 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -46,8 +46,8 @@ vnc_ss.add(files(
))
vnc_ss.add(zlib, jpeg, gnutls)
vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
-system_ss.add_all(when: vnc, if_true: vnc_ss)
-system_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
+system_ss.add_all(when: [vnc, pixman], if_true: vnc_ss)
+system_ss.add(when: [vnc, pixman], if_false: files('vnc-stubs.c'))
ui_modules = {}
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN
2023-10-23 11:30 ` [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN marcandre.lureau
@ 2023-10-25 11:52 ` Thomas Huth
2023-10-25 18:44 ` Marc-André Lureau
0 siblings, 1 reply; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 11:52 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> meson.build | 6 +++++-
> ui/meson.build | 4 ++--
> 2 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 395d7155f6..c4dd9e01ea 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1536,7 +1536,11 @@ endif
> vnc = not_found
> jpeg = not_found
> sasl = not_found
> -if get_option('vnc').allowed() and have_system
> +if get_option('vnc') \
> + .disable_auto_if(not have_system) \
> + .require(pixman.found(),
> + error_message: 'cannot enable VNC if pixman is not available') \
> + .allowed()
> vnc = declare_dependency() # dummy dependency
> jpeg = dependency('libjpeg', required: get_option('vnc_jpeg'),
> method: 'pkg-config')
> diff --git a/ui/meson.build b/ui/meson.build
> index 7c99613950..b3525ef064 100644
> --- a/ui/meson.build
> +++ b/ui/meson.build
> @@ -46,8 +46,8 @@ vnc_ss.add(files(
> ))
> vnc_ss.add(zlib, jpeg, gnutls)
> vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
> -system_ss.add_all(when: vnc, if_true: vnc_ss)
> -system_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
> +system_ss.add_all(when: [vnc, pixman], if_true: vnc_ss)
> +system_ss.add(when: [vnc, pixman], if_false: files('vnc-stubs.c'))
Is the change to ui/meson.build required at all? ... if I get the first hunk
right, if "vnc" is enabled, that means that pixman has been found, too?
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN
2023-10-25 11:52 ` Thomas Huth
@ 2023-10-25 18:44 ` Marc-André Lureau
0 siblings, 0 replies; 40+ messages in thread
From: Marc-André Lureau @ 2023-10-25 18:44 UTC (permalink / raw)
To: Thomas Huth
Cc: qemu-devel, Michael S. Tsirkin, BALATON Zoltan, qemu-ppc,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
Hi
On Wed, Oct 25, 2023 at 3:53 PM Thomas Huth <thuth@redhat.com> wrote:
>
> On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > meson.build | 6 +++++-
> > ui/meson.build | 4 ++--
> > 2 files changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/meson.build b/meson.build
> > index 395d7155f6..c4dd9e01ea 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -1536,7 +1536,11 @@ endif
> > vnc = not_found
> > jpeg = not_found
> > sasl = not_found
> > -if get_option('vnc').allowed() and have_system
> > +if get_option('vnc') \
> > + .disable_auto_if(not have_system) \
> > + .require(pixman.found(),
> > + error_message: 'cannot enable VNC if pixman is not available') \
> > + .allowed()
> > vnc = declare_dependency() # dummy dependency
> > jpeg = dependency('libjpeg', required: get_option('vnc_jpeg'),
> > method: 'pkg-config')
> > diff --git a/ui/meson.build b/ui/meson.build
> > index 7c99613950..b3525ef064 100644
> > --- a/ui/meson.build
> > +++ b/ui/meson.build
> > @@ -46,8 +46,8 @@ vnc_ss.add(files(
> > ))
> > vnc_ss.add(zlib, jpeg, gnutls)
> > vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
> > -system_ss.add_all(when: vnc, if_true: vnc_ss)
> > -system_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
> > +system_ss.add_all(when: [vnc, pixman], if_true: vnc_ss)
> > +system_ss.add(when: [vnc, pixman], if_false: files('vnc-stubs.c'))
>
> Is the change to ui/meson.build required at all? ... if I get the first hunk
> right, if "vnc" is enabled, that means that pixman has been found, too?
Well, this is a bit more explicit, to get the dependencies correct
(flags and such) without relying on other system_ss units
dependencies.. I'd keep it.
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 13/19] ui/spice: SPICE/QXL requires PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (11 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 12/19] ui/vnc: VNC requires PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 11:56 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 14/19] ui/gtk: -display gtk " marcandre.lureau
` (7 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 6 +++++-
hw/display/Kconfig | 2 +-
ui/meson.build | 10 +++++-----
3 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index c4dd9e01ea..3d6e41d1fb 100644
--- a/meson.build
+++ b/meson.build
@@ -1015,7 +1015,11 @@ if not get_option('spice_protocol').auto() or have_system
method: 'pkg-config')
endif
spice = not_found
-if not get_option('spice').auto() or have_system
+if get_option('spice') \
+ .disable_auto_if(not have_system) \
+ .require(pixman.found(),
+ error_message: 'cannot enable SPICE if pixman is not available') \
+ .allowed()
spice = dependency('spice-server', version: '>=0.14.0',
required: get_option('spice'),
method: 'pkg-config')
diff --git a/hw/display/Kconfig b/hw/display/Kconfig
index 7b3da68d1c..4d8b0cec40 100644
--- a/hw/display/Kconfig
+++ b/hw/display/Kconfig
@@ -93,7 +93,7 @@ config VGA
config QXL
bool
- depends on SPICE && PCI
+ depends on SPICE && PCI && PIXMAN
select VGA
config VIRTIO_GPU
diff --git a/ui/meson.build b/ui/meson.build
index b3525ef064..7f806a6d48 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -141,12 +141,12 @@ if spice.found()
'spice-display.c'
))
ui_modules += {'spice-core' : spice_core_ss}
-endif
-if spice.found() and gio.found()
- spice_ss = ss.source_set()
- spice_ss.add(spice, gio, pixman, files('spice-app.c'))
- ui_modules += {'spice-app': spice_ss}
+ if gio.found()
+ spice_ss = ss.source_set()
+ spice_ss.add(spice, gio, pixman, files('spice-app.c'))
+ ui_modules += {'spice-app': spice_ss}
+ endif
endif
keymaps = [
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 13/19] ui/spice: SPICE/QXL requires PIXMAN
2023-10-23 11:30 ` [PATCH v5 13/19] ui/spice: SPICE/QXL " marcandre.lureau
@ 2023-10-25 11:56 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 11:56 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> meson.build | 6 +++++-
> hw/display/Kconfig | 2 +-
> ui/meson.build | 10 +++++-----
> 3 files changed, 11 insertions(+), 7 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 14/19] ui/gtk: -display gtk requires PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (12 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 13/19] ui/spice: SPICE/QXL " marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 11:57 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 15/19] ui/dbus: do not require PIXMAN marcandre.lureau
` (6 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 3d6e41d1fb..dbc7af091c 100644
--- a/meson.build
+++ b/meson.build
@@ -1507,7 +1507,11 @@ gtkx11 = not_found
vte = not_found
have_gtk_clipboard = get_option('gtk_clipboard').enabled()
-if not get_option('gtk').auto() or have_system
+if get_option('gtk') \
+ .disable_auto_if(not have_system) \
+ .require(pixman.found(),
+ error_message: 'cannot enable GTK if pixman is not available') \
+ .allowed()
gtk = dependency('gtk+-3.0', version: '>=3.22.0',
method: 'pkg-config',
required: get_option('gtk'))
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 14/19] ui/gtk: -display gtk requires PIXMAN
2023-10-23 11:30 ` [PATCH v5 14/19] ui/gtk: -display gtk " marcandre.lureau
@ 2023-10-25 11:57 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 11:57 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> meson.build | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/meson.build b/meson.build
> index 3d6e41d1fb..dbc7af091c 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1507,7 +1507,11 @@ gtkx11 = not_found
> vte = not_found
> have_gtk_clipboard = get_option('gtk_clipboard').enabled()
>
> -if not get_option('gtk').auto() or have_system
> +if get_option('gtk') \
> + .disable_auto_if(not have_system) \
> + .require(pixman.found(),
> + error_message: 'cannot enable GTK if pixman is not available') \
> + .allowed()
> gtk = dependency('gtk+-3.0', version: '>=3.22.0',
> method: 'pkg-config',
> required: get_option('gtk'))
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 15/19] ui/dbus: do not require PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (13 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 14/19] ui/gtk: -display gtk " marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN marcandre.lureau
` (5 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Implement a fallback path for region 2D update.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/dbus-listener.c | 90 ++++++++++++++++++++++++++++++++--------------
ui/meson.build | 4 +--
2 files changed, 65 insertions(+), 29 deletions(-)
diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c
index 36548a7f52..18f556aa73 100644
--- a/ui/dbus-listener.c
+++ b/ui/dbus-listener.c
@@ -26,9 +26,6 @@
#include "qapi/error.h"
#include "sysemu/sysemu.h"
#include "dbus.h"
-#ifdef CONFIG_OPENGL
-#include <pixman.h>
-#endif
#ifdef G_OS_UNIX
#include <gio/gunixfdlist.h>
#endif
@@ -41,6 +38,7 @@
#include "ui/shader.h"
#include "ui/egl-helpers.h"
#include "ui/egl-context.h"
+#include "ui/qemu-pixman.h"
#endif
#include "trace.h"
@@ -62,9 +60,11 @@ struct _DBusDisplayListener {
QemuDBusDisplay1Listener *proxy;
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_PIXMAN
/* Keep track of the damage region */
pixman_region32_t gl_damage;
+#else
+ int gl_damage;
#endif
DisplayChangeListener dcl;
@@ -545,6 +545,7 @@ static void dbus_gl_refresh(DisplayChangeListener *dcl)
return;
}
+#ifdef CONFIG_PIXMAN
int n_rects = pixman_region32_n_rects(&ddl->gl_damage);
for (int i = 0; i < n_rects; i++) {
@@ -555,6 +556,13 @@ static void dbus_gl_refresh(DisplayChangeListener *dcl)
box->x2 - box->x1, box->y2 - box->y1);
}
pixman_region32_clear(&ddl->gl_damage);
+#else
+ if (ddl->gl_damage) {
+ dbus_call_update_gl(dcl, 0, 0,
+ surface_width(ddl->ds), surface_height(ddl->ds));
+ ddl->gl_damage = 0;
+ }
+#endif
}
#endif /* OPENGL */
@@ -569,20 +577,64 @@ static void dbus_gl_gfx_update(DisplayChangeListener *dcl,
{
DBusDisplayListener *ddl = container_of(dcl, DBusDisplayListener, dcl);
+#ifdef CONFIG_PIXMAN
pixman_region32_t rect_region;
pixman_region32_init_rect(&rect_region, x, y, w, h);
pixman_region32_union(&ddl->gl_damage, &ddl->gl_damage, &rect_region);
pixman_region32_fini(&rect_region);
+#else
+ ddl->gl_damage++;
+#endif
}
#endif
+static void dbus_gfx_update_sub(DBusDisplayListener *ddl,
+ int x, int y, int w, int h)
+{
+ pixman_image_t *img;
+ size_t stride;
+ GVariant *v_data;
+
+ /* make a copy, since gvariant only handles linear data */
+ stride = w * DIV_ROUND_UP(PIXMAN_FORMAT_BPP(surface_format(ddl->ds)), 8);
+ img = pixman_image_create_bits(surface_format(ddl->ds),
+ w, h, NULL, stride);
+#ifdef CONFIG_PIXMAN
+ pixman_image_composite(PIXMAN_OP_SRC, ddl->ds->image, NULL, img,
+ x, y, 0, 0, 0, 0, w, h);
+#else
+ {
+ uint8_t *src = (uint8_t *)pixman_image_get_data(ddl->ds->image);
+ uint8_t *dst = (uint8_t *)pixman_image_get_data(img);
+ int bp = PIXMAN_FORMAT_BPP(surface_format(ddl->ds)) / 8;
+ int hh;
+
+ for (hh = 0; hh < h; hh++) {
+ memcpy(&dst[stride * hh],
+ &src[surface_stride(ddl->ds) * (hh + y) + x * bp],
+ stride);
+ }
+ }
+#endif
+ v_data = g_variant_new_from_data(
+ G_VARIANT_TYPE("ay"),
+ pixman_image_get_data(img),
+ pixman_image_get_stride(img) * h,
+ TRUE,
+ (GDestroyNotify)pixman_image_unref,
+ img);
+ qemu_dbus_display1_listener_call_update(ddl->proxy,
+ x, y, w, h, pixman_image_get_stride(img), pixman_image_get_format(img),
+ v_data,
+ G_DBUS_CALL_FLAGS_NONE,
+ DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
+}
+
static void dbus_gfx_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
{
DBusDisplayListener *ddl = container_of(dcl, DBusDisplayListener, dcl);
- pixman_image_t *img;
GVariant *v_data;
- size_t stride;
assert(ddl->ds);
@@ -619,25 +671,7 @@ static void dbus_gfx_update(DisplayChangeListener *dcl,
return;
}
- /* make a copy, since gvariant only handles linear data */
- stride = w * DIV_ROUND_UP(PIXMAN_FORMAT_BPP(surface_format(ddl->ds)), 8);
- img = pixman_image_create_bits(surface_format(ddl->ds),
- w, h, NULL, stride);
- pixman_image_composite(PIXMAN_OP_SRC, ddl->ds->image, NULL, img,
- x, y, 0, 0, 0, 0, w, h);
-
- v_data = g_variant_new_from_data(
- G_VARIANT_TYPE("ay"),
- pixman_image_get_data(img),
- pixman_image_get_stride(img) * h,
- TRUE,
- (GDestroyNotify)pixman_image_unref,
- img);
- qemu_dbus_display1_listener_call_update(ddl->proxy,
- x, y, w, h, pixman_image_get_stride(img), pixman_image_get_format(img),
- v_data,
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
+ dbus_gfx_update_sub(ddl, x, y, w, h);
}
#ifdef CONFIG_OPENGL
@@ -751,8 +785,10 @@ dbus_display_listener_dispose(GObject *object)
g_clear_object(&ddl->map_proxy);
g_clear_object(&ddl->d3d11_proxy);
g_clear_pointer(&ddl->peer_process, CloseHandle);
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_PIXMAN
pixman_region32_fini(&ddl->gl_damage);
+#endif
+#ifdef CONFIG_OPENGL
egl_fb_destroy(&ddl->fb);
#endif
#endif
@@ -787,7 +823,7 @@ dbus_display_listener_class_init(DBusDisplayListenerClass *klass)
static void
dbus_display_listener_init(DBusDisplayListener *ddl)
{
-#ifdef CONFIG_OPENGL
+#ifdef CONFIG_PIXMAN
pixman_region32_init(&ddl->gl_damage);
#endif
}
diff --git a/ui/meson.build b/ui/meson.build
index 7f806a6d48..bfa06b8c01 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -93,7 +93,7 @@ if dbus_display
'--generate-c-code', '@BASENAME@'])
dbus_display1_lib = static_library('dbus-display1', dbus_display1, dependencies: gio)
dbus_display1_dep = declare_dependency(link_with: dbus_display1_lib, include_directories: include_directories('.'))
- dbus_ss.add(when: [gio, pixman, dbus_display1_dep],
+ dbus_ss.add(when: [gio, dbus_display1_dep],
if_true: [files(
'dbus-chardev.c',
'dbus-clipboard.c',
@@ -101,7 +101,7 @@ if dbus_display
'dbus-error.c',
'dbus-listener.c',
'dbus.c',
- ), opengl, gbm])
+ ), opengl, gbm, pixman])
ui_modules += {'dbus' : dbus_ss}
endif
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (14 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 15/19] ui/dbus: do not require PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-25 12:02 ` Thomas Huth
2023-10-23 11:30 ` [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN marcandre.lureau
` (4 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The Display Port has some strong PIXMAN dependency.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/arm/Kconfig | 3 ++-
hw/display/Kconfig | 5 +++++
hw/display/meson.build | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 7e68348440..57178bc299 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -451,7 +451,7 @@ config STM32F405_SOC
config XLNX_ZYNQMP_ARM
bool
default y
- depends on TCG && AARCH64
+ depends on TCG && AARCH64 && PIXMAN
select AHCI
select ARM_GIC
select CADENCE
@@ -463,6 +463,7 @@ config XLNX_ZYNQMP_ARM
select XILINX_AXI
select XILINX_SPIPS
select XLNX_CSU_DMA
+ select XLNX_DISPLAYPORT
select XLNX_ZYNQMP
select XLNX_ZDMA
select USB_DWC3
diff --git a/hw/display/Kconfig b/hw/display/Kconfig
index 4d8b0cec40..1aafe1923d 100644
--- a/hw/display/Kconfig
+++ b/hw/display/Kconfig
@@ -134,3 +134,8 @@ config MACFB
bool
select FRAMEBUFFER
depends on NUBUS
+
+config XLNX_DISPLAYPORT
+ bool
+ # defaults to "N", enabled by specific boards
+ depends on PIXMAN
diff --git a/hw/display/meson.build b/hw/display/meson.build
index 2b64fd9f9d..9c06aaee20 100644
--- a/hw/display/meson.build
+++ b/hw/display/meson.build
@@ -58,7 +58,7 @@ if config_all_devices.has_key('CONFIG_QXL')
endif
system_ss.add(when: 'CONFIG_DPCD', if_true: files('dpcd.c'))
-system_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx_dp.c'))
+system_ss.add(when: 'CONFIG_XLNX_DISPLAYPORT', if_true: files('xlnx_dp.c'))
system_ss.add(when: 'CONFIG_ARTIST', if_true: files('artist.c'))
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN
2023-10-23 11:30 ` [PATCH v5 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN marcandre.lureau
@ 2023-10-25 12:02 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 12:02 UTC (permalink / raw)
To: marcandre.lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 23/10/2023 13.30, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The Display Port has some strong PIXMAN dependency.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/arm/Kconfig | 3 ++-
> hw/display/Kconfig | 5 +++++
> hw/display/meson.build | 2 +-
> 3 files changed, 8 insertions(+), 2 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (15 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 16/19] arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 13:14 ` BALATON Zoltan
2023-10-23 11:30 ` [PATCH v5 18/19] hw/display: make ATI_VGA depend on PIXMAN marcandre.lureau
` (3 subsequent siblings)
20 siblings, 1 reply; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Drop the "x-pixman" property and use fallback path in such case.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/display/sm501.c | 59 +++++++++++++++++++++++++++++++++-------------
1 file changed, 42 insertions(+), 17 deletions(-)
diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index 0eecd00701..282671d1b3 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -438,6 +438,12 @@
#define SM501_HWC_WIDTH 64
#define SM501_HWC_HEIGHT 64
+#ifdef CONFIG_PIXMAN
+#define DEFAULT_X_PIXMAN 7
+#else
+#define DEFAULT_X_PIXMAN 0
+#endif
+
/* SM501 local memory size taken from "linux/drivers/mfd/sm501.c" */
static const uint32_t sm501_mem_local_size[] = {
[0] = 4 * MiB,
@@ -730,7 +736,6 @@ static void sm501_2d_operation(SM501State *s)
switch (cmd) {
case 0: /* BitBlt */
{
- static uint32_t tmp_buf[16384];
unsigned int src_x = (s->twoD_source >> 16) & 0x01FFF;
unsigned int src_y = s->twoD_source & 0xFFFF;
uint32_t src_base = s->twoD_source_base & 0x03FFFFFF;
@@ -828,9 +833,11 @@ static void sm501_2d_operation(SM501State *s)
de = db + (width + (height - 1) * dst_pitch) * bypp;
overlap = (db < se && sb < de);
}
+#ifdef CONFIG_PIXMAN
if (overlap && (s->use_pixman & BIT(2))) {
/* pixman can't do reverse blit: copy via temporary */
int tmp_stride = DIV_ROUND_UP(width * bypp, sizeof(uint32_t));
+ static uint32_t tmp_buf[16384];
uint32_t *tmp = tmp_buf;
if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_buf)) {
@@ -860,9 +867,12 @@ static void sm501_2d_operation(SM501State *s)
dst_pitch * bypp / sizeof(uint32_t),
8 * bypp, 8 * bypp, src_x, src_y,
dst_x, dst_y, width, height);
- } else {
+ } else
+#else
+ {
fallback = true;
}
+#endif
if (fallback) {
uint8_t *sp = s->local_mem + src_base;
uint8_t *d = s->local_mem + dst_base;
@@ -894,20 +904,23 @@ static void sm501_2d_operation(SM501State *s)
color = cpu_to_le16(color);
}
+#ifdef CONFIG_PIXMAN
if (!(s->use_pixman & BIT(0)) || (width == 1 && height == 1) ||
!pixman_fill((uint32_t *)&s->local_mem[dst_base],
dst_pitch * bypp / sizeof(uint32_t), 8 * bypp,
- dst_x, dst_y, width, height, color)) {
- /* fallback when pixman failed or we don't want to call it */
- uint8_t *d = s->local_mem + dst_base;
- unsigned int x, y, i;
- for (y = 0; y < height; y++) {
- i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
- for (x = 0; x < width; x++, i += bypp) {
- stn_he_p(&d[i], bypp, color);
+ dst_x, dst_y, width, height, color))
+#endif
+ {
+ /* fallback when pixman failed or we don't want to call it */
+ uint8_t *d = s->local_mem + dst_base;
+ unsigned int x, y, i;
+ for (y = 0; y < height; y++) {
+ i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
+ for (x = 0; x < width; x++, i += bypp) {
+ stn_he_p(&d[i], bypp, color);
+ }
}
}
- }
break;
}
default:
@@ -1875,9 +1888,15 @@ static void sm501_reset(SM501State *s)
s->twoD_wrap = 0;
}
-static void sm501_init(SM501State *s, DeviceState *dev,
- uint32_t local_mem_bytes)
+static bool sm501_init(SM501State *s, DeviceState *dev,
+ uint32_t local_mem_bytes, Error **errp)
{
+#ifndef CONFIG_PIXMAN
+ if (s->use_pixman != 0) {
+ error_setg(&error_warn, "x-pixman != 0, not effective without PIXMAN");
+ }
+#endif
+
s->local_mem_size_index = get_local_mem_size_index(local_mem_bytes);
/* local memory */
@@ -1916,6 +1935,7 @@ static void sm501_init(SM501State *s, DeviceState *dev,
/* create qemu graphic console */
s->con = graphic_console_init(dev, 0, &sm501_ops, s);
+ return true;
}
static const VMStateDescription vmstate_sm501_state = {
@@ -2014,7 +2034,9 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
MemoryRegion *mr;
- sm501_init(&s->state, dev, s->vram_size);
+ if (!sm501_init(&s->state, dev, s->vram_size, errp)) {
+ return;
+ }
if (get_local_mem_size(&s->state) != s->vram_size) {
error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
get_local_mem_size(&s->state));
@@ -2038,7 +2060,8 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
static Property sm501_sysbus_properties[] = {
DEFINE_PROP_UINT32("vram-size", SM501SysBusState, vram_size, 0),
- DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, 7),
+ /* this a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
+ DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, DEFAULT_X_PIXMAN),
DEFINE_PROP_END_OF_LIST(),
};
@@ -2112,7 +2135,9 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
{
SM501PCIState *s = PCI_SM501(dev);
- sm501_init(&s->state, DEVICE(dev), s->vram_size);
+ if (!sm501_init(&s->state, DEVICE(dev), s->vram_size, errp)) {
+ return;
+ }
if (get_local_mem_size(&s->state) != s->vram_size) {
error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
get_local_mem_size(&s->state));
@@ -2126,7 +2151,7 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
static Property sm501_pci_properties[] = {
DEFINE_PROP_UINT32("vram-size", SM501PCIState, vram_size, 64 * MiB),
- DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, 7),
+ DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, DEFAULT_X_PIXMAN),
DEFINE_PROP_END_OF_LIST(),
};
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN
2023-10-23 11:30 ` [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN marcandre.lureau
@ 2023-10-23 13:14 ` BALATON Zoltan
2023-10-23 13:21 ` Marc-André Lureau
0 siblings, 1 reply; 40+ messages in thread
From: BALATON Zoltan @ 2023-10-23 13:14 UTC (permalink / raw)
To: Marc-André Lureau
Cc: qemu-devel, Michael S. Tsirkin, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
[-- Attachment #1: Type: text/plain, Size: 7044 bytes --]
On Mon, 23 Oct 2023, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Drop the "x-pixman" property and use fallback path in such case.
Patch diverged from commit message, the x-pixman property is not dropped
just the default changed. Needs updated commit message to reflect that.
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/display/sm501.c | 59 +++++++++++++++++++++++++++++++++-------------
> 1 file changed, 42 insertions(+), 17 deletions(-)
>
> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> index 0eecd00701..282671d1b3 100644
> --- a/hw/display/sm501.c
> +++ b/hw/display/sm501.c
> @@ -438,6 +438,12 @@
> #define SM501_HWC_WIDTH 64
> #define SM501_HWC_HEIGHT 64
>
> +#ifdef CONFIG_PIXMAN
> +#define DEFAULT_X_PIXMAN 7
> +#else
> +#define DEFAULT_X_PIXMAN 0
> +#endif
> +
> /* SM501 local memory size taken from "linux/drivers/mfd/sm501.c" */
> static const uint32_t sm501_mem_local_size[] = {
> [0] = 4 * MiB,
> @@ -730,7 +736,6 @@ static void sm501_2d_operation(SM501State *s)
> switch (cmd) {
> case 0: /* BitBlt */
> {
> - static uint32_t tmp_buf[16384];
> unsigned int src_x = (s->twoD_source >> 16) & 0x01FFF;
> unsigned int src_y = s->twoD_source & 0xFFFF;
> uint32_t src_base = s->twoD_source_base & 0x03FFFFFF;
> @@ -828,9 +833,11 @@ static void sm501_2d_operation(SM501State *s)
> de = db + (width + (height - 1) * dst_pitch) * bypp;
> overlap = (db < se && sb < de);
> }
> +#ifdef CONFIG_PIXMAN
> if (overlap && (s->use_pixman & BIT(2))) {
> /* pixman can't do reverse blit: copy via temporary */
> int tmp_stride = DIV_ROUND_UP(width * bypp, sizeof(uint32_t));
> + static uint32_t tmp_buf[16384];
> uint32_t *tmp = tmp_buf;
>
> if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_buf)) {
> @@ -860,9 +867,12 @@ static void sm501_2d_operation(SM501State *s)
> dst_pitch * bypp / sizeof(uint32_t),
> 8 * bypp, 8 * bypp, src_x, src_y,
> dst_x, dst_y, width, height);
> - } else {
> + } else
> +#else
> + {
> fallback = true;
> }
> +#endif
> if (fallback) {
> uint8_t *sp = s->local_mem + src_base;
> uint8_t *d = s->local_mem + dst_base;
> @@ -894,20 +904,23 @@ static void sm501_2d_operation(SM501State *s)
> color = cpu_to_le16(color);
> }
>
> +#ifdef CONFIG_PIXMAN
> if (!(s->use_pixman & BIT(0)) || (width == 1 && height == 1) ||
> !pixman_fill((uint32_t *)&s->local_mem[dst_base],
> dst_pitch * bypp / sizeof(uint32_t), 8 * bypp,
> - dst_x, dst_y, width, height, color)) {
> - /* fallback when pixman failed or we don't want to call it */
> - uint8_t *d = s->local_mem + dst_base;
> - unsigned int x, y, i;
> - for (y = 0; y < height; y++) {
> - i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
> - for (x = 0; x < width; x++, i += bypp) {
> - stn_he_p(&d[i], bypp, color);
> + dst_x, dst_y, width, height, color))
> +#endif
> + {
> + /* fallback when pixman failed or we don't want to call it */
> + uint8_t *d = s->local_mem + dst_base;
> + unsigned int x, y, i;
> + for (y = 0; y < height; y++) {
> + i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
> + for (x = 0; x < width; x++, i += bypp) {
> + stn_he_p(&d[i], bypp, color);
> + }
> }
> }
> - }
> break;
> }
> default:
> @@ -1875,9 +1888,15 @@ static void sm501_reset(SM501State *s)
> s->twoD_wrap = 0;
> }
>
> -static void sm501_init(SM501State *s, DeviceState *dev,
> - uint32_t local_mem_bytes)
> +static bool sm501_init(SM501State *s, DeviceState *dev,
> + uint32_t local_mem_bytes, Error **errp)
> {
> +#ifndef CONFIG_PIXMAN
> + if (s->use_pixman != 0) {
> + error_setg(&error_warn, "x-pixman != 0, not effective without PIXMAN");
I think this should just be warn_report not an error
> + }
> +#endif
> +
> s->local_mem_size_index = get_local_mem_size_index(local_mem_bytes);
>
> /* local memory */
> @@ -1916,6 +1935,7 @@ static void sm501_init(SM501State *s, DeviceState *dev,
>
> /* create qemu graphic console */
> s->con = graphic_console_init(dev, 0, &sm501_ops, s);
> + return true;
and no need to add errp as we never return false so it won't be printed
anyway.
> }
>
> static const VMStateDescription vmstate_sm501_state = {
> @@ -2014,7 +2034,9 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
> SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
> MemoryRegion *mr;
>
> - sm501_init(&s->state, dev, s->vram_size);
> + if (!sm501_init(&s->state, dev, s->vram_size, errp)) {
> + return;
> + }
This could be left alone too, just issuing a warning above should be
enough, no other cahnges are needed.
Regards,
BALATON Zoltan
> if (get_local_mem_size(&s->state) != s->vram_size) {
> error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
> get_local_mem_size(&s->state));
> @@ -2038,7 +2060,8 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
>
> static Property sm501_sysbus_properties[] = {
> DEFINE_PROP_UINT32("vram-size", SM501SysBusState, vram_size, 0),
> - DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, 7),
> + /* this a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
> + DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, DEFAULT_X_PIXMAN),
> DEFINE_PROP_END_OF_LIST(),
> };
>
> @@ -2112,7 +2135,9 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
> {
> SM501PCIState *s = PCI_SM501(dev);
>
> - sm501_init(&s->state, DEVICE(dev), s->vram_size);
> + if (!sm501_init(&s->state, DEVICE(dev), s->vram_size, errp)) {
> + return;
> + }
> if (get_local_mem_size(&s->state) != s->vram_size) {
> error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
> get_local_mem_size(&s->state));
> @@ -2126,7 +2151,7 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
>
> static Property sm501_pci_properties[] = {
> DEFINE_PROP_UINT32("vram-size", SM501PCIState, vram_size, 64 * MiB),
> - DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, 7),
> + DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, DEFAULT_X_PIXMAN),
> DEFINE_PROP_END_OF_LIST(),
> };
>
>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN
2023-10-23 13:14 ` BALATON Zoltan
@ 2023-10-23 13:21 ` Marc-André Lureau
0 siblings, 0 replies; 40+ messages in thread
From: Marc-André Lureau @ 2023-10-23 13:21 UTC (permalink / raw)
To: BALATON Zoltan
Cc: qemu-devel, Michael S. Tsirkin, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
Hi
On Mon, Oct 23, 2023 at 5:15 PM BALATON Zoltan <balaton@eik.bme.hu> wrote:
>
> On Mon, 23 Oct 2023, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Drop the "x-pixman" property and use fallback path in such case.
>
> Patch diverged from commit message, the x-pixman property is not dropped
> just the default changed. Needs updated commit message to reflect that.
>
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > hw/display/sm501.c | 59 +++++++++++++++++++++++++++++++++-------------
> > 1 file changed, 42 insertions(+), 17 deletions(-)
> >
> > diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> > index 0eecd00701..282671d1b3 100644
> > --- a/hw/display/sm501.c
> > +++ b/hw/display/sm501.c
> > @@ -438,6 +438,12 @@
> > #define SM501_HWC_WIDTH 64
> > #define SM501_HWC_HEIGHT 64
> >
> > +#ifdef CONFIG_PIXMAN
> > +#define DEFAULT_X_PIXMAN 7
> > +#else
> > +#define DEFAULT_X_PIXMAN 0
> > +#endif
> > +
> > /* SM501 local memory size taken from "linux/drivers/mfd/sm501.c" */
> > static const uint32_t sm501_mem_local_size[] = {
> > [0] = 4 * MiB,
> > @@ -730,7 +736,6 @@ static void sm501_2d_operation(SM501State *s)
> > switch (cmd) {
> > case 0: /* BitBlt */
> > {
> > - static uint32_t tmp_buf[16384];
> > unsigned int src_x = (s->twoD_source >> 16) & 0x01FFF;
> > unsigned int src_y = s->twoD_source & 0xFFFF;
> > uint32_t src_base = s->twoD_source_base & 0x03FFFFFF;
> > @@ -828,9 +833,11 @@ static void sm501_2d_operation(SM501State *s)
> > de = db + (width + (height - 1) * dst_pitch) * bypp;
> > overlap = (db < se && sb < de);
> > }
> > +#ifdef CONFIG_PIXMAN
> > if (overlap && (s->use_pixman & BIT(2))) {
> > /* pixman can't do reverse blit: copy via temporary */
> > int tmp_stride = DIV_ROUND_UP(width * bypp, sizeof(uint32_t));
> > + static uint32_t tmp_buf[16384];
> > uint32_t *tmp = tmp_buf;
> >
> > if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_buf)) {
> > @@ -860,9 +867,12 @@ static void sm501_2d_operation(SM501State *s)
> > dst_pitch * bypp / sizeof(uint32_t),
> > 8 * bypp, 8 * bypp, src_x, src_y,
> > dst_x, dst_y, width, height);
> > - } else {
> > + } else
> > +#else
> > + {
> > fallback = true;
> > }
> > +#endif
> > if (fallback) {
> > uint8_t *sp = s->local_mem + src_base;
> > uint8_t *d = s->local_mem + dst_base;
> > @@ -894,20 +904,23 @@ static void sm501_2d_operation(SM501State *s)
> > color = cpu_to_le16(color);
> > }
> >
> > +#ifdef CONFIG_PIXMAN
> > if (!(s->use_pixman & BIT(0)) || (width == 1 && height == 1) ||
> > !pixman_fill((uint32_t *)&s->local_mem[dst_base],
> > dst_pitch * bypp / sizeof(uint32_t), 8 * bypp,
> > - dst_x, dst_y, width, height, color)) {
> > - /* fallback when pixman failed or we don't want to call it */
> > - uint8_t *d = s->local_mem + dst_base;
> > - unsigned int x, y, i;
> > - for (y = 0; y < height; y++) {
> > - i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
> > - for (x = 0; x < width; x++, i += bypp) {
> > - stn_he_p(&d[i], bypp, color);
> > + dst_x, dst_y, width, height, color))
> > +#endif
> > + {
> > + /* fallback when pixman failed or we don't want to call it */
> > + uint8_t *d = s->local_mem + dst_base;
> > + unsigned int x, y, i;
> > + for (y = 0; y < height; y++) {
> > + i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
> > + for (x = 0; x < width; x++, i += bypp) {
> > + stn_he_p(&d[i], bypp, color);
> > + }
> > }
> > }
> > - }
> > break;
> > }
> > default:
> > @@ -1875,9 +1888,15 @@ static void sm501_reset(SM501State *s)
> > s->twoD_wrap = 0;
> > }
> >
> > -static void sm501_init(SM501State *s, DeviceState *dev,
> > - uint32_t local_mem_bytes)
> > +static bool sm501_init(SM501State *s, DeviceState *dev,
> > + uint32_t local_mem_bytes, Error **errp)
> > {
> > +#ifndef CONFIG_PIXMAN
> > + if (s->use_pixman != 0) {
> > + error_setg(&error_warn, "x-pixman != 0, not effective without PIXMAN");
>
> I think this should just be warn_report not an error
It's a warning (error_warn), but I will change it to warn_report()
>
> > + }
> > +#endif
> > +
> > s->local_mem_size_index = get_local_mem_size_index(local_mem_bytes);
> >
> > /* local memory */
> > @@ -1916,6 +1935,7 @@ static void sm501_init(SM501State *s, DeviceState *dev,
> >
> > /* create qemu graphic console */
> > s->con = graphic_console_init(dev, 0, &sm501_ops, s);
> > + return true;
>
> and no need to add errp as we never return false so it won't be printed
> anyway.
>
ok
> > }
> >
> > static const VMStateDescription vmstate_sm501_state = {
> > @@ -2014,7 +2034,9 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
> > SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
> > MemoryRegion *mr;
> >
> > - sm501_init(&s->state, dev, s->vram_size);
> > + if (!sm501_init(&s->state, dev, s->vram_size, errp)) {
> > + return;
> > + }
>
> This could be left alone too, just issuing a warning above should be
> enough, no other cahnges are needed.
>
> Regards,
> BALATON Zoltan
>
> > if (get_local_mem_size(&s->state) != s->vram_size) {
> > error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
> > get_local_mem_size(&s->state));
> > @@ -2038,7 +2060,8 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
> >
> > static Property sm501_sysbus_properties[] = {
> > DEFINE_PROP_UINT32("vram-size", SM501SysBusState, vram_size, 0),
> > - DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, 7),
> > + /* this a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
> > + DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, DEFAULT_X_PIXMAN),
> > DEFINE_PROP_END_OF_LIST(),
> > };
> >
> > @@ -2112,7 +2135,9 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
> > {
> > SM501PCIState *s = PCI_SM501(dev);
> >
> > - sm501_init(&s->state, DEVICE(dev), s->vram_size);
> > + if (!sm501_init(&s->state, DEVICE(dev), s->vram_size, errp)) {
> > + return;
> > + }
> > if (get_local_mem_size(&s->state) != s->vram_size) {
> > error_setg(errp, "Invalid VRAM size, nearest valid size is %" PRIu32,
> > get_local_mem_size(&s->state));
> > @@ -2126,7 +2151,7 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
> >
> > static Property sm501_pci_properties[] = {
> > DEFINE_PROP_UINT32("vram-size", SM501PCIState, vram_size, 64 * MiB),
> > - DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, 7),
> > + DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, DEFAULT_X_PIXMAN),
> > DEFINE_PROP_END_OF_LIST(),
> > };
> >
> >
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v5 18/19] hw/display: make ATI_VGA depend on PIXMAN
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (16 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 17/19] hw/sm501: allow compiling without PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:30 ` [PATCH v5 19/19] build-sys: make pixman actually optional marcandre.lureau
` (2 subsequent siblings)
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: BALATON Zoltan <balaton@eik.bme.hu>
---
configs/devices/mips64el-softmmu/default.mak | 2 +-
hw/display/Kconfig | 2 +-
hw/display/meson.build | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/configs/devices/mips64el-softmmu/default.mak b/configs/devices/mips64el-softmmu/default.mak
index d5188f7ea5..8d85607571 100644
--- a/configs/devices/mips64el-softmmu/default.mak
+++ b/configs/devices/mips64el-softmmu/default.mak
@@ -3,7 +3,7 @@
include ../mips-softmmu/common.mak
CONFIG_FULOONG=y
CONFIG_LOONGSON3V=y
-CONFIG_ATI_VGA=y
+# CONFIG_ATI_VGA=n
CONFIG_RTL8139_PCI=y
CONFIG_JAZZ=y
CONFIG_VT82C686=y
diff --git a/hw/display/Kconfig b/hw/display/Kconfig
index 1aafe1923d..4d8a6c4af8 100644
--- a/hw/display/Kconfig
+++ b/hw/display/Kconfig
@@ -125,7 +125,7 @@ config DPCD
config ATI_VGA
bool
default y if PCI_DEVICES
- depends on PCI
+ depends on PCI && PIXMAN
select VGA
select BITBANG_I2C
select DDC
diff --git a/hw/display/meson.build b/hw/display/meson.build
index 9c06aaee20..344dfe3d8c 100644
--- a/hw/display/meson.build
+++ b/hw/display/meson.build
@@ -62,7 +62,7 @@ system_ss.add(when: 'CONFIG_XLNX_DISPLAYPORT', if_true: files('xlnx_dp.c'))
system_ss.add(when: 'CONFIG_ARTIST', if_true: files('artist.c'))
-system_ss.add(when: [pixman, 'CONFIG_ATI_VGA'], if_true: files('ati.c', 'ati_2d.c', 'ati_dbg.c'))
+system_ss.add(when: 'CONFIG_ATI_VGA', if_true: [files('ati.c', 'ati_2d.c', 'ati_dbg.c'), pixman])
if config_all_devices.has_key('CONFIG_VIRTIO_GPU')
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v5 19/19] build-sys: make pixman actually optional
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (17 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 18/19] hw/display: make ATI_VGA depend on PIXMAN marcandre.lureau
@ 2023-10-23 11:30 ` marcandre.lureau
2023-10-23 11:34 ` [PATCH v5 00/19] Make Pixman an optional dependency Michael S. Tsirkin
2023-10-24 12:01 ` Marc-André Lureau
20 siblings, 0 replies; 40+ messages in thread
From: marcandre.lureau @ 2023-10-23 11:30 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Marc-André Lureau, Dr. David Alan Gilbert, Eric Blake,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
meson.build | 3 ---
1 file changed, 3 deletions(-)
diff --git a/meson.build b/meson.build
index dbc7af091c..6399321d72 100644
--- a/meson.build
+++ b/meson.build
@@ -817,9 +817,6 @@ if not get_option('pixman').auto() or have_system or have_tools
pixman = dependency('pixman-1', required: get_option('pixman'), version:'>=0.21.8',
method: 'pkg-config')
endif
-if not pixman.found() and (have_system or have_tools)
- error('FIXME: pixman is currently required')
-endif
zlib = dependency('zlib', required: true)
--
2.41.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v5 00/19] Make Pixman an optional dependency
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (18 preceding siblings ...)
2023-10-23 11:30 ` [PATCH v5 19/19] build-sys: make pixman actually optional marcandre.lureau
@ 2023-10-23 11:34 ` Michael S. Tsirkin
2023-10-24 12:01 ` Marc-André Lureau
20 siblings, 0 replies; 40+ messages in thread
From: Michael S. Tsirkin @ 2023-10-23 11:34 UTC (permalink / raw)
To: marcandre.lureau
Cc: qemu-devel, BALATON Zoltan, qemu-ppc, Thomas Huth, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On Mon, Oct 23, 2023 at 03:30:27PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Hi,
>
> QEMU system emulators can be made to compile and work without Pixman.
>
> Only a few devices and options actually require it (VNC, Gtk, Spice for ex) and
> will have to be compiled out.
>
> However, most of QEMU graphics-related code is based on pixman_image_t and
> format. If we want to provide mostly compatible QEMU machines with or without
> Pixman, all we need to do is to have a small compatibility header with just the
> bare minimum for those types (see "ui: add pixman-compat.h"). There are a
> limited number of operations related to geometry that are slightly better
> implemented in QEMU (without Pixman, see "virtio-gpu: replace PIXMAN for
> region/rect test").
>
> Without this simple compatibility header approach, QEMU at runtime becomes a
> very different emulator (without graphics device/board, display etc) and full of
> "if PIXMAN" conditions in the code. This is a much worse outcome imho, compared
> to this small header maintainance and compatibility story.
>
> Fixes:
> https://gitlab.com/qemu-project/qemu/-/issues/1172
virtio things:
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> v5:
> - fixed "vl: move display early init before default devices" patch
>
> v4:
> - added "vl: move display early init before default devices" patch
> - code style fixes
> - a-b from Zoltan
>
> v3:
> - improve transient meson condition in first patch (Paolo)
> - use muxed console as fallback by default (Paolo)
> - make pixman-compat.h closer to original API
> - keep "x-pixman" property for sm501 (Zoltan)
>
> Marc-André Lureau (19):
> build-sys: add a "pixman" feature
> ui: compile out some qemu-pixman functions when !PIXMAN
> ui: add pixman-compat.h
> vl: move display early init before default devices
> ui/console: allow to override the default VC
> ui/vc: console-vc requires PIXMAN
> qmp/hmp: disable screendump if PIXMAN is missing
> virtio-gpu: replace PIXMAN for region/rect test
> ui/console: when PIXMAN is unavailable, don't draw placeholder msg
> vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN
> ui/gl: opengl doesn't require PIXMAN
> ui/vnc: VNC requires PIXMAN
> ui/spice: SPICE/QXL requires PIXMAN
> ui/gtk: -display gtk requires PIXMAN
> ui/dbus: do not require PIXMAN
> arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN
> hw/sm501: allow compiling without PIXMAN
> hw/display: make ATI_VGA depend on PIXMAN
> build-sys: make pixman actually optional
>
> configs/devices/mips64el-softmmu/default.mak | 2 +-
> meson.build | 25 ++-
> qapi/ui.json | 3 +-
> include/ui/console.h | 2 +
> include/ui/pixman-compat.h | 195 +++++++++++++++++++
> include/ui/qemu-pixman.h | 11 +-
> include/ui/rect.h | 59 ++++++
> hw/display/sm501.c | 59 ++++--
> hw/display/vhost-user-gpu.c | 2 +
> hw/display/virtio-gpu.c | 30 ++-
> system/vl.c | 68 ++++---
> ui/console-vc-stubs.c | 33 ++++
> ui/console.c | 19 ++
> ui/dbus-listener.c | 90 ++++++---
> ui/qemu-pixman.c | 6 +
> ui/ui-hmp-cmds.c | 2 +
> ui/ui-qmp-cmds.c | 2 +
> Kconfig.host | 3 +
> hmp-commands.hx | 2 +
> hw/arm/Kconfig | 3 +-
> hw/display/Kconfig | 9 +-
> hw/display/meson.build | 4 +-
> meson_options.txt | 2 +
> scripts/meson-buildoptions.sh | 3 +
> ui/meson.build | 24 +--
> 25 files changed, 541 insertions(+), 117 deletions(-)
> create mode 100644 include/ui/pixman-compat.h
> create mode 100644 include/ui/rect.h
> create mode 100644 ui/console-vc-stubs.c
>
> --
> 2.41.0
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 00/19] Make Pixman an optional dependency
2023-10-23 11:30 [PATCH v5 00/19] Make Pixman an optional dependency marcandre.lureau
` (19 preceding siblings ...)
2023-10-23 11:34 ` [PATCH v5 00/19] Make Pixman an optional dependency Michael S. Tsirkin
@ 2023-10-24 12:01 ` Marc-André Lureau
2023-10-25 11:58 ` Thomas Huth
20 siblings, 1 reply; 40+ messages in thread
From: Marc-André Lureau @ 2023-10-24 12:01 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Thomas Huth,
Gerd Hoffmann, Philippe Mathieu-Daudé, Markus Armbruster,
Peter Maydell, qemu-arm, Daniel P. Berrangé,
Dr. David Alan Gilbert, Eric Blake, Paolo Bonzini
Hi
On Mon, Oct 23, 2023 at 5:49 PM <marcandre.lureau@redhat.com> wrote:
>
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Hi,
>
> QEMU system emulators can be made to compile and work without Pixman.
>
> Only a few devices and options actually require it (VNC, Gtk, Spice for ex) and
> will have to be compiled out.
>
> However, most of QEMU graphics-related code is based on pixman_image_t and
> format. If we want to provide mostly compatible QEMU machines with or without
> Pixman, all we need to do is to have a small compatibility header with just the
> bare minimum for those types (see "ui: add pixman-compat.h"). There are a
> limited number of operations related to geometry that are slightly better
> implemented in QEMU (without Pixman, see "virtio-gpu: replace PIXMAN for
> region/rect test").
>
> Without this simple compatibility header approach, QEMU at runtime becomes a
> very different emulator (without graphics device/board, display etc) and full of
> "if PIXMAN" conditions in the code. This is a much worse outcome imho, compared
> to this small header maintainance and compatibility story.
>
> Fixes:
> https://gitlab.com/qemu-project/qemu/-/issues/1172
Before I send v6 with minor changes, do we have a consensus on the
approach using the small pixman-compat.h header to keep 99%
compatibility with a qemu compiled with pixman and minimal changes?
thanks
> v5:
> - fixed "vl: move display early init before default devices" patch
>
> v4:
> - added "vl: move display early init before default devices" patch
> - code style fixes
> - a-b from Zoltan
>
> v3:
> - improve transient meson condition in first patch (Paolo)
> - use muxed console as fallback by default (Paolo)
> - make pixman-compat.h closer to original API
> - keep "x-pixman" property for sm501 (Zoltan)
>
> Marc-André Lureau (19):
> build-sys: add a "pixman" feature
> ui: compile out some qemu-pixman functions when !PIXMAN
> ui: add pixman-compat.h
> vl: move display early init before default devices
> ui/console: allow to override the default VC
> ui/vc: console-vc requires PIXMAN
> qmp/hmp: disable screendump if PIXMAN is missing
> virtio-gpu: replace PIXMAN for region/rect test
> ui/console: when PIXMAN is unavailable, don't draw placeholder msg
> vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN
> ui/gl: opengl doesn't require PIXMAN
> ui/vnc: VNC requires PIXMAN
> ui/spice: SPICE/QXL requires PIXMAN
> ui/gtk: -display gtk requires PIXMAN
> ui/dbus: do not require PIXMAN
> arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN
> hw/sm501: allow compiling without PIXMAN
> hw/display: make ATI_VGA depend on PIXMAN
> build-sys: make pixman actually optional
>
> configs/devices/mips64el-softmmu/default.mak | 2 +-
> meson.build | 25 ++-
> qapi/ui.json | 3 +-
> include/ui/console.h | 2 +
> include/ui/pixman-compat.h | 195 +++++++++++++++++++
> include/ui/qemu-pixman.h | 11 +-
> include/ui/rect.h | 59 ++++++
> hw/display/sm501.c | 59 ++++--
> hw/display/vhost-user-gpu.c | 2 +
> hw/display/virtio-gpu.c | 30 ++-
> system/vl.c | 68 ++++---
> ui/console-vc-stubs.c | 33 ++++
> ui/console.c | 19 ++
> ui/dbus-listener.c | 90 ++++++---
> ui/qemu-pixman.c | 6 +
> ui/ui-hmp-cmds.c | 2 +
> ui/ui-qmp-cmds.c | 2 +
> Kconfig.host | 3 +
> hmp-commands.hx | 2 +
> hw/arm/Kconfig | 3 +-
> hw/display/Kconfig | 9 +-
> hw/display/meson.build | 4 +-
> meson_options.txt | 2 +
> scripts/meson-buildoptions.sh | 3 +
> ui/meson.build | 24 +--
> 25 files changed, 541 insertions(+), 117 deletions(-)
> create mode 100644 include/ui/pixman-compat.h
> create mode 100644 include/ui/rect.h
> create mode 100644 ui/console-vc-stubs.c
>
> --
> 2.41.0
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v5 00/19] Make Pixman an optional dependency
2023-10-24 12:01 ` Marc-André Lureau
@ 2023-10-25 11:58 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2023-10-25 11:58 UTC (permalink / raw)
To: Marc-André Lureau, qemu-devel
Cc: Michael S. Tsirkin, BALATON Zoltan, qemu-ppc, Gerd Hoffmann,
Philippe Mathieu-Daudé, Markus Armbruster, Peter Maydell,
qemu-arm, Daniel P. Berrangé, Dr. David Alan Gilbert,
Eric Blake, Paolo Bonzini
On 24/10/2023 14.01, Marc-André Lureau wrote:
> Hi
>
> On Mon, Oct 23, 2023 at 5:49 PM <marcandre.lureau@redhat.com> wrote:
>>
>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>
>> Hi,
>>
>> QEMU system emulators can be made to compile and work without Pixman.
>>
>> Only a few devices and options actually require it (VNC, Gtk, Spice for ex) and
>> will have to be compiled out.
>>
>> However, most of QEMU graphics-related code is based on pixman_image_t and
>> format. If we want to provide mostly compatible QEMU machines with or without
>> Pixman, all we need to do is to have a small compatibility header with just the
>> bare minimum for those types (see "ui: add pixman-compat.h"). There are a
>> limited number of operations related to geometry that are slightly better
>> implemented in QEMU (without Pixman, see "virtio-gpu: replace PIXMAN for
>> region/rect test").
>>
>> Without this simple compatibility header approach, QEMU at runtime becomes a
>> very different emulator (without graphics device/board, display etc) and full of
>> "if PIXMAN" conditions in the code. This is a much worse outcome imho, compared
>> to this small header maintainance and compatibility story.
>>
>> Fixes:
>> https://gitlab.com/qemu-project/qemu/-/issues/1172
>
> Before I send v6 with minor changes, do we have a consensus on the
> approach using the small pixman-compat.h header to keep 99%
> compatibility with a qemu compiled with pixman and minimal changes?
It looks reasonable to me - at least for a first step, since it's not a very
huge change. We still can change it easily later if we reconsider, I guess.
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread