vm_tools: sommelier: Add XWAYLAND_VK_ICD_FILENAMES

Set it to /usr/share/vulkan/icd.d/10_magma_intel_icd.x86_64.json
by default.

Change-Id: I46f4decd115a242e4c2f7c5f5553996673854bc9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/3349587
Reviewed-by: Craig Stout <cstout@google.com>
Commit-Queue: David Reveman <reveman@chromium.org>
Tested-by: David Reveman <reveman@chromium.org>
diff --git a/vm_tools/sommelier/BUILD.gn b/vm_tools/sommelier/BUILD.gn
index ac9b973..d7d3502 100644
--- a/vm_tools/sommelier/BUILD.gn
+++ b/vm_tools/sommelier/BUILD.gn
@@ -32,6 +32,11 @@
   xwayland_shm_driver = "\"virtwl-dmabuf\""
 }
 
+# Set this to the VK ICD filenames to use for Xwayland.
+if (!defined(xwayland_vk_icd_filenames)) {
+  xwayland_vk_icd_filenames = "\"/usr/share/vulkan/icd.d/10_magma_intel_icd.x86_64.json\""
+}
+
 # Set this to the shm driver to use for wayland clients.
 if (!defined(shm_driver)) {
   shm_driver = "\"virtwl-dmabuf\""
@@ -109,6 +114,7 @@
     "XWAYLAND_PATH=${xwayland_path}",
     "XWAYLAND_GL_DRIVER_PATH=${xwayland_gl_driver_path}",
     "XWAYLAND_SHM_DRIVER=${xwayland_shm_driver}",
+    "XWAYLAND_VK_ICD_FILENAMES=${xwayland_vk_icd_filenames}",
     "SHM_DRIVER=${shm_driver}",
     "VIRTWL_DEVICE=${virtwl_device}",
     "PEER_CMD_PREFIX=${peer_cmd_prefix}",
diff --git a/vm_tools/sommelier/meson.build b/vm_tools/sommelier/meson.build
index 66d2c7a..9411072 100644
--- a/vm_tools/sommelier/meson.build
+++ b/vm_tools/sommelier/meson.build
@@ -149,6 +149,7 @@
     '-DXWAYLAND_PATH="' + get_option('xwayland_path') + '"',
     '-DXWAYLAND_GL_DRIVER_PATH="' + get_option('xwayland_gl_driver_path') + '"',
     '-DXWAYLAND_SHM_DRIVER="' + get_option('xwayland_shm_driver') + '"',
+    '-DXWAYLAND_VK_ICD_FILENAMES="' + get_option('xwayland_vk_icd_filenames') + '"',
     '-DSHM_DRIVER="' + get_option('shm_driver') + '"',
     '-DPEER_CMD_PREFIX="' + peer_cmd_prefix + '"',
     '-DFRAME_COLOR="' + get_option('frame_color') + '"',
diff --git a/vm_tools/sommelier/meson_options.txt b/vm_tools/sommelier/meson_options.txt
index f0c6cbd..fc70fdc 100644
--- a/vm_tools/sommelier/meson_options.txt
+++ b/vm_tools/sommelier/meson_options.txt
@@ -20,6 +20,12 @@
   description: 'shm driver to use for Xwayland'
 )
 
+option('xwayland_vk_icd_filenames',
+  type: 'string',
+  value: '/usr/share/vulkan/icd.d/10_magma_intel_icd.x86_64.json',
+  description: 'the VK ICD filenames to use for Xwayland'
+)
+
 option('shm_driver',
   type: 'string',
   value: 'virtwl-dmabuf',
diff --git a/vm_tools/sommelier/sommelier.cc b/vm_tools/sommelier/sommelier.cc
index 8988bcd..f7c0b6d 100644
--- a/vm_tools/sommelier/sommelier.cc
+++ b/vm_tools/sommelier/sommelier.cc
@@ -60,6 +60,9 @@
 #ifndef XWAYLAND_SHM_DRIVER
 #error XWAYLAND_SHM_DRIVER must be defined
 #endif
+#ifndef XWAYLAND_VK_ICD_FILENAMES
+#error XWAYLAND_VK_ICD_FILENAMES must be defined
+#endif
 #ifndef SHM_DRIVER
 #error SHM_DRIVER must be defined
 #endif
@@ -4040,6 +4043,8 @@
   const char* xwayland_path = getenv("SOMMELIER_XWAYLAND_PATH");
   const char* xwayland_gl_driver_path =
       getenv("SOMMELIER_XWAYLAND_GL_DRIVER_PATH");
+  const char* xwayland_vk_icd_filenames =
+      getenv("SOMMELIER_XWAYLAND_VK_ICD_FILENAMES");
   const char* xauth_path = getenv("SOMMELIER_XAUTH_PATH");
   const char* xfont_path = getenv("SOMMELIER_XFONT_PATH");
   const char* socket_name = "wayland-0";
@@ -4687,6 +4692,14 @@
           setenv("LIBGL_DRIVERS_PATH", XWAYLAND_GL_DRIVER_PATH, 1);
         }
 
+        if (xwayland_vk_icd_filenames) {
+          if (*xwayland_vk_icd_filenames) {
+            setenv("VK_ICD_FILENAMES", xwayland_vk_icd_filenames, 1);
+          }
+        } else if (XWAYLAND_VK_ICD_FILENAMES && *XWAYLAND_VK_ICD_FILENAMES) {
+          setenv("VK_ICD_FILENAMES", XWAYLAND_VK_ICD_FILENAMES, 1);
+        }
+
         sl_execvp(args[0], const_cast<char* const*>(args), sv[1]);
         _exit(EXIT_FAILURE);
       }