From: Marc-André Lureau <marcandre.lur...@redhat.com> Hi,
The D-Bus display doesn't work on Windows, since it relies on FDs transfer over Unix domain socket. This isn't (yet) supported on Windows. To make it work, the interfaces are adapted to use 'ay' WSASocketW data instead of 'h' (in a similar fashion as QMP 'get-win32-socket'). A simple XML preprocessor helps generating the target-specific OS interfaces. The performance on Windows isn't great though, since there is no DMABUF scanout sharing between QEMU and the client for example. The first improvement introduces a org.qemu.Display1.Listener.Win32.Map interface for shared display/console memory. This can work regardless of 3d accelerated or not, and should work across various GL implementations as well. The second improvement relies on ANGLE/EGL Direct3D extensions enabled in virgl (pending review at https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1103) to create shareable Texture2Ds and share them when the client implements the org.qemu.Display1.Listener.Win32.D3D11 interface. This should give comparable performance as in-process display hopefully. Marc-André Lureau (21): ui/egl: export qemu_egl_get_error_string() ui/egl: fix make_context_current() callback return value ui/dbus: compile without gio/gunixfdlist.h scripts: add a XML preprocessor script ui/dbus: win32 support qtest: add qtest_pid() tests: make dbus-display-test work on win32 ui/dbus: introduce "Interfaces" properties console/win32: allocate shareable display surface virtio-gpu/win32: allocate shareable 2d resources/images ui/dbus: use shared memory when possible on win32 ui: add egl-headless support on win32 ui/egl: default to GLES on windows ui: add egl_fb_read_rect() ui/dbus: add GL support on win32 ui/dbus: add some GL traces virtio-gpu-virgl: teach it to get the QEMU EGL display ui/egl: query ANGLE d3d device ui: add optional d3d texture pointer to scanout texture virtio-gpu-virgl: use D3D11_SHARE_TEXTURE when available ui/dbus: use shared D3D11 Texture2D when possible MAINTAINERS | 1 + meson.build | 10 +- qapi/ui.json | 5 +- include/hw/virtio/virtio-gpu.h | 3 + include/sysemu/os-win32.h | 3 + include/ui/console.h | 15 +- include/ui/egl-helpers.h | 11 +- include/ui/gtk.h | 6 +- include/ui/sdl2.h | 3 +- tests/qtest/libqtest.h | 9 + ui/dbus.h | 6 + audio/dbusaudio.c | 43 ++- hw/display/virtio-gpu-virgl.c | 43 ++- hw/display/virtio-gpu.c | 46 ++- tests/qtest/dbus-display-test.c | 43 ++- tests/qtest/libqtest.c | 5 + ui/console.c | 70 ++++- ui/dbus-chardev.c | 20 +- ui/dbus-console.c | 64 +++- ui/dbus-listener.c | 527 +++++++++++++++++++++++++++++--- ui/dbus.c | 4 - ui/egl-context.c | 10 +- ui/egl-headless.c | 25 +- ui/egl-helpers.c | 98 +++++- ui/gtk-egl.c | 14 +- ui/gtk-gl-area.c | 5 +- ui/qemu-pixman.c | 1 + ui/sdl2-gl.c | 3 +- ui/spice-display.c | 3 +- util/oslib-win32.c | 33 ++ scripts/meson.build | 2 + scripts/xml-preprocess-test.py | 136 +++++++++ scripts/xml-preprocess.py | 293 ++++++++++++++++++ tests/qtest/meson.build | 2 +- ui/dbus-display1.xml | 240 ++++++++++++++- ui/meson.build | 15 +- ui/trace-events | 8 +- util/trace-events | 4 + 38 files changed, 1704 insertions(+), 125 deletions(-) create mode 100644 scripts/xml-preprocess-test.py create mode 100755 scripts/xml-preprocess.py -- 2.40.1