[Mesa-dev] [PATCH] loader: disable virgl driver when no 3D for virtio
Lepton Wu
lepton at chromium.org
Thu Apr 5 05:16:00 UTC 2018
If user are running mesa under old version of qemu or have turned off
GL at runtime, virtio gpu driver actually doesn't work. Adding a detection
here can make sure same disk image work with both cases.
Signed-off-by: Lepton Wu <lepton at chromium.org>
---
src/loader/loader.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/loader/loader.c b/src/loader/loader.c
index 43275484cc..2a689c52d6 100644
--- a/src/loader/loader.c
+++ b/src/loader/loader.c
@@ -381,6 +381,27 @@ out:
log_(driver ? _LOADER_DEBUG : _LOADER_WARNING,
"pci id for fd %d: %04x:%04x, driver %s\n",
fd, vendor_id, chip_id, driver);
+ if (!strcmp(driver, "virtio_gpu")) {
+ struct drm_virtgpu_getparam {
+ uint64_t param;
+ uint64_t value;
+ };
+ #define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */
+ struct drm_virtgpu_getparam args;
+ uint32_t gl = 0;
+ args.param = VIRTGPU_PARAM_3D_FEATURES;
+ args.value = (uint64_t)(uintptr_t)≷
+ #define DRM_VIRTGPU_GETPARAM 0x03
+ #define DRM_IOCTL_VIRTGPU_GETPARAM \
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\
+ struct drm_virtgpu_getparam)
+ int ret = drmIoctl(fd, DRM_IOCTL_VIRTGPU_GETPARAM, &args);
+ if (ret || !gl) {
+ /* Actually there is no virtio_2d driver, mesa will
+ * fallback to software driver */
+ return strdup("virtio_gpu_2d");
+ }
+ }
return driver;
}
--
2.17.0.484.g0c8726318c-goog
More information about the mesa-dev
mailing list