Message ID | 20230817022322.466-9-gurchetansingh@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | gfxstream + rutabaga_gfx | expand |
On 2023/08/17 11:23, Gurchetan Singh wrote: > From: Gurchetan Singh <gurchetansingh@chromium.org> > > This change enables rutabaga to receive virtio-gpu-3d hypercalls > when it is active. > > Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> > Tested-by: Alyssa Ross <hi@alyssa.is> > Tested-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org> > Reviewed-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org> > --- > v3: Whitespace fix (Akihiko) > > hw/display/virtio-gpu-base.c | 3 ++- > hw/display/virtio-gpu.c | 5 +++-- > softmmu/qdev-monitor.c | 3 +++ > softmmu/vl.c | 1 + > 4 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c > index 4f2b0ba1f3..50c5373b65 100644 > --- a/hw/display/virtio-gpu-base.c > +++ b/hw/display/virtio-gpu-base.c > @@ -223,7 +223,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.c b/hw/display/virtio-gpu.c > index 3e658f1fef..08e170e029 100644 > --- a/hw/display/virtio-gpu.c > +++ b/hw/display/virtio-gpu.c > @@ -1361,8 +1361,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_have_udmabuf() emits a warning if udmabuf is not available, which is spurious when using Rutabaga. I think virtio_gpu_have_udmabuf() should be renamed to virtio_gpu_init_udmabuf() or something, let it set errp instead of emitting a warning, and call it only when Rutabaga is not in use. That clarifies the timing when an error message will be shown.
On Fri, Aug 18, 2023 at 4:58 AM Akihiko Odaki <akihiko.odaki@gmail.com> wrote: > On 2023/08/17 11:23, Gurchetan Singh wrote: > > From: Gurchetan Singh <gurchetansingh@chromium.org> > > > > This change enables rutabaga to receive virtio-gpu-3d hypercalls > > when it is active. > > > > Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> > > Tested-by: Alyssa Ross <hi@alyssa.is> > > Tested-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org> > > Reviewed-by: Emmanouil Pitsidianakis <manos.pitsidianakis@linaro.org> > > --- > > v3: Whitespace fix (Akihiko) > > > > hw/display/virtio-gpu-base.c | 3 ++- > > hw/display/virtio-gpu.c | 5 +++-- > > softmmu/qdev-monitor.c | 3 +++ > > softmmu/vl.c | 1 + > > 4 files changed, 9 insertions(+), 3 deletions(-) > > > > diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c > > index 4f2b0ba1f3..50c5373b65 100644 > > --- a/hw/display/virtio-gpu-base.c > > +++ b/hw/display/virtio-gpu-base.c > > @@ -223,7 +223,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.c b/hw/display/virtio-gpu.c > > index 3e658f1fef..08e170e029 100644 > > --- a/hw/display/virtio-gpu.c > > +++ b/hw/display/virtio-gpu.c > > @@ -1361,8 +1361,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_have_udmabuf() emits a warning if udmabuf is not available, > which is spurious when using Rutabaga. > > I think virtio_gpu_have_udmabuf() should be renamed to > virtio_gpu_init_udmabuf() or something, let it set errp instead of > emitting a warning, and call it only when Rutabaga is not in use. Not too familiar with udmabuf case, so just reordered the if rutabaga check to avoid the spurious warning. Probably an udmabuf cleanups should in an additional patch series. > That > clarifies the timing when an error message will be shown. >
diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 4f2b0ba1f3..50c5373b65 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -223,7 +223,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.c b/hw/display/virtio-gpu.c index 3e658f1fef..08e170e029 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1361,8 +1361,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; } diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c index 74f4e41338..1b8005ae55 100644 --- a/softmmu/qdev-monitor.c +++ b/softmmu/qdev-monitor.c @@ -86,6 +86,9 @@ static const QDevAlias qdev_alias_table[] = { { "virtio-gpu-pci", "virtio-gpu", QEMU_ARCH_VIRTIO_PCI }, { "virtio-gpu-gl-device", "virtio-gpu-gl", QEMU_ARCH_VIRTIO_MMIO }, { "virtio-gpu-gl-pci", "virtio-gpu-gl", QEMU_ARCH_VIRTIO_PCI }, + { "virtio-gpu-rutabaga-device", "virtio-gpu-rutabaga", + QEMU_ARCH_VIRTIO_MMIO }, + { "virtio-gpu-rutabaga-pci", "virtio-gpu-rutabaga", QEMU_ARCH_VIRTIO_PCI }, { "virtio-input-host-device", "virtio-input-host", QEMU_ARCH_VIRTIO_MMIO }, { "virtio-input-host-ccw", "virtio-input-host", QEMU_ARCH_VIRTIO_CCW }, { "virtio-input-host-pci", "virtio-input-host", QEMU_ARCH_VIRTIO_PCI }, diff --git a/softmmu/vl.c b/softmmu/vl.c index b0b96f67fa..2f98eefdf3 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -216,6 +216,7 @@ static struct { { .driver = "ati-vga", .flag = &default_vga }, { .driver = "vhost-user-vga", .flag = &default_vga }, { .driver = "virtio-vga-gl", .flag = &default_vga }, + { .driver = "virtio-vga-rutabaga", .flag = &default_vga }, }; static QemuOptsList qemu_rtc_opts = {