Vulkan version check now supports oder vulkan versions
Signed-off-by: Fabian Sauter <sauter.fabian@mailbox.org>
This commit is contained in:
parent
5dae50c8d9
commit
df8c8ce567
1 changed files with 33 additions and 19 deletions
|
|
@ -1,23 +1,37 @@
|
|||
function(check_vulkan_version)
|
||||
message(STATUS "Ensuring the currently installed driver supports the Vulkan version requested by the Vulkan-Header.")
|
||||
cmake_parse_arguments(VULKAN_CHECK_VERSION "" "INCLUDE_DIR" "" ${ARGN})
|
||||
message(STATUS "Ensuring the currently installed driver supports the Vulkan version requested by the Vulkan Header.")
|
||||
|
||||
# Get the current Vulkan-Header version (e.g. 1.2.189).
|
||||
# Get the current Vulkan Header version (e.g. 1.2.189).
|
||||
# This snippet is based on: https://gitlab.kitware.com/cmake/cmake/-/blob/v3.23.1/Modules/FindVulkan.cmake#L140-156
|
||||
if(VULKAN_CHECK_VERSION_INCLUDE_DIR)
|
||||
set(VULKAN_CORE_H ${VULKAN_CHECK_VERSION_INCLUDE_DIR}/vulkan/vulkan_core.h)
|
||||
if(EXISTS ${VULKAN_CORE_H})
|
||||
file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine REGEX "^#define VK_HEADER_VERSION ")
|
||||
string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion "${VulkanHeaderVersionLine}")
|
||||
file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine2 REGEX "^#define VK_HEADER_VERSION_COMPLETE ")
|
||||
string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion2 "${VulkanHeaderVersionLine2}")
|
||||
list(LENGTH VulkanHeaderVersion2 _len)
|
||||
# Versions >= 1.2.175 have an additional numbers in front of e.g. '0, 1, 2' instead of '1, 2'
|
||||
if(_len EQUAL 3)
|
||||
list(REMOVE_AT VulkanHeaderVersion2 0)
|
||||
file(STRINGS ${VULKAN_CORE_H} VULKAN_HEADER_VERSION_LINE REGEX "^#define VK_HEADER_VERSION ")
|
||||
string(REGEX MATCHALL "[0-9]+" VULKAN_HEADER_VERSION "${VULKAN_HEADER_VERSION_LINE}")
|
||||
file(STRINGS ${VULKAN_CORE_H} VULKAN_HEADER_VERSION_LINE2 REGEX "^#define VK_HEADER_VERSION_COMPLETE ")
|
||||
if(${VULKAN_HEADER_VERSION_LINE2})
|
||||
string(REGEX MATCHALL "[0-9]+" VULKAN_HEADER_VERSION2 "${VULKAN_HEADER_VERSION_LINE2}")
|
||||
list(LENGTH VULKAN_HEADER_VERSION2 _len)
|
||||
# Versions >= 1.2.175 have an additional numbers in front of e.g. '0, 1, 2' instead of '1, 2'
|
||||
if(_len EQUAL 3)
|
||||
list(REMOVE_AT VULKAN_HEADER_VERSION2 0)
|
||||
endif()
|
||||
list(APPEND VULKAN_HEADER_VERSION2 ${VULKAN_HEADER_VERSION})
|
||||
list(JOIN VULKAN_HEADER_VERSION2 "." VULKAN_HEADER_VERSION)
|
||||
else()
|
||||
file(STRINGS ${VULKAN_CORE_H} VULKAN_HEADER_API_VERSION_1_2 REGEX "^#define VK_API_VERSION_1_2.*")
|
||||
if(NOT ${VULKAN_HEADER_API_VERSION_1_2} STREQUAL "")
|
||||
set(VULKAN_HEADER_VERSION "1.2.${VULKAN_HEADER_VERSION}")
|
||||
else()
|
||||
file(STRINGS ${VULKAN_CORE_H} VULKAN_HEADER_API_VERSION_1_1 REGEX "^#define VK_API_VERSION_1_1.*")
|
||||
if(NOT ${VULKAN_HEADER_API_VERSION_1_1} STREQUAL "")
|
||||
set(VULKAN_HEADER_VERSION "1.1.${VULKAN_HEADER_VERSION}")
|
||||
else()
|
||||
message(FATAL_ERROR "'${VULKAN_CORE_H}' does not contain a supported Vulkan version. Probably because its < 1.2.0.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
list(APPEND VulkanHeaderVersion2 ${VulkanHeaderVersion})
|
||||
list(JOIN VulkanHeaderVersion2 "." VULKAN_HEADER_VERSION)
|
||||
else()
|
||||
message(FATAL_ERROR "'${VULKAN_CORE_H}' does not exist. Try calling 'find_package(Vulkan REQUIRED)' before you call this function or set 'Vulkan_INCLUDE_DIR' manually!")
|
||||
return()
|
||||
|
|
@ -47,22 +61,22 @@ function(check_vulkan_version)
|
|||
|
||||
# Compare driver and header version
|
||||
if(${VULKAN_DRIVER_VERSION} VERSION_LESS ${VULKAN_HEADER_VERSION})
|
||||
# Version missmatch. Let us check if the major version is the same.
|
||||
# Version missmatch. Let us check if the minor version is the same.
|
||||
if(${VULKAN_DRIVER_VERSION} MATCHES "[0-9]+.([0-9]+).[0-9]+")
|
||||
set(VULKAN_DRIVER_MAJOR_VERSION ${CMAKE_MATCH_1})
|
||||
set(VULKAN_DRIVER_MINOR_VERSION ${CMAKE_MATCH_1})
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid Vulkan driver version '${VULKAN_DRIVER_VERSION}' found. Expected version in the following format: '[0-9]+.[0-9]+.[0-9]+'")
|
||||
endif()
|
||||
if(${VULKAN_HEADER_VERSION} MATCHES "[0-9]+.([0-9]+).[0-9]+")
|
||||
set(VULKAN_HEADER_MAJOR_VERSION ${CMAKE_MATCH_1})
|
||||
set(VULKAN_HEADER_MINOR_VERSION ${CMAKE_MATCH_1})
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid Vulkan-Header version '${VULKAN_HEADER_VERSION}' found. Expected version in the following format: '[0-9]+.[0-9]+.[0-9]+'")
|
||||
message(FATAL_ERROR "Invalid Vulkan Header version '${VULKAN_HEADER_VERSION}' found. Expected version in the following format: '[0-9]+.[0-9]+.[0-9]+'")
|
||||
endif()
|
||||
|
||||
if(${VULKAN_DRIVER_MAJOR_VERSION} EQUAL ${VULKAN_HEADER_MAJOR_VERSION})
|
||||
message(WARNING "Your GPU driver does not support Vulkan > ${VULKAN_DRIVER_VERSION}, but you try to use Vulkan-Header ${VULKAN_HEADER_VERSION}. At least your driver supports the same major version (${VULKAN_DRIVER_MAJOR_VERSION}), so this should be fine but keep it in mind if encounter some strange behavior.")
|
||||
if(${VULKAN_DRIVER_MINOR_VERSION} EQUAL ${VULKAN_HEADER_MINOR_VERSION})
|
||||
message(WARNING "Your GPU driver does not support Vulkan > ${VULKAN_DRIVER_VERSION}, but you try to use Vulkan Header ${VULKAN_HEADER_VERSION}. At least your driver supports the same minor version (${VULKAN_DRIVER_MINOR_VERSION}), so this should be fine but keep it in mind if encounter some strange behavior.")
|
||||
else()
|
||||
message(FATAL_ERROR "Your GPU driver does not support Vulkan > ${VULKAN_DRIVER_VERSION}, but you try to use Vulkan-Header ${VULKAN_HEADER_VERSION}.")
|
||||
message(FATAL_ERROR "Your GPU driver does not support Vulkan > ${VULKAN_DRIVER_VERSION}, but you try to use Vulkan Header ${VULKAN_HEADER_VERSION}.")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Vulkan version check successful!")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue