[virglrenderer-devel] [PATCH 4/4] vrend: add simple program to print host info

Gert Wollny gert.wollny at collabora.com
Wed Jun 13 09:03:40 UTC 2018


Add a program vrend-host-info that prints the host GL and virglrenderer
version to stdout. This program can be used to inject information about
the host into guest running in Qemu as a smbios OEM string (assuming bash
as shell):

  qemu -smbios type=11,value="$(virgl-host-info)" ...

which can then be read inside the guest running

  sudo dmiinfo -t 11

Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
---
 src/Makefile.am       |  5 +++
 src/virgl_host_info.c | 94 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+)
 create mode 100644 src/virgl_host_info.c

diff --git a/src/Makefile.am b/src/Makefile.am
index 43a5fbc..5b15908 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -38,6 +38,9 @@ libvrend_la_SOURCES = \
         vrend_blitter.h \
         iov.c
 
+bin_PROGRAMS = virgl-host-info
+virgl_host_info_SOURCES = virgl_host_info.c
+
 if HAVE_EPOXY_EGL
 libvrend_la_SOURCES += \
         virgl_egl.h \
@@ -53,6 +56,8 @@ endif
 lib_LTLIBRARIES = libvirglrenderer.la
 noinst_LTLIBRARIES = libvrend.la
 
+virgl_host_info_LDADD = libvirglrenderer.la libvrend.la
+
 GM_LDFLAGS = -Wl,-Bsymbolic -version-number 0:2 -no-undefined
 
 libvirglrenderer_la_SOURCES = virglrenderer.c
diff --git a/src/virgl_host_info.c b/src/virgl_host_info.c
new file mode 100644
index 0000000..d9cc3e2
--- /dev/null
+++ b/src/virgl_host_info.c
@@ -0,0 +1,94 @@
+/**************************************************************************
+ *
+ * Copyright (C) 2018 Collabora LDT.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#include "config.h"
+#include "virglrenderer.h"
+#ifdef HAVE_EPOXY_GLX_H
+#include "virgl_glx.h"
+#endif
+#ifdef HAVE_EPOXY_EGL_H
+#include "virgl_glx.h"
+#endif
+
+#include "virgl_egl.h"
+#include "os/os_misc.h"
+#include <stdio.h>
+
+static void print_glx_context_info(void)
+{
+#ifdef HAVE_EPOXY_GLX_H
+   struct virgl_gl_ctx_param glx_params = {3,3,false};
+   virgl_renderer_gl_context virgl_ctx;
+   struct virgl_glx *context;
+
+   context = virgl_glx_init();
+   virgl_ctx = virgl_glx_create_context(context, &glx_params);
+   virgl_glx_make_context_current(context, virgl_ctx);
+
+   printf("%s", virgl_renderer_get_host_info());
+   virgl_glx_destroy_context(context, virgl_ctx);
+   virgl_glx_destroy(context);
+#else
+   fprintf(stderr, "GLX support not compiled in\n");
+#endif
+}
+
+static void print_egl_context_info(void)
+{
+#ifdef HAVE_EPOXY_EGL_H
+   struct virgl_gl_ctx_param glx_params = {2,0,false};
+   virgl_renderer_gl_context virgl_ctx;
+   struct virgl_egl *context;
+
+   context = virgl_egl_init();
+   virgl_ctx = virgl_egl_create_context(context, &glx_params);
+   virgl_egl_make_context_current(context, virgl_ctx);
+
+   printf("%s", virgl_renderer_get_host_info());
+
+   virgl_egl_destroy_context(context, virgl_ctx);
+   virgl_egl_destroy(context);
+#else
+   fprintf(stderr, "EGL support not compiled in\n");
+#endif
+
+}
+
+int main(int argc, const char *args[])
+{
+   if (argc == 2)
+      if (!strcmp(args[1], "egl"))
+         print_egl_context_info();
+      else if (!strcmp(args[1], "glx"))
+         print_glx_context_info();
+      else {
+         fprintf(stderr, "Error: Unknown parameter '%s' given\n",
+                 args[1]);
+         return 1;
+      }
+   else
+      fprintf(stderr, "Print information about host GL/Vrend\n\n"
+                      "Usage:\n  virgl-host-info <context = (glx|egl)>\n\n");
+   return 0;
+}
-- 
2.17.1



More information about the virglrenderer-devel mailing list