summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2017-11-09 19:17:17 -0800
committerJason Ekstrand <jason.ekstrand@intel.com>2018-03-07 12:13:47 -0800
commita1ee51309ef7a36aef177ef523260e7b574ce4ab (patch)
tree267de53ebfa686d706644f39394522160971595e
parentd6b65222df53677e5d3b2f6f42163387725d57b8 (diff)
vulkan/util: Add a helper to get a version override
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
-rw-r--r--docs/envvars.html10
-rw-r--r--src/vulkan/util/vk_util.c20
-rw-r--r--src/vulkan/util/vk_util.h2
3 files changed, 32 insertions, 0 deletions
diff --git a/docs/envvars.html b/docs/envvars.html
index ea42a50779b..a08f5b94024 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 769e69062ad..ec95a89078a 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 4c18a196b71..cc6a36e5acc 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)