vulkan/util: Add a helper to get a version override
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 10 Nov 2017 03:17:17 +0000 (19:17 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Mar 2018 20:13:47 +0000 (12:13 -0800)
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
docs/envvars.html
src/vulkan/util/vk_util.c
src/vulkan/util/vk_util.h

index ea42a50779bc74176545e3fd1d917464fcda823d..a08f5b9402455d909e8807bc76d4661dbf2a99dd 100644 (file)
@@ -135,6 +135,16 @@ home directory.
 <li>MESA_NO_MINMAX_CACHE - when set, the minmax index cache is globally disabled.
 <li>MESA_SHADER_CAPTURE_PATH - see <a href="shading.html#capture">Capturing Shaders</a></li>
 <li>MESA_SHADER_DUMP_PATH and MESA_SHADER_READ_PATH - see <a href="shading.html#replacement">Experimenting with Shader Replacements</a></li>
+<li>MESA_VK_VERSION_OVERRIDE - changes the Vulkan physical device version
+    as returned in VkPhysicalDeviceProperties::apiVersion.
+  <ul>
+    <li>The format should be MAJOR.MINOR[.PATCH]</li>
+    <li>This will not let you force a version higher than the driver's
+        instance versionas advertised by vkEnumerateInstanceVersion</li>
+    <li>This can be very useful for debugging but some features may not be
+        implemented correctly. (For developers only)</li>
+  </ul>
+</li>
 </ul>
 
 
index 769e69062adbc7a35e9438a0bb3b76296d1b177f..ec95a89078ad702f3754930119ea8a6567d2f5c5 100644 (file)
@@ -47,3 +47,23 @@ uint32_t vk_get_driver_version(void)
    }
    return VK_MAKE_VERSION(major, minor, patch);
 }
+
+uint32_t vk_get_version_override(void)
+{
+   const char *str = getenv("MESA_VK_VERSION_OVERRIDE");
+   if (str == NULL)
+      return 0;
+
+   const char *minor_str = strchr(str, '.');
+   const char *patch_str = minor_str ? strchr(minor_str + 1, '.') : NULL;
+
+   int major = atoi(str);
+   int minor = minor_str ? atoi(minor_str + 1) : 0;
+   int patch = patch_str ? atoi(patch_str + 1) : 0;
+
+   /* Do some basic version sanity checking */
+   if (major < 1 || minor < 0 || patch < 0 || minor > 1023 || patch > 4095)
+      return 0;
+
+   return VK_MAKE_VERSION(major, minor, patch);
+}
index 4c18a196b71d5fc3d2f90a3c5547021d77f57e3c..cc6a36e5acc456d720fca0d571a2f69280f47a1b 100644 (file)
@@ -199,6 +199,8 @@ __vk_find_struct(void *start, VkStructureType sType)
 
 uint32_t vk_get_driver_version(void);
 
+uint32_t vk_get_version_override(void);
+
 #define VK_EXT_OFFSET (1000000000UL)
 #define VK_ENUM_EXTENSION(__enum) \
    ((__enum) >= VK_EXT_OFFSET ? ((((__enum) - VK_EXT_OFFSET) / 1000UL) + 1) : 0)