[Mesa-dev] [PATCH 55/56] vulkan/util: Add a helper to get a version override

Jason Ekstrand jason at jlekstrand.net
Wed Mar 7 14:35:43 UTC 2018


Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
---
 docs/envvars.html         | 10 ++++++++++
 src/vulkan/util/vk_util.c | 20 ++++++++++++++++++++
 src/vulkan/util/vk_util.h |  2 ++
 3 files changed, 32 insertions(+)

diff --git a/docs/envvars.html b/docs/envvars.html
index ea42a50..a08f5b9 100644
--- a/docs/envvars.html
+++ b/docs/envvars.html
@@ -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>
 
 
diff --git a/src/vulkan/util/vk_util.c b/src/vulkan/util/vk_util.c
index 769e690..ec95a89 100644
--- a/src/vulkan/util/vk_util.c
+++ b/src/vulkan/util/vk_util.c
@@ -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);
+}
diff --git a/src/vulkan/util/vk_util.h b/src/vulkan/util/vk_util.h
index 4c18a19..cc6a36e 100644
--- a/src/vulkan/util/vk_util.h
+++ b/src/vulkan/util/vk_util.h
@@ -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)
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list