Added multi GPU support for the vulkan version check
Signed-off-by: Fabian Sauter <sauter.fabian@mailbox.org>
This commit is contained in:
parent
a53d2b9a4e
commit
e58bc7525a
1 changed files with 63 additions and 22 deletions
|
|
@ -57,34 +57,75 @@ function(check_vulkan_version)
|
|||
message(FATAL_ERROR "Running vulkaninfo failed with return code ${VULKAN_INFO_RETURN}. Make sure you have 'vulkan-tools' installed. Result:\n${VULKAN_INFO_OUTPUT}?")
|
||||
return()
|
||||
endif()
|
||||
if(${VULKAN_INFO_OUTPUT} MATCHES "apiVersion[ ]+=[ ]+[0-9]+[ ]+[(]([0-9]+[.][0-9]+[.][0-9]+)[)]")
|
||||
set(VULKAN_DRIVER_VERSION ${CMAKE_MATCH_1})
|
||||
message(STATUS "vulkaninfo reported supported version ${VULKAN_DRIVER_VERSION}")
|
||||
else()
|
||||
message(FATAL_ERROR "No valid version found in vulkaninfo. Does your GPU (driver) support Vulkan?")
|
||||
return()
|
||||
|
||||
string(REGEX MATCHALL "(GPU[0-9]+)" GPU_IDS ${VULKAN_INFO_OUTPUT})
|
||||
if(NOT GPU_IDS)
|
||||
message(FATAL_ERROR "No GPU supporting Vulkan found in vulkaninfo. Does your GPU (driver) support Vulkan?")
|
||||
endif()
|
||||
|
||||
# Compare driver and header version
|
||||
if(${VULKAN_DRIVER_VERSION} VERSION_LESS ${VULKAN_HEADER_VERSION})
|
||||
string(REGEX MATCHALL "apiVersion[ ]*=[ ]*[0-9a-fA-F]+[ ]+[(]([0-9]+[.][0-9]+[.][0-9]+)[)]" GPU_API_VERSIONS ${VULKAN_INFO_OUTPUT})
|
||||
if(NOT GPU_API_VERSIONS)
|
||||
message(FATAL_ERROR "No valid Vulkan API version found in vulkaninfo. Does your GPU (driver) support Vulkan?")
|
||||
endif()
|
||||
|
||||
# Check length
|
||||
# message(FATAL_ERROR "GPUS: ${GPU_IDS}")
|
||||
list(LENGTH GPU_IDS GPU_IDS_LENGTH)
|
||||
list(LENGTH GPU_API_VERSIONS GPU_API_VERSIONS_LENGTH)
|
||||
if(NOT ${GPU_IDS_LENGTH} EQUAL ${GPU_API_VERSIONS_LENGTH})
|
||||
message(FATAL_ERROR "Found ${GPU_IDS_LENGTH} GPUs, but ${GPU_API_VERSIONS_LENGTH} API versions in vulkaninfo. We expected to find an equal amount of them.")
|
||||
endif()
|
||||
|
||||
# Compare versions
|
||||
set(VALID_GPU "")
|
||||
set(VALID_VULKAN_VERSION "")
|
||||
math(EXPR ITER_LEN "${GPU_IDS_LENGTH} - 1")
|
||||
foreach(INDEX RANGE ${ITER_LEN})
|
||||
list(GET GPU_IDS ${INDEX} GPU)
|
||||
list(GET GPU_API_VERSIONS ${INDEX} API_VERSION)
|
||||
|
||||
# Extract API version
|
||||
if(${API_VERSION} MATCHES "apiVersion[ ]*=[ ]*[0-9a-fA-F]+[ ]+[(]([0-9]+[.][0-9]+[.][0-9]+)[)]")
|
||||
set(VULKAN_DRIVER_VERSION ${CMAKE_MATCH_1})
|
||||
else()
|
||||
message(FATAL_ERROR "API version match failed. This should not have happened...")
|
||||
endif()
|
||||
|
||||
message(STATUS "${GPU} supports Vulkan API version '${VULKAN_DRIVER_VERSION}'.")
|
||||
|
||||
# Compare driver and header version
|
||||
if(${VULKAN_DRIVER_VERSION} VERSION_LESS ${VULKAN_HEADER_VERSION})
|
||||
# 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_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_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]+'")
|
||||
endif()
|
||||
if(${VULKAN_DRIVER_VERSION} MATCHES "[0-9]+[.]([0-9]+)[.][0-9]+")
|
||||
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_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]+'")
|
||||
endif()
|
||||
|
||||
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.")
|
||||
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.")
|
||||
set(VALID_GPU ${GPU})
|
||||
set(VALID_VULKAN_VERSION ${VULKAN_DRIVER_VERSION})
|
||||
break()
|
||||
else()
|
||||
message(STATUS "${GPU} does not support Vulkan > ${VULKAN_DRIVER_VERSION}.")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Your GPU driver does not support Vulkan > ${VULKAN_DRIVER_VERSION}, but you try to use Vulkan Header ${VULKAN_HEADER_VERSION}.")
|
||||
set(VALID_GPU ${GPU})
|
||||
set(VALID_VULKAN_VERSION ${VULKAN_DRIVER_VERSION})
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(${GPU} STREQUAL "")
|
||||
message(FATAL_ERROR "None of your GPUs supports Vulkan Header ${VULKAN_HEADER_VERSION}. Please try updating your driver, or downgrade Vulkan header.")
|
||||
else()
|
||||
message(STATUS "Vulkan version check successful!")
|
||||
message("Valid GPU (${VALID_GPU}) for Vulkan header version ${VULKAN_HEADER_VERSION} found. ${VALID_GPU} supports up to Vulkan ${VALID_VULKAN_VERSION}.")
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue