|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 11/11] virtio-gpu: make blob scanout use dmabuf fd
Huang Rui <ray.huang@xxxxxxx> writes:
> From: Robert Beckett <bob.beckett@xxxxxxxxxxxxx>
>
> This relies on a virglrenderer change to include the dmabuf fd when
> returning resource info.
>
<snip>
> +static void virgl_cmd_set_scanout_blob(VirtIOGPU *g,
> + struct virtio_gpu_ctrl_command *cmd)
> +{
> + struct virgl_gpu_resource *vres;
> + struct virtio_gpu_framebuffer fb = { 0 };
> + struct virtio_gpu_set_scanout_blob ss;
> + struct virgl_renderer_resource_info info;
> + uint64_t fbend;
> +
> + VIRTIO_GPU_FILL_CMD(ss);
> + virtio_gpu_scanout_blob_bswap(&ss);
> + trace_virtio_gpu_cmd_set_scanout_blob(ss.scanout_id, ss.resource_id,
> + ss.r.width, ss.r.height, ss.r.x,
> + ss.r.y);
> +
> + if (ss.scanout_id >= g->parent_obj.conf.max_outputs) {
> + qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal scanout id specified %d",
> + __func__, ss.scanout_id);
> + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID;
> + return;
> + }
> +
> + if (ss.resource_id == 0) {
> + virtio_gpu_disable_scanout(g, ss.scanout_id);
> + return;
> + }
> +
> + if (ss.width < 16 ||
> + ss.height < 16 ||
> + ss.r.x + ss.r.width > ss.width ||
> + ss.r.y + ss.r.height > ss.height) {
> + qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal scanout %d bounds for"
> + " resource %d, rect (%d,%d)+%d,%d, fb %d %d\n",
> + __func__, ss.scanout_id, ss.resource_id,
> + ss.r.x, ss.r.y, ss.r.width, ss.r.height,
> + ss.width, ss.height);
> + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER;
> + return;
> + }
> +
> + if (!console_has_gl(g->parent_obj.scanout[ss.scanout_id].con)) {
> + qemu_log_mask(LOG_GUEST_ERROR, "%s: unable to scanout blot without
> GL!\n", __func__);
> + return;
> + }
> +
> + vres = virgl_gpu_find_resource(g, ss.resource_id);
> + if (!vres) {
> + qemu_log_mask(LOG_GUEST_ERROR,
> + "%s: illegal resource specified %d\n",
> + __func__, ss.resource_id);
> + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
> + return;
> + }
> + if (virgl_renderer_resource_get_info(ss.resource_id, &info)) {
> + qemu_log_mask(LOG_GUEST_ERROR,
> + "%s: illegal virgl resource specified %d\n",
> + __func__, ss.resource_id);
> + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
> + return;
> + }
Minor nit, the format of the following needs to include braces.
> + if (!vres->res.dmabuf_fd && info.fd)
> + vres->res.dmabuf_fd = info.fd;
However I'm seeing:
cc -m64 -mcx16 -Ilibcommon.fa.p -I../../common-user/host/x86_64
-I../../linux-user/include/host/x86_64 -I../../linux-user/include -Iui
-I../../ui -I/usr/include/capstone -I/usr/include/p11-kit-1
-I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/spice-server
-I/usr/include/spice-1 -I/usr/include/libusb-1.0 -I/usr/include/SDL2
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0
-I/usr/include/slirp -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0
-I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi
-I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0
-I/usr/include/x86_64-linux-gnu -I/usr/include/atk-1.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/vte-2.91 -I/usr/include/virgl
-I/home/alex/lsrc/qemu.git/builds/extra.libs/install/include
-I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr
-I/usr/include/PCSC -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2
-fdiagnostics-color=auto -Wall -Winvalid-pch -Werror -std=gnu11 -O2 -g
-fstack-protector-strong -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 -Wshadow=local
-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/host/include/x86_64 -iquote
/home/alex/lsrc/qemu.git/host/include/generic -iquote
/home/alex/lsrc/qemu.git/tcg/i386 -pthread -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -fPIE
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR=1 -D_REENTRANT
-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: In function ‘virgl_cmd_set_scanout_blob’:
../../hw/display/virtio-gpu-virgl.c:790:37: error: ‘struct
virgl_renderer_resource_info’ has no member named ‘fd’
790 | if (!vres->res.dmabuf_fd && info.fd)
| ^
../../hw/display/virtio-gpu-virgl.c:791:35: error: ‘struct
virgl_renderer_resource_info’ has no member named ‘fd’
791 | vres->res.dmabuf_fd = info.fd;
| ^
But searching my extra libs (for aemu/gfstream/rutabaga_ffi) I can see
the bindings.rs but nothing generated a header:
$ ag -r "virgl_renderer_resource_info"
crosvm.git/rutabaga_gfx/src/generated/virgl_renderer_bindings.rs
33:pub const VIRGL_RENDERER_RESOURCE_INFO_EXT_VERSION: u32 = 0;
337:pub struct virgl_renderer_resource_info {
351:pub struct virgl_renderer_resource_info_ext {
353: pub base: virgl_renderer_resource_info,
359:impl Default for virgl_renderer_resource_info_ext {
373: info: *mut virgl_renderer_resource_info,
379: info: *mut virgl_renderer_resource_info_ext,
Which makes me think a) its picked up the older virgl headers and b) the
crosvm/rutabaf_gfx install needs a fix.
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |