[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 17/27] vhost-user-gpu: add vg_send_scanout_dmabuf()
From: |
marcandre . lureau |
Subject: |
[PATCH 17/27] vhost-user-gpu: add vg_send_scanout_dmabuf() |
Date: |
Fri, 12 Mar 2021 14:00:58 +0400 |
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
contrib/vhost-user-gpu/vugpu.h | 8 ++++
contrib/vhost-user-gpu/vhost-user-gpu.c | 57 +++++++++++++++++--------
contrib/vhost-user-gpu/virgl.c | 23 ++++------
3 files changed, 56 insertions(+), 32 deletions(-)
diff --git a/contrib/vhost-user-gpu/vugpu.h b/contrib/vhost-user-gpu/vugpu.h
index e19abb670d..759de56502 100644
--- a/contrib/vhost-user-gpu/vugpu.h
+++ b/contrib/vhost-user-gpu/vugpu.h
@@ -180,5 +180,13 @@ bool vg_recv_msg(VuGpu *g, uint32_t expect_req,
uint32_t expect_size,
gpointer payload);
void vg_send_disable_scanout(VuGpu *g, int scanout_id);
+void vg_send_dmabuf_scanout(VuGpu *g,
+ const struct virtio_gpu_set_scanout *ss,
+ uint32_t fd_width,
+ uint32_t fd_height,
+ uint32_t fd_stride,
+ int fd_drm_fourcc,
+ uint32_t fd_flags,
+ int fd);
#endif
diff --git a/contrib/vhost-user-gpu/vhost-user-gpu.c
b/contrib/vhost-user-gpu/vhost-user-gpu.c
index 69fedd376b..8c3ee8aad8 100644
--- a/contrib/vhost-user-gpu/vhost-user-gpu.c
+++ b/contrib/vhost-user-gpu/vhost-user-gpu.c
@@ -587,6 +587,38 @@ vg_transfer_to_host_2d(VuGpu *g,
}
}
+void
+vg_send_dmabuf_scanout(VuGpu *g,
+ const struct virtio_gpu_set_scanout *ss,
+ uint32_t fd_width,
+ uint32_t fd_height,
+ uint32_t fd_stride,
+ int fd_drm_fourcc,
+ uint32_t fd_flags,
+ int fd)
+{
+ VhostUserGpuMsg msg = {
+ .request = VHOST_USER_GPU_DMABUF_SCANOUT,
+ .size = sizeof(VhostUserGpuDMABUFScanout),
+ .payload.dmabuf_scanout = (VhostUserGpuDMABUFScanout) {
+ .scanout_id = ss->scanout_id,
+ .x = ss->r.x,
+ .y = ss->r.y,
+ .width = ss->r.width,
+ .height = ss->r.height,
+ .fd_width = fd_width,
+ .fd_height = fd_height,
+ .fd_stride = fd_stride,
+ .fd_drm_fourcc = fd_drm_fourcc,
+ .fd_flags = fd_flags,
+ }
+ };
+
+ g_debug("send dmabuf scanout: %d", ss->scanout_id);
+ vg_send_msg(g, &msg, fd);
+}
+
+
static void
vg_set_scanout(VuGpu *g,
struct virtio_gpu_ctrl_command *cmd)
@@ -651,24 +683,15 @@ vg_set_scanout(VuGpu *g,
struct vugbm_buffer *buffer = &res->buffer;
if (vugbm_buffer_can_get_dmabuf_fd(buffer)) {
- VhostUserGpuMsg msg = {
- .request = VHOST_USER_GPU_DMABUF_SCANOUT,
- .size = sizeof(VhostUserGpuDMABUFScanout),
- .payload.dmabuf_scanout = (VhostUserGpuDMABUFScanout) {
- .scanout_id = ss.scanout_id,
- .x = ss.r.x,
- .y = ss.r.y,
- .width = ss.r.width,
- .height = ss.r.height,
- .fd_width = buffer->width,
- .fd_height = buffer->height,
- .fd_stride = buffer->stride,
- .fd_drm_fourcc = buffer->format
- }
- };
-
if (vugbm_buffer_get_dmabuf_fd(buffer, &fd)) {
- vg_send_msg(g, &msg, fd);
+ vg_send_dmabuf_scanout(g,
+ &ss,
+ buffer->width,
+ buffer->height,
+ buffer->stride,
+ buffer->format,
+ 0,
+ fd);
close(fd);
}
} else {
diff --git a/contrib/vhost-user-gpu/virgl.c b/contrib/vhost-user-gpu/virgl.c
index fe153425f5..0c7f118556 100644
--- a/contrib/vhost-user-gpu/virgl.c
+++ b/contrib/vhost-user-gpu/virgl.c
@@ -337,21 +337,14 @@ virgl_cmd_set_scanout(VuGpu *g,
return;
}
assert(fd >= 0);
- VhostUserGpuMsg msg = {
- .request = VHOST_USER_GPU_DMABUF_SCANOUT,
- .size = sizeof(VhostUserGpuDMABUFScanout),
- .payload.dmabuf_scanout.scanout_id = ss.scanout_id,
- .payload.dmabuf_scanout.x = ss.r.x,
- .payload.dmabuf_scanout.y = ss.r.y,
- .payload.dmabuf_scanout.width = ss.r.width,
- .payload.dmabuf_scanout.height = ss.r.height,
- .payload.dmabuf_scanout.fd_width = info.width,
- .payload.dmabuf_scanout.fd_height = info.height,
- .payload.dmabuf_scanout.fd_stride = info.stride,
- .payload.dmabuf_scanout.fd_flags = info.flags,
- .payload.dmabuf_scanout.fd_drm_fourcc = info.drm_fourcc
- };
- vg_send_msg(g, &msg, fd);
+ vg_send_dmabuf_scanout(g,
+ &ss,
+ info.width,
+ info.height,
+ info.stride,
+ info.drm_fourcc,
+ info.flags,
+ fd);
close(fd);
} else {
vg_send_disable_scanout(g, ss.scanout_id);
--
2.29.0
- Re: [PATCH 07/27] ui: make gl_block use a counter, (continued)
- [PATCH 08/27] ui: add a gl-unblock warning timer, marcandre . lureau, 2021/03/12
- [PATCH 09/27] ui: simplify gl unblock & flush, marcandre . lureau, 2021/03/12
- [PATCH 10/27] ui: dispatch GL events to all listeners, marcandre . lureau, 2021/03/12
- [PATCH 11/27] ui: split the GL context in a different object, marcandre . lureau, 2021/03/12
- [PATCH 12/27] ui: move qemu_spice_fill_device_address to ui/util.c, marcandre . lureau, 2021/03/12
- [PATCH 13/27] console: save current scanout details, marcandre . lureau, 2021/03/12
- [PATCH 14/27] ui: add a D-Bus display backend, marcandre . lureau, 2021/03/12
- [PATCH 15/27] audio: add dbusaudio backend, marcandre . lureau, 2021/03/12
- [PATCH 16/27] vhost-user-gpu: add vg_send_disable_scanout(), marcandre . lureau, 2021/03/12
- [PATCH 17/27] vhost-user-gpu: add vg_send_scanout_dmabuf(),
marcandre . lureau <=
- [PATCH 18/27] vhost-user-gpu: add vg_send_dmabuf_update(), marcandre . lureau, 2021/03/12
- [PATCH 19/27] vhost-user-gpu: add vg_send_scanout(), marcandre . lureau, 2021/03/12
- [PATCH 20/27] vhost-user-gpu: add vg_send_cursor_update(), marcandre . lureau, 2021/03/12
- [PATCH 21/27] vhost-user-gpu: add vg_send_cursor_pos(), marcandre . lureau, 2021/03/12
- [PATCH 22/27] vhost-user-gpu: add vg_send_update(), marcandre . lureau, 2021/03/12
- [PATCH 23/27] vhost-user: add VHOST_USER_GPU_QEMU_DBUS_LISTENER, marcandre . lureau, 2021/03/12
- [PATCH 24/27] ui: add GraphicHwOps.register_dbus_listener(), marcandre . lureau, 2021/03/12
- [PATCH 25/27] vhost-user-gpu: implement register_dbus_listener(), marcandre . lureau, 2021/03/12
- [PATCH 26/27] vhost-user-gpu: check the PIXMAN format is supported, marcandre . lureau, 2021/03/12
- [PATCH 27/27] vhost-user-gpu: implement GPU_QEMU_DBUS_LISTENER, marcandre . lureau, 2021/03/12