aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/vhost-user-gpu/meson.build2
-rw-r--r--contrib/vhost-user-gpu/vhost-user-gpu.c24
-rw-r--r--contrib/vhost-user-gpu/virgl.c3
-rw-r--r--contrib/vhost-user-gpu/vugbm.c44
-rw-r--r--contrib/vhost-user-gpu/vugbm.h2
5 files changed, 38 insertions, 37 deletions
diff --git a/contrib/vhost-user-gpu/meson.build b/contrib/vhost-user-gpu/meson.build
index 2fc2320b52..0ce1515a10 100644
--- a/contrib/vhost-user-gpu/meson.build
+++ b/contrib/vhost-user-gpu/meson.build
@@ -2,7 +2,7 @@ if 'CONFIG_TOOLS' in config_host and 'CONFIG_VIRGL' in config_host \
and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host \
and pixman.found()
executable('vhost-user-gpu', files('vhost-user-gpu.c', 'virgl.c', 'vugbm.c'),
- dependencies: [qemuutil, pixman, gbm, virgl, vhost_user],
+ dependencies: [qemuutil, pixman, gbm, virgl, vhost_user, opengl],
install: true,
install_dir: get_option('libexecdir'))
diff --git a/contrib/vhost-user-gpu/vhost-user-gpu.c b/contrib/vhost-user-gpu/vhost-user-gpu.c
index b27990ffdb..f73f292c9f 100644
--- a/contrib/vhost-user-gpu/vhost-user-gpu.c
+++ b/contrib/vhost-user-gpu/vhost-user-gpu.c
@@ -892,11 +892,8 @@ update_cursor_data_simple(VuGpu *g, uint32_t resource_id, gpointer data)
static void
vg_process_cursor_cmd(VuGpu *g, struct virtio_gpu_update_cursor *cursor)
{
- bool move = cursor->hdr.type != VIRTIO_GPU_CMD_MOVE_CURSOR;
-
- g_debug("%s move:%d\n", G_STRFUNC, move);
-
- if (move) {
+ switch (cursor->hdr.type) {
+ case VIRTIO_GPU_CMD_MOVE_CURSOR: {
VhostUserGpuMsg msg = {
.request = cursor->resource_id ?
VHOST_USER_GPU_CURSOR_POS : VHOST_USER_GPU_CURSOR_POS_HIDE,
@@ -907,8 +904,11 @@ vg_process_cursor_cmd(VuGpu *g, struct virtio_gpu_update_cursor *cursor)
.y = cursor->pos.y,
}
};
+ g_debug("%s: move", G_STRFUNC);
vg_send_msg(g, &msg, -1);
- } else {
+ break;
+ }
+ case VIRTIO_GPU_CMD_UPDATE_CURSOR: {
VhostUserGpuMsg msg = {
.request = VHOST_USER_GPU_CURSOR_UPDATE,
.size = sizeof(VhostUserGpuCursorUpdate),
@@ -922,6 +922,7 @@ vg_process_cursor_cmd(VuGpu *g, struct virtio_gpu_update_cursor *cursor)
.hot_y = cursor->hot_y,
}
};
+ g_debug("%s: update", G_STRFUNC);
if (g->virgl) {
vg_virgl_update_cursor_data(g, cursor->resource_id,
msg.payload.cursor_update.data);
@@ -930,6 +931,11 @@ vg_process_cursor_cmd(VuGpu *g, struct virtio_gpu_update_cursor *cursor)
msg.payload.cursor_update.data);
}
vg_send_msg(g, &msg, -1);
+ break;
+ }
+ default:
+ g_debug("%s: unknown cmd %d", G_STRFUNC, cursor->hdr.type);
+ break;
}
}
@@ -1186,11 +1192,7 @@ main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
- if (g.drm_rnode_fd >= 0) {
- if (!vugbm_device_init(&g.gdev, g.drm_rnode_fd)) {
- g_warning("Failed to init DRM device, using fallback path");
- }
- }
+ vugbm_device_init(&g.gdev, g.drm_rnode_fd);
if ((!!opt_socket_path + (opt_fdnum != -1)) != 1) {
g_printerr("Please specify either --fd or --socket-path\n");
diff --git a/contrib/vhost-user-gpu/virgl.c b/contrib/vhost-user-gpu/virgl.c
index 8bb3c563d9..9e6660c7ab 100644
--- a/contrib/vhost-user-gpu/virgl.c
+++ b/contrib/vhost-user-gpu/virgl.c
@@ -16,6 +16,8 @@
#include <virglrenderer.h>
#include "virgl.h"
+#include <epoxy/gl.h>
+
void
vg_virgl_update_cursor_data(VuGpu *g, uint32_t resource_id,
gpointer data)
@@ -372,6 +374,7 @@ virgl_cmd_resource_flush(VuGpu *g,
VUGPU_FILL_CMD(rf);
+ glFlush();
if (!rf.resource_id) {
g_debug("bad resource id for flush..?");
return;
diff --git a/contrib/vhost-user-gpu/vugbm.c b/contrib/vhost-user-gpu/vugbm.c
index f5304ada2f..fb15d0372c 100644
--- a/contrib/vhost-user-gpu/vugbm.c
+++ b/contrib/vhost-user-gpu/vugbm.c
@@ -199,55 +199,51 @@ vugbm_device_destroy(struct vugbm_device *dev)
dev->device_destroy(dev);
}
-bool
+void
vugbm_device_init(struct vugbm_device *dev, int fd)
{
- dev->fd = fd;
+ assert(!dev->inited);
#ifdef CONFIG_GBM
- dev->dev = gbm_create_device(fd);
-#endif
-
- if (0) {
- /* nothing */
+ if (fd >= 0) {
+ dev->dev = gbm_create_device(fd);
}
-#ifdef CONFIG_GBM
- else if (dev->dev != NULL) {
+ if (dev->dev != NULL) {
+ dev->fd = fd;
dev->alloc_bo = alloc_bo;
dev->free_bo = free_bo;
dev->get_fd = get_fd;
dev->map_bo = map_bo;
dev->unmap_bo = unmap_bo;
dev->device_destroy = device_destroy;
+ dev->inited = true;
}
#endif
#ifdef CONFIG_MEMFD
- else if (g_file_test("/dev/udmabuf", G_FILE_TEST_EXISTS)) {
+ if (!dev->inited && g_file_test("/dev/udmabuf", G_FILE_TEST_EXISTS)) {
dev->fd = open("/dev/udmabuf", O_RDWR);
- if (dev->fd < 0) {
- return false;
+ if (dev->fd >= 0) {
+ g_debug("Using experimental udmabuf backend");
+ dev->alloc_bo = udmabuf_alloc_bo;
+ dev->free_bo = udmabuf_free_bo;
+ dev->get_fd = udmabuf_get_fd;
+ dev->map_bo = udmabuf_map_bo;
+ dev->unmap_bo = udmabuf_unmap_bo;
+ dev->device_destroy = udmabuf_device_destroy;
+ dev->inited = true;
}
- g_debug("Using experimental udmabuf backend");
- dev->alloc_bo = udmabuf_alloc_bo;
- dev->free_bo = udmabuf_free_bo;
- dev->get_fd = udmabuf_get_fd;
- dev->map_bo = udmabuf_map_bo;
- dev->unmap_bo = udmabuf_unmap_bo;
- dev->device_destroy = udmabuf_device_destroy;
}
#endif
- else {
+ if (!dev->inited) {
g_debug("Using mem fallback");
dev->alloc_bo = mem_alloc_bo;
dev->free_bo = mem_free_bo;
dev->map_bo = mem_map_bo;
dev->unmap_bo = mem_unmap_bo;
dev->device_destroy = mem_device_destroy;
- return false;
+ dev->inited = true;
}
-
- dev->inited = true;
- return true;
+ assert(dev->inited);
}
static bool
diff --git a/contrib/vhost-user-gpu/vugbm.h b/contrib/vhost-user-gpu/vugbm.h
index 66f1520764..82bc4934e1 100644
--- a/contrib/vhost-user-gpu/vugbm.h
+++ b/contrib/vhost-user-gpu/vugbm.h
@@ -54,7 +54,7 @@ struct vugbm_buffer {
uint32_t format;
};
-bool vugbm_device_init(struct vugbm_device *dev, int fd);
+void vugbm_device_init(struct vugbm_device *dev, int fd);
void vugbm_device_destroy(struct vugbm_device *dev);
bool vugbm_buffer_create(struct vugbm_buffer *buffer, struct vugbm_device *dev,