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()
|
||||
elseif(APPLE)
|
||||
set(_rexglue_macos_vulkan_lib_dirs)
|
||||
set(_rexglue_macos_vulkan_roots)
|
||||
if(DEFINED ENV{VULKAN_SDK})
|
||||
list(APPEND _rexglue_macos_vulkan_lib_dirs "$ENV{VULKAN_SDK}/lib")
|
||||
list(APPEND _rexglue_macos_vulkan_roots "$ENV{VULKAN_SDK}")
|
||||
endif()
|
||||
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()
|
||||
|
||||
foreach(_vk_lib_dir ${_rexglue_macos_vulkan_lib_dirs})
|
||||
if(EXISTS "${_vk_lib_dir}/libMoltenVK.dylib")
|
||||
add_custom_command(TARGET ${target_name} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||
$<TARGET_FILE_DIR:${target_name}>/lib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${_vk_lib_dir}/libMoltenVK.dylib"
|
||||
$<TARGET_FILE_DIR:${target_name}>/lib
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DOUTPUT=$<TARGET_FILE_DIR:${target_name}>/MoltenVK_icd.json
|
||||
-P "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/write_moltenvk_icd.cmake"
|
||||
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()
|
||||
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());
|
||||
|
||||
#if REX_PLATFORM_MAC
|
||||
// The Vulkan loader does not discover MoltenVK from an executable-local SDK
|
||||
// layout by default. Prefer user-provided loader settings, but make local
|
||||
// command-line builds run without requiring VK_ICD_FILENAMES in the shell.
|
||||
// The Vulkan loader does not discover executable-local MoltenVK manifests by
|
||||
// default. Prefer user-provided loader settings, but make release folders run
|
||||
// without requiring VK_ICD_FILENAMES in the shell.
|
||||
if (!std::getenv("VK_ICD_FILENAMES") && !std::getenv("VK_DRIVER_FILES")) {
|
||||
auto local_icd_path =
|
||||
rex::filesystem::GetExecutableFolder() / "share" / "vulkan" / "icd.d" / "MoltenVK_icd.json";
|
||||
const auto executable_folder = rex::filesystem::GetExecutableFolder();
|
||||
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)) {
|
||||
std::string local_icd_path_string = local_icd_path.string();
|
||||
setenv("VK_ICD_FILENAMES", local_icd_path_string.c_str(), 0);
|
||||
setenv("VK_DRIVER_FILES", local_icd_path_string.c_str(), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue