Mesa (main): virgl: forward the host renderer hardware info

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 11 06:56:39 UTC 2021


Module: Mesa
Branch: main
Commit: d0d1b66d8e46a62acb265b2f452444e7e291fc9d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d0d1b66d8e46a62acb265b2f452444e7e291fc9d

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Fri Jun  4 05:56:38 2021 +0000

virgl: forward the host renderer hardware info

Some game engines rely on the real hardware info to adjust default
graphics quality and other attributes.

Prepend "virgl" to avoid app compat issues and to distinguish from
native platforms while giving engines/apps a chance to adjust graphics
defaults.

Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11179>

---

 src/gallium/drivers/virgl/virgl_screen.c | 21 +++++++++++++++++++++
 src/virtio/virtio-gpu/virgl_hw.h         |  1 +
 2 files changed, 22 insertions(+)

diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c
index 8f224eea21e..eaf411dc4e0 100644
--- a/src/gallium/drivers/virgl/virgl_screen.c
+++ b/src/gallium/drivers/virgl/virgl_screen.c
@@ -63,6 +63,10 @@ virgl_get_vendor(struct pipe_screen *screen)
 static const char *
 virgl_get_name(struct pipe_screen *screen)
 {
+   struct virgl_screen *vscreen = virgl_screen(screen);
+   if (vscreen->caps.caps.v2.host_feature_check_version >= 5)
+      return vscreen->caps.caps.v2.renderer;
+
    return "virgl";
 }
 
@@ -908,6 +912,22 @@ static void virgl_disk_cache_create(struct virgl_screen *screen)
    screen->disk_cache = disk_cache_create("virgl", timestamp, 0);
 }
 
+static void
+fixup_renderer(union virgl_caps *caps)
+{
+   if (caps->v2.host_feature_check_version < 5)
+      return;
+
+   char renderer[64];
+   int renderer_len = snprintf(renderer, sizeof(renderer), "virgl (%s)",
+                               caps->v2.renderer);
+   if (renderer_len >= 64) {
+      memcpy(renderer + 59, "...)", 4);
+      renderer_len = 63;
+   }
+   memcpy(caps->v2.renderer, renderer, renderer_len + 1);
+}
+
 struct pipe_screen *
 virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *config)
 {
@@ -958,6 +978,7 @@ virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *c
    fixup_formats(&screen->caps.caps,
                  &screen->caps.caps.v2.supported_readback_formats);
    fixup_formats(&screen->caps.caps, &screen->caps.caps.v2.scanout);
+   fixup_renderer(&screen->caps.caps);
 
    union virgl_caps *caps = &screen->caps.caps;
    screen->tweak_gles_emulate_bgra &= !virgl_format_check_bitmask(PIPE_FORMAT_B8G8R8A8_SRGB, caps->v1.render.bitmask, false);
diff --git a/src/virtio/virtio-gpu/virgl_hw.h b/src/virtio/virtio-gpu/virgl_hw.h
index 35ca6d97f69..2cba19307d4 100644
--- a/src/virtio/virtio-gpu/virgl_hw.h
+++ b/src/virtio/virtio-gpu/virgl_hw.h
@@ -596,6 +596,7 @@ struct virgl_caps_v2 {
         struct virgl_supported_format_mask scanout;
         uint32_t capability_bits_v2;
         uint32_t max_video_memory;
+        char renderer[64];
 };
 
 union virgl_caps {



More information about the mesa-commit mailing list