In this article we will take our basic Vulkan initialisation into the MacOS platform target. Most of the effort to do this is updating the Xcode project structure to include the correct libraries and files - most of the C++ is already done from the previous article.
The MacOS platform target is very similar to our console app so we’ll get a good amount of reuse from our setup scripts we wrote in the previous article.
Open up the macos/setup.sh
script and add the following command directly beneath the existing fetch_framework_sdl2_image
command:
fetch_third_party_lib_vulkan_macos
setup_vulkan_libs_macos
This will download the Vulkan SDK for MacOS if necessary and copy the Vulkan dylib
files into the Frameworks
folder if needed.
Run the setup script in Terminal in the macos
folder and observe the dynamic library files have now been copied into the Frameworks
folder:
: root
+ macos
+ Frameworks
libMoltenVK.dylib
libvulkan.1.dylib
We also need to create the same vulkan/icd.d/MoltenVK_icd.json
structure within our macos
folder exactly like for the console target - and you can commit it to version control too. Create the folders and JSON file like so:
: root
+ macos
+ vulkan
+ icd.d
MoltenVK_icd.json
The content of the MoltenVK_icd.json
file should be the same as for the console target:
{
"file_format_version" : "1.0.0",
"ICD": {
"library_path": "../../Frameworks/libMoltenVK.dylib",
"api_version" : "1.0.0"
}
}
We now need to update the project.yml
file to stitch the libraries and resources into our Xcode project. Open the macos/project.yml
file for editing.
Vulkan SDK headers
To include the Vulkan headers we will update the HEADER_SEARCH_PATHS
section - observe the additional Vulkan include path:
HEADER_SEARCH_PATHS:
- $(PROJECT_DIR)/../../third-party/SDL/include
- $(PROJECT_DIR)/../../third-party/glm
- $(PROJECT_DIR)/../../third-party/tiny-obj-loader
- $(PROJECT_DIR)/../../third-party/SDL2_image
- $(PROJECT_DIR)/../../third-party/vulkan-mac/macOS/include
Link Vulkan dynamic library files
Next we need to link the dylib
files into our Xcode project - edit the dependencies
section to look like this:
dependencies:
- framework: Frameworks/SDL2.framework
embed: true
- framework: Frameworks/SDL2_image.framework
embed: true
- framework: Frameworks/libMoltenVK.dylib
embed: true
- framework: Frameworks/libvulkan.1.dylib
embed: true
- sdk: OpenGL.framework
Observe the addition of the two dylib
files.
MoltenVK ICD meta data
We also need to include the vulkan
folder as a resource asset so it gets bundled up and included in the application so it can find it at runtime and therefore bootstrap the MoltenVK ICD. Update the sources
section to include the vulkan
folder in the resources
build phase:
sources:
- Source
- path: assets
type: folder
buildPhase: resources
- path: vulkan
type: folder
buildPhase: resources
Save and close the project.yml
file the run setup.sh
again. Open the Xcode project and note the addition of the dynamic libraries and the vulkan
resource folder.
Run the project from Xcode and Vulkan should boot up successfully:
That was pretty easy huh? Next up we will tackle iOS.
The code for this article can be found here.
Continue to Part 16: Vulkan setup iOS.
End of part 15