Table of Contents

Ubuntu - GPU - Vulkan - Vulkan Try New Version

Vulkan applications interact with Vulkan drivers through the loader.

More information about the loader is available here: Vulkan Loader

The upstream Vulkan loader source code is available in the following git repos:


Vulkan Validation Layers

The loader also supports the Vulkan validation layers, which are optional components that augment the Vulkan system.


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 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