From 15c47384395c0330d13b1dd91ab9f9a5564970fc Mon Sep 17 00:00:00 2001 From: Piers Daniell Date: Thu, 12 Oct 2017 12:09:00 -0600 Subject: [PATCH] Ignore the patch number when comparing apiVersions 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 | 4 ++++ external/vulkancts/framework/vulkan/vkPrograms.cpp | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkDefs.hpp b/external/vulkancts/framework/vulkan/vkDefs.hpp index 41b2b19..95ffac5 100644 --- a/external/vulkancts/framework/vulkan/vkDefs.hpp +++ b/external/vulkancts/framework/vulkan/vkDefs.hpp @@ -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__) diff --git a/external/vulkancts/framework/vulkan/vkPrograms.cpp b/external/vulkancts/framework/vulkan/vkPrograms.cpp index 5ddd17f..4895f56 100644 --- a/external/vulkancts/framework/vulkan/vkPrograms.cpp +++ b/external/vulkancts/framework/vulkan/vkPrograms.cpp @@ -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); -- 2.7.4