stage MoltenVK runtime files
This commit is contained in:
parent
5b6b87bcea
commit
243c8e59ef
3 changed files with 35 additions and 38 deletions
|
|
@ -115,10 +115,8 @@ function(rexglue_configure_target target_name)
|
||||||
endforeach()
|
endforeach()
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
set(_rexglue_macos_vulkan_lib_dirs)
|
set(_rexglue_macos_vulkan_lib_dirs)
|
||||||
set(_rexglue_macos_vulkan_roots)
|
|
||||||
if(DEFINED ENV{VULKAN_SDK})
|
if(DEFINED ENV{VULKAN_SDK})
|
||||||
list(APPEND _rexglue_macos_vulkan_lib_dirs "$ENV{VULKAN_SDK}/lib")
|
list(APPEND _rexglue_macos_vulkan_lib_dirs "$ENV{VULKAN_SDK}/lib")
|
||||||
list(APPEND _rexglue_macos_vulkan_roots "$ENV{VULKAN_SDK}")
|
|
||||||
endif()
|
endif()
|
||||||
list(APPEND _rexglue_macos_vulkan_lib_dirs /opt/homebrew/lib /usr/local/lib)
|
list(APPEND _rexglue_macos_vulkan_lib_dirs /opt/homebrew/lib /usr/local/lib)
|
||||||
|
|
||||||
|
|
@ -136,33 +134,12 @@ function(rexglue_configure_target target_name)
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(_vk_lib_dir ${_rexglue_macos_vulkan_lib_dirs})
|
|
||||||
if(EXISTS "${_vk_lib_dir}/libMoltenVK.dylib")
|
|
||||||
add_custom_command(TARGET ${target_name} POST_BUILD
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
COMMAND ${CMAKE_COMMAND}
|
||||||
$<TARGET_FILE_DIR:${target_name}>/lib
|
-DOUTPUT=$<TARGET_FILE_DIR:${target_name}>/MoltenVK_icd.json
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
-P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/write_moltenvk_icd.cmake"
|
||||||
"${_vk_lib_dir}/libMoltenVK.dylib"
|
|
||||||
$<TARGET_FILE_DIR:${target_name}>/lib
|
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
break()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
foreach(_vk_root ${_rexglue_macos_vulkan_roots})
|
|
||||||
if(EXISTS "${_vk_root}/share/vulkan/icd.d/MoltenVK_icd.json")
|
|
||||||
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
||||||
$<TARGET_FILE_DIR:${target_name}>/share/vulkan/icd.d
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
"${_vk_root}/share/vulkan/icd.d/MoltenVK_icd.json"
|
|
||||||
$<TARGET_FILE_DIR:${target_name}>/share/vulkan/icd.d
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
break()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
|
||||||
14
cmake/write_moltenvk_icd.cmake
Normal file
14
cmake/write_moltenvk_icd.cmake
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
if(NOT DEFINED OUTPUT OR OUTPUT STREQUAL "")
|
||||||
|
message(FATAL_ERROR "OUTPUT must be set")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(WRITE "${OUTPUT}" [=[
|
||||||
|
{
|
||||||
|
"file_format_version": "1.0.0",
|
||||||
|
"ICD": {
|
||||||
|
"library_path": "./libMoltenVK.dylib",
|
||||||
|
"api_version": "1.4.0",
|
||||||
|
"is_portability_driver": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]=])
|
||||||
|
|
@ -34,16 +34,22 @@ std::unique_ptr<VulkanInstance> VulkanInstance::Create(const bool with_surface,
|
||||||
std::unique_ptr<VulkanInstance> vulkan_instance(new VulkanInstance());
|
std::unique_ptr<VulkanInstance> vulkan_instance(new VulkanInstance());
|
||||||
|
|
||||||
#if REX_PLATFORM_MAC
|
#if REX_PLATFORM_MAC
|
||||||
// The Vulkan loader does not discover MoltenVK from an executable-local SDK
|
// The Vulkan loader does not discover executable-local MoltenVK manifests by
|
||||||
// layout by default. Prefer user-provided loader settings, but make local
|
// default. Prefer user-provided loader settings, but make release folders run
|
||||||
// command-line builds run without requiring VK_ICD_FILENAMES in the shell.
|
// without requiring VK_ICD_FILENAMES in the shell.
|
||||||
if (!std::getenv("VK_ICD_FILENAMES") && !std::getenv("VK_DRIVER_FILES")) {
|
if (!std::getenv("VK_ICD_FILENAMES") && !std::getenv("VK_DRIVER_FILES")) {
|
||||||
auto local_icd_path =
|
const auto executable_folder = rex::filesystem::GetExecutableFolder();
|
||||||
rex::filesystem::GetExecutableFolder() / "share" / "vulkan" / "icd.d" / "MoltenVK_icd.json";
|
const std::filesystem::path local_icd_paths[] = {
|
||||||
|
executable_folder / "MoltenVK_icd.json",
|
||||||
|
executable_folder / "share" / "vulkan" / "icd.d" / "MoltenVK_icd.json",
|
||||||
|
};
|
||||||
|
for (const auto& local_icd_path : local_icd_paths) {
|
||||||
if (std::filesystem::is_regular_file(local_icd_path)) {
|
if (std::filesystem::is_regular_file(local_icd_path)) {
|
||||||
std::string local_icd_path_string = local_icd_path.string();
|
std::string local_icd_path_string = local_icd_path.string();
|
||||||
setenv("VK_ICD_FILENAMES", local_icd_path_string.c_str(), 0);
|
setenv("VK_ICD_FILENAMES", local_icd_path_string.c_str(), 0);
|
||||||
setenv("VK_DRIVER_FILES", local_icd_path_string.c_str(), 0);
|
setenv("VK_DRIVER_FILES", local_icd_path_string.c_str(), 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue