Message ID | 20220926142422.22325-10-antonio.caggiano@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio-gpu: Support Venus Vulkan driver | expand |
Antonio Caggiano <antonio.caggiano@collabora.com> writes: > Implement get_egl_display callback for virglrenderer. > > Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com> > --- > hw/display/virtio-gpu-virgl.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c > index 0f17bdddd0..0fd9ad8a3d 100644 > --- a/hw/display/virtio-gpu-virgl.c > +++ b/hw/display/virtio-gpu-virgl.c > @@ -18,6 +18,7 @@ > #include "hw/virtio/virtio-gpu.h" > #include "hw/virtio/virtio-gpu-bswap.h" > #include "hw/virtio/virtio-iommu.h" > +#include <epoxy/egl.h> > > #include <virglrenderer.h> > > @@ -743,12 +744,18 @@ static int virgl_make_context_current(void *opaque, int scanout_idx, > qctx); > } > > +static void *virgl_get_egl_display(void *opaque) > +{ > + return eglGetCurrentDisplay(); > +} > + > static struct virgl_renderer_callbacks virtio_gpu_3d_cbs = { > - .version = 1, > + .version = 4, > .write_fence = virgl_write_fence, > .create_gl_context = virgl_create_context, > .destroy_gl_context = virgl_destroy_context, > .make_current = virgl_make_context_current, > + .get_egl_display = virgl_get_egl_display, This fails for me: FAILED: libcommon.fa.p/hw_display_virtio-gpu-virgl.c.o cc -m64 -mcx16 -Ilibcommon.fa.p -I../../common-user/host/x86_64 -I../../linux-user/include/host/x86_64 -I../../linux-user/include -Idtc/libfdt -I../../dtc/libfdt -I/usr/include/capstone -I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/p11-kit-1 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/slirp -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/vte-2.91 -I/usr/include/virgl -I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr -I/usr/include/PCSC -I/usr/include/libusb-1.0 -fdiagnostics-color=auto -Wall -Winvalid-pch -Werror -std=gnu11 -O2 -g -isystem /home/alex/lsrc/qemu.git/linux-headers -isystem linux-headers -iquote . -iquote /home/alex/lsrc/qemu.git -iquote /home/alex/lsrc/qemu.git/include -iquote /home/alex/lsrc/qemu.git/tcg/i386 -pthread -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -Wundef -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wold-style-declaration -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wimplicit-fallthrough=2 -Wmissing-format-attribute -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-psabi -fstack-protector-strong -fPIE -D_REENTRANT -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR=1 -DSTRUCT_IOVEC_DEFINED -MD -MQ libcommon.fa.p/hw_display_virtio-gpu-virgl.c.o -MF libcommon.fa.p/hw_display_virtio-gpu-virgl.c.o.d -o libcommon.fa.p/hw_display_virtio-gpu-virgl.c.o -c ../../hw/display/virtio-gpu-virgl.c ../../hw/display/virtio-gpu-virgl.c:758:6: error: ‘struct virgl_renderer_callbacks’ has no member named ‘get_egl_display’ 758 | .get_egl_display = virgl_get_egl_display, | ^~~~~~~~~~~~~~~ ../../hw/display/virtio-gpu-virgl.c:758:28: error: initialization of ‘int (*)(void *)’ from incompatible pointer type ‘void * (*)(void *)’ [-Werror=incompatible-pointer-types] 758 | .get_egl_display = virgl_get_egl_display, | ^~~~~~~~~~~~~~~~~~~~~ ../../hw/display/virtio-gpu-virgl.c:758:28: note: (near initialization for ‘virtio_gpu_3d_cbs.get_drm_fd’) ../../hw/display/virtio-gpu-virgl.c: In function ‘virtio_gpu_virgl_init’: ../../hw/display/virtio-gpu-virgl.c:816:34: error: ‘VIRGL_RENDERER_VENUS’ undeclared (first use in this function); did you mean ‘VIRGL_RENDERER_USE_EGL’? 816 | ret = virgl_renderer_init(g, VIRGL_RENDERER_VENUS, &virtio_gpu_3d_cbs); | ^~~~~~~~~~~~~~~~~~~~ | VIRGL_RENDERER_USE_EGL ../../hw/display/virtio-gpu-virgl.c:816:34: note: each undeclared identifier is reported only once for each function it appears in cc1: all warnings being treated as errors I assume because I'm either missing a library or my distro version is too old. Either way this needs to be caught at configure time and #ifdef'd. > }; > > static void virtio_gpu_print_stats(void *opaque)
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c index 0f17bdddd0..0fd9ad8a3d 100644 --- a/hw/display/virtio-gpu-virgl.c +++ b/hw/display/virtio-gpu-virgl.c @@ -18,6 +18,7 @@ #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-bswap.h" #include "hw/virtio/virtio-iommu.h" +#include <epoxy/egl.h> #include <virglrenderer.h> @@ -743,12 +744,18 @@ static int virgl_make_context_current(void *opaque, int scanout_idx, qctx); } +static void *virgl_get_egl_display(void *opaque) +{ + return eglGetCurrentDisplay(); +} + static struct virgl_renderer_callbacks virtio_gpu_3d_cbs = { - .version = 1, + .version = 4, .write_fence = virgl_write_fence, .create_gl_context = virgl_create_context, .destroy_gl_context = virgl_destroy_context, .make_current = virgl_make_context_current, + .get_egl_display = virgl_get_egl_display, }; static void virtio_gpu_print_stats(void *opaque)
Implement get_egl_display callback for virglrenderer. Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com> --- hw/display/virtio-gpu-virgl.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)