====== Ubuntu - GPU - Vulkan - Vulkan Try New Version ======
Vulkan applications interact with Vulkan drivers through the loader.
* The loader is responsible for supporting multiple GPUs and their drivers.
* For supporting the latest Vulkan API version, the loader also needs to be the matching version.
More information about the loader is available here: [[https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md|Vulkan Loader]]
The upstream Vulkan loader source code is available in the following git repos:
* [[https://github.com/KhronosGroup/Vulkan-Headers|Vulkan Headers]]
* [[https://github.com/KhronosGroup/Vulkan-Loader|Vulkan Loader]]
* [[https://github.com/KhronosGroup/Vulkan-Tools|Vulkan Tools]]
----
==== Vulkan Validation Layers ====
The loader also supports the Vulkan validation layers, which are optional components that augment the Vulkan system.
* Layers can intercept, evaluate, and modify existing Vulkan functions on their way from the application down to the hardware.
* Layers are a critical component of developing correct Vulkan applications.
* More information about the validation layers is available here: [[https://github.com/KhronosGroup/Vulkan-ValidationLayers|Vulkan Validation Layers]]
----
===== Build the loader =====
sudo apt-get update && sudo apt-get install git build-essential libx11-xcb-dev libxkbcommon-dev libwayland-dev libxrandr-dev cmake
git clone https://github.com/KhronosGroup/Vulkan-Loader.git
cd Vulkan-Loader
mkdir build
cd build
python ../scripts/update_deps.py
cmake -C helper.cmake ..
cmake --build .
or for tests...
cmake -D UPDATE_DEPS=ON -D BUILD_TESTS=ON ..
cmake --build .
ctest
or for install...
sudo apt-get update && sudo apt-get install git build-essential libx11-xcb-dev libxkbcommon-dev libwayland-dev libxrandr-dev cmake
git clone https://github.com/KhronosGroup/Vulkan-Loader.git
cd Vulkan-Loader && mkdir build && cd build
python3 ../scripts/update_deps.py
cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install ..
make -j8
**NOTE:** Detailed instructions are available in [[https://github.com/KhronosGroup/Vulkan-Loader/blob/master/BUILD.md|Vulkan-Loader/BUILD.md]]
* Optionally instead of the 2 last lines use this instead:
cmake -C helper.cmake ..
cmake --build .
* **CMAKE_BUILD_TYPE**: can be **Release** or **Debug**.
* **VULKAN_HEADERS_INSTALL_DIR**: the absolute path to a Vulkan-Headers install directory must be provided.
* **CMAKE_INSTALL_PREFIX**: to customize the install location also modifies the loader search paths to include searching for layers in the specified install location.
* The default value for CMAKE_INSTALL_PREFIX is /usr/local, which would be used if you do not specify CMAKE_INSTALL_PREFIX.
* Setting CMAKE_INSTALL_PREFIX to /tmp/build causes the loader to search /tmp/build/etc/vulkan/explicit_layer.d and /tmp/build/share/vulkan/explicit_layer.d for the layer JSON files.
* The loader also searches the "standard" system locations of /etc/vulkan/explicit_layer.d and /usr/share/vulkan/explicit_layer.d after searching the two locations under /tmp/build.
* Then run make install as before, which will install the files in /tmp/build sudo make install
----
====== Use the newly built loader ======
To use the newly built loader:
export LD_LIBRARY_PATH=$(pwd)/loader
----
===== Install (Optional) =====
The newly built loader can be installed to /usr/local/lib by running
sudo make install
Refresh the system loader search cache.
sudo ldconfig
----
===== Test =====
VK_ICD_FILENAMES=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/icd/VkICD_mock_icd.json vulkaninfo --summary
VK_ICD_FILENAMES=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/icd/VkICD_mock_icd.json /home/peter/Downloads/0/a/Vulkan-Tools-main/build/vulkaninfo/vulkaninfo --summary
VK_ICD_FILENAMES=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/icd/VkICD_mock_icd.json /home/peter/Downloads/0/a/Vulkan-Tools-main/build/vulkaninfo/vulkaninfo | grep driver
LD_LIBRARY_PATH=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/Vulkan-Loader/build/loader/ VK_ICD_FILENAMES=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/icd/VkICD_mock_icd.json /home/peter/Downloads/0/a/Vulkan-Tools-main/build/vulkaninfo/vulkaninfo --summary
LD_LIBRARY_PATH=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/Vulkan-Loader/build/loader/ VK_ICD_FILENAMES=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/icd/VkICD_mock_icd.json /home/peter/Downloads/0/a/Vulkan-Tools-main/build/vulkaninfo/vulkaninfo --summary
LD_LIBRARY_PATH=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/Vulkan-Loader/build/loader/ vulkaninfo --summary
LD_LIBRARY_PATH=/home/peter/Downloads/0/a/Vulkan-Tools-main/build/Vulkan-Loader/build/loader/ vulkaninfo | grep driver
----
===== Test =====
A test suite for the Vulkan loader.
ctest
returns:
Test project /home/peter/Downloads/0/a/Vulkan-Loader-main/build
Start 1: Allocation.Instance
1/538 Test #1: Allocation.Instance ............................................................................. Passed 0.01 sec
Start 2: Allocation.GetInstanceProcAddr
2/538 Test #2: Allocation.GetInstanceProcAddr .................................................................. Passed 0.01 sec
Start 3: Allocation.EnumeratePhysicalDevices
3/538 Test #3: Allocation.EnumeratePhysicalDevices ............................................................. Passed 0.01 sec
Start 4: Allocation.InstanceAndDevice
4/538 Test #4: Allocation.InstanceAndDevice .................................................................... Passed 0.01 sec
Start 5: Allocation.InstanceButNotDevice
5/538 Test #5: Allocation.InstanceButNotDevice ................................................................. Passed 0.01 sec
Start 6: Allocation.DeviceButNotInstance
...
...
100% tests passed, 0 tests failed out of 538
Total Test time (real) = 10.89 sec
----
===== References =====
https://developer.nvidia.com/embedded/vulkan
https://github.com/KhronosGroup/Vulkan-Headers
https://github.com/KhronosGroup/Vulkan-Loader
https://github.com/KhronosGroup/Vulkan-Tools
https://github.com/KhronosGroup/Vulkan-Loader/blob/main/loader/LoaderAndLayerInterface.md
https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderInterfaceArchitecture.md
https://github.com/KhronosGroup/Vulkan-Loader/blob/master/BUILD.md
https://github.com/KhronosGroup/Vulkan-ValidationLayers
https://www.khronos.org/conformance/adopters/conformant-products