From b39f86bf1f4055e72569c87f250d8821d45cc64a Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Thu, 9 Jun 2022 14:26:03 +0200
Subject: [PATCH] Added option to enforce a Vulkan version in VMA

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 CMakeLists.txt                         |  1 +
 config/lib/VulkanMemoryAllocator.cmake | 22 +++++++++++++++++++++-
 config/lib/vma/CMakeLists.txt          |  2 ++
 src/vkcv/Context.cpp                   |  1 -
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d4770641..2f70c78f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,7 @@ option(BUILD_MODULES "Enables building VkCV as shared libraries" ON)
 option(BUILD_PROJECTS "Enables building the VkCV projects" ON)
 option(BUILD_DOXYGEN_DOCS "Enables building the VkCV doxygen documentation" OFF)
 option(BUILD_SHARED "Enables building VkCV as shared libraries" OFF)
+option(BUILD_VMA_VULKAN_VERSION "Enforce a specific Vulkan version for VMA" OFF)
 
 if (BUILD_PROJECTS)
 	set(BUILD_MODULES ${BUILD_PROJECTS})
diff --git a/config/lib/VulkanMemoryAllocator.cmake b/config/lib/VulkanMemoryAllocator.cmake
index 6dc61dd1..9270dbd0 100644
--- a/config/lib/VulkanMemoryAllocator.cmake
+++ b/config/lib/VulkanMemoryAllocator.cmake
@@ -1,4 +1,20 @@
 
+find_package(Vulkan QUIET)
+
+if (Vulkan_VERSION)
+	set(BUILD_VMA_VULKAN_VERSION ${Vulkan_VERSION})
+endif()
+
+set(VMA_VULKAN_VERSION OFF CACHE INTERNAL "")
+
+if (BUILD_VMA_VULKAN_VERSION)
+	string(REGEX REPLACE "(\\.[0-9]+)+$" "" VMA_VULKAN_MAJOR_VERSION ${BUILD_VMA_VULKAN_VERSION})
+	string(REGEX REPLACE "^[0-9]+\\.([0-9]+)(\\.[0-9]+)?" "\\1" VMA_VULKAN_MINOR_VERSION ${BUILD_VMA_VULKAN_VERSION})
+	string(REGEX REPLACE "^([0-9]+\\.)+" "" VMA_VULKAN_PATCH_VERSION ${BUILD_VMA_VULKAN_VERSION})
+	
+	math(EXPR VMA_VULKAN_VERSION "1000000 * ${VMA_VULKAN_MAJOR_VERSION} + 1000 * ${VMA_VULKAN_MINOR_VERSION} + ${VMA_VULKAN_PATCH_VERSION}" OUTPUT_FORMAT DECIMAL)
+endif()
+
 use_git_submodule("${vkcv_lib_path}/VulkanMemoryAllocator-Hpp" vma_hpp_status)
 
 if (${vma_hpp_status})
@@ -34,5 +50,9 @@ if (${vma_hpp_status})
 	list(APPEND vkcv_libraries VulkanMemoryAllocator)
 	list(APPEND vkcv_includes ${VMA_HPP_PATH})
 	
-	message(${vkcv_config_msg} " VMA     - ")
+	if (VMA_VULKAN_VERSION)
+		list(APPEND vkcv_definitions "VMA_VULKAN_VERSION=${VMA_VULKAN_VERSION}")
+	endif()
+	
+	message(${vkcv_config_msg} " VMA     -   " ${BUILD_VMA_VULKAN_VERSION})
 endif ()
diff --git a/config/lib/vma/CMakeLists.txt b/config/lib/vma/CMakeLists.txt
index 8b177fdc..2377e371 100644
--- a/config/lib/vma/CMakeLists.txt
+++ b/config/lib/vma/CMakeLists.txt
@@ -4,6 +4,7 @@ project(VulkanMemoryAllocator)
 
 find_package(Vulkan REQUIRED)
 
+option(VMA_VULKAN_VERSION "Enforced Vulkan version" OFF)
 option(VMA_HPP_PATH "Location of C++ headers" "")
 
 option(VMA_VULKAN_H_PATH "Location of Vulkan C headers" "")
@@ -64,4 +65,5 @@ target_compile_definitions(
 		VMA_DEBUG_GLOBAL_MUTEX=$<BOOL:${VMA_DEBUG_GLOBAL_MUTEX}>
 		VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT=$<BOOL:${VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT}>
 		VMA_RECORDING_ENABLED=$<BOOL:${VMA_RECORDING_ENABLED}>
+		VMA_VULKAN_VERSION=${VMA_VULKAN_VERSION}
 )
diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index 0cd327be..f0520f05 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -89,7 +89,6 @@ namespace vkcv
 	 * @param instance The instance
 	 * @param physicalDevice The optimal physical device
 	 * @return Returns if a suitable GPU is found as physical device
-	 * @see Context.deviceScore
 	*/
 	static bool pickPhysicalDevice(const vk::Instance& instance, vk::PhysicalDevice& physicalDevice)
 	{
-- 
GitLab