This change enables rutabaga to receive virtio-gpu-3d hypercalls when it is active.
Signed-off-by: Gurchetan Singh <gurchetansi...@chromium.org> --- hw/display/virtio-gpu-base.c | 3 ++- hw/display/virtio-gpu-gl.c | 9 ++++++++- hw/display/virtio-gpu.c | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 6c5f1f327f..7913d9b82e 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -206,7 +206,8 @@ virtio_gpu_base_get_features(VirtIODevice *vdev, uint64_t features, { VirtIOGPUBase *g = VIRTIO_GPU_BASE(vdev); - if (virtio_gpu_virgl_enabled(g->conf)) { + if (virtio_gpu_virgl_enabled(g->conf) || + virtio_gpu_rutabaga_enabled(g->conf)) { features |= (1 << VIRTIO_GPU_F_VIRGL); } if (virtio_gpu_edid_enabled(g->conf)) { diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c index 15270b0c8a..fc09900ed9 100644 --- a/hw/display/virtio-gpu-gl.c +++ b/hw/display/virtio-gpu-gl.c @@ -23,7 +23,14 @@ static void virtio_gpu_gl_device_realize(DeviceState *qdev, Error **errp) { - virtio_gpu_virgl_device_realize(qdev, errp); + VirtIOGPUGL *virtio_gpu = VIRTIO_GPU_GL(qdev); + virtio_gpu->rutabaga = NULL; + virtio_gpu_rutabaga_device_realize(qdev, errp); + + /* Fallback to virgl if rutabaga fails to initialize */ + if (!virtio_gpu->rutabaga) { + virtio_gpu_virgl_device_realize(qdev, errp); + } } static Property virtio_gpu_gl_properties[] = { diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 938eed9181..3e92f9db6b 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1314,8 +1314,9 @@ void virtio_gpu_device_realize(DeviceState *qdev, Error **errp) VirtIOGPU *g = VIRTIO_GPU(qdev); if (virtio_gpu_blob_enabled(g->parent_obj.conf)) { - if (!virtio_gpu_have_udmabuf()) { - error_setg(errp, "cannot enable blob resources without udmabuf"); + if (!virtio_gpu_have_udmabuf() && + !virtio_gpu_rutabaga_enabled(g->parent_obj.conf)) { + error_setg(errp, "need udmabuf or rutabaga for blob resources"); return; } -- 2.40.0.634.g4ca3ef3211-goog