Refactors the wsialloc interface in the layer. This patch ensures that wsialloc interface could be ported to different GPU architectures and systems that could have different requirements Change-Id: I6593f2373abc75fb2074700d156ba3797d7ff058 Signed-off-by: Normunds Rieksts <normunds.rieksts@arm.com> Signed-off-by: Rosen Zhelev <rosen.zhelev@arm.com> |
||
|---|---|---|
| layer | ||
| util | ||
| wsi | ||
| .clang-format | ||
| .gitlab-ci.yml | ||
| CMakeLists.txt | ||
| DCO.txt | ||
| LICENSE | ||
| README.md | ||
Vulkan® Window System Integration Layer
Introduction
This project is a Vulkan® layer which implements some of the Vulkan® window system
integration extensions such as VK_KHR_swapchain. The layer is designed to be
GPU vendor agnostic when used as part of the Vulkan® ICD/loader architecture.
Our vision for the project is to become the de facto implementation for Vulkan® window system integration extensions so that they need not be implemented in the ICD; instead, the implementation of these extensions are shared across vendors for mutual benefit.
The project currently implements support for VK_EXT_headless_surface and
its dependencies. Experimental support for VK_KHR_wayland_surface can be
enabled via a build option as explained below.
Building
Dependencies
- CMake version 3.4.3 or above.
- C++11 compiler.
- Vulkan® loader and associated headers with support for the
VK_EXT_headless_surfaceextension.
Building the Vulkan® loader
This step is not necessary if your system already has a loader and associated
headers with support for the VK_EXT_headless_surface extension. We include
these instructions for completeness.
git clone https://github.com/KhronosGroup/Vulkan-Loader.git
mkdir Vulkan-Loader/build
cd Vulkan-Loader/build
../scripts/update_deps.py
cmake -C helper.cmake ..
make
make install
Building the layer
The layer requires a version of the loader and headers that includes support for
the VK_EXT_headless_surface extension. By default, the build system will use
the system Vulkan® headers as reported by pkg-config. This may be overriden by
specifying VULKAN_CXX_INCLUDE in the CMake configuration, for example:
cmake . -DVULKAN_CXX_INCLUDE="path/to/vulkan-headers"
If the loader and associated headers already meet the requirements of the layer then the build steps are straightforward:
cmake . -Bbuild
make -C build
Building with Wayland support
In order to build with Wayland support the BUILD_WSI_WAYLAND build option
must be used, the SELECT_EXTERNAL_ALLOCATOR option has to be set to
an allocator (currently only ion is supported) and the KERNEL_DIR option must
be defined as the root of the Linux kernel source.
cmake . -DVULKAN_CXX_INCLUDE="path/to/vulkan-header" \
-DBUILD_WSI_WAYLAND=1 \
-DSELECT_EXTERNAL_ALLOCATOR=ion \
-DKERNEL_DIR="path/to/linux-kernel-source"
Wayland support is still EXPERIMENTAL. What this means in practice is that the support is incomplete and not ready for prime time.
Installation
Copy the shared library libVkLayer_window_system_integration.so and JSON
configuration VkLayer_window_system_integration.json into a Vulkan®
implicit layer directory.
Contributing
We are open for contributions.
- The software is provided under the MIT license. Contributions to this project are accepted under the same license.
- Please also ensure that each commit in the series has at least one
Signed-off-by:line, using your real name and email address. The names in theSigned-off-by:andAuthor:lines must match. If anyone else contributes to the commit, they must also add their ownSigned-off-by:line. By adding this line the contributor certifies the contribution is made under the terms of the Developer Certificate of Origin (DCO). - Questions, bug reports, et cetera are raised and discussed on the issues page.
- Please make merge requests into the master branch.
- Code should be formatted with clang-format using the project's .clang-format configuration.
Contributors are expected to abide by the freedesktop.org code of conduct.
Khronos® Conformance
This software is based on a published Khronos® Specification and is expected to pass the relevant parts of the Khronos® Conformance Testing Process when used as part of a conformant Vulkan® implementation.