Ignore the patch number when comparing apiVersions
authorPiers Daniell <pdaniell@nvidia.com>
Thu, 12 Oct 2017 18:09:00 +0000 (12:09 -0600)
committerPiers Daniell <pdaniell@nvidia.com>
Thu, 12 Oct 2017 18:09:00 +0000 (12:09 -0600)
Modify the getSpirvVersionForAsm() and getSpirvVersionForGlsl()
functions to ignore the patch version number when checking
for Vulkan 1.0 vs Vulkan 1.1. It's often the case that the loader
or implementation will have a non-zero patch number to indicate
what version of the spec and vulkan header they built with.

Affects: startup

Components: Vulkan

VK-GL-CTS issue: 767

Change-Id: I947cb43db5e1f93e5b0b9cb93d205863b8e3c4b1

external/vulkancts/framework/vulkan/vkDefs.hpp
external/vulkancts/framework/vulkan/vkPrograms.cpp

index 41b2b19..95ffac5 100644 (file)
@@ -52,6 +52,10 @@ struct NAME {                                                                                        \
 #define VK_MAKE_VERSION(MAJOR, MINOR, PATCH)   (((deUint32)(MAJOR) << 22u) | ((deUint32)(MINOR) << 12u) | (deUint32)(PATCH))
 #define VK_BIT(NUM)                                                            (1u<<(deUint32)(NUM))
 
+#define VK_VERSION_MAJOR(version)                              ((uint32_t)(version) >> 22)
+#define VK_VERSION_MINOR(version)                              (((uint32_t)(version) >> 12) & 0x3ff)
+#define VK_VERSION_PATCH(version)                              ((uint32_t)(version) & 0xfff)
+
 #define VK_CHECK(EXPR)                                                 vk::checkResult((EXPR), #EXPR, __FILE__, __LINE__)
 #define VK_CHECK_MSG(EXPR, MSG)                                        vk::checkResult((EXPR), MSG, __FILE__, __LINE__)
 
index 5ddd17f..4895f56 100644 (file)
@@ -271,9 +271,10 @@ vk::SpirvVersion getSpirvVersionForAsm (const deUint32 vulkanVersion)
 {
        vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
 
-       if (vulkanVersion == VK_API_VERSION_1_0)
+       deUint32 vulkanVersionMajorMinor = VK_MAKE_VERSION(VK_VERSION_MAJOR(vulkanVersion), VK_VERSION_MINOR(vulkanVersion), 0);
+       if (vulkanVersionMajorMinor == VK_API_VERSION_1_0)
                result = vk::SPIRV_VERSION_1_0;
-       else if (vulkanVersion >= VK_API_VERSION_1_1)
+       else if (vulkanVersionMajorMinor >= VK_API_VERSION_1_1)
                result = vk::SPIRV_VERSION_1_3;
 
        DE_ASSERT(result < vk::SPIRV_VERSION_LAST);
@@ -285,9 +286,10 @@ vk::SpirvVersion getSpirvVersionForGlsl (const deUint32 vulkanVersion)
 {
        vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
 
-       if (vulkanVersion == VK_API_VERSION_1_0)
+       deUint32 vulkanVersionMajorMinor = VK_MAKE_VERSION(VK_VERSION_MAJOR(vulkanVersion), VK_VERSION_MINOR(vulkanVersion), 0);
+       if (vulkanVersionMajorMinor == VK_API_VERSION_1_0)
                result = vk::SPIRV_VERSION_1_0;
-       else if (vulkanVersion >= VK_API_VERSION_1_1)
+       else if (vulkanVersionMajorMinor >= VK_API_VERSION_1_1)
                result = vk::SPIRV_VERSION_1_3;
 
        DE_ASSERT(result < vk::SPIRV_VERSION_LAST);