diff --git a/LICENSE.txt b/LICENSE.txt
index fb9cb635c..a42dc401c 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -235,9 +235,6 @@ The OpenCL Intercept Layer
(https://github.com/intel/opencl-intercept-layer.git) may be fetched under the
build directory and is held under its own licensing terms.
-The source/vk/external/Khronos folder (Khronos Vulkan headers), if present, is
-held under its own licensing terms.
-
The modules/spirv-ll/external/SPIRV-Headers folder (Khronos SPIR-V headers), if
present, is held under its own licensing terms.
diff --git a/README.md b/README.md
index 0dfb93da4..7c621b3ea 100644
--- a/README.md
+++ b/README.md
@@ -4,14 +4,14 @@
# oneAPI Construction Kit
-The oneAPI Construction Kit is a framework to provide implementations of open standards, such as OpenCL and Vulkan, for a wide range of devices. The oneAPI Construction Kit can be used to build with the oneAPI Toolkit. The oneAPI Toolkit includes support for various open standards, such as OpenMP, SYCL, and DPC++. DPC++ is based on the SYCL programming model, which allows to write single-source C++ code that can target both CPUs and GPUs. To get more information on oneAPI, please visit https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html.
+The oneAPI Construction Kit is a framework to provide implementations of open standards, such as OpenCL, for a wide range of devices. The oneAPI Construction Kit can be used to build with the oneAPI Toolkit. The oneAPI Toolkit includes support for various open standards, such as OpenMP, SYCL, and DPC++. DPC++ is based on the SYCL programming model, which allows to write single-source C++ code that can target both CPUs and GPUs. To get more information on oneAPI, please visit https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html.
The oneAPI Construction Kit is part of the [UXL Foundation].
[UXL Foundation]: http://www.uxlfoundation.org
>**_Note:_**
- It is not intended to be used as a standalone OpenCL or Vulkan implementation. It does not support the oneAPI Level Zero API.
+ It is not intended to be used as a standalone OpenCL implementation. It does not support the oneAPI Level Zero API.
For more information about building, implementing and maintaining the oneAPI Construction Kit please take the time to read the [developer guide](doc/developer-guide.md) and the other documentation in the
`doc` directory.
diff --git a/doc/_static/ca_arch.svg b/doc/_static/ca_arch.svg
index efeb14bb0..df3bf4047 100644
--- a/doc/_static/ca_arch.svg
+++ b/doc/_static/ca_arch.svg
@@ -2435,17 +2435,6 @@
y="-684.76318"
style="font-size:11.2889px;fill:#a63d76;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
id="tspan5806">OpenCL API
- Vulkan API
.so`` or ``.dll``, depending on if the platform is Linux or
Windows. The ICD loaders gets linked to application code so that at runtime the
ICD loader will select the implementation of the standard to run
and load the chosen shared library, allowing multiple platforms to coexist on
the same system.
-To avoid naming collisions with the ICD our OpenCL and Vulkan builds by default
+To avoid naming collisions with the ICD our OpenCL builds by default
are named ``CL`` and ``VK``, however these can be overridden via the
``CA_CL_LIBRARY_NAME`` and ``CA_VK_LIBRARY_NAME`` options. Providing customer
teams with the flexibility to deliver on embedded systems without an ICD loader,
@@ -108,11 +108,9 @@ versioning properties, a `VERSION`_ property for the build version and a
``major.minor``, where the major component is incremented on API breaking
changes and minor for non-breaking API changes, e.g bug fixes. The `SOVERSION`_
property can then be set as the major component of `VERSION`_. We default
-`VERSION`_ for both OpenCL and Vulkan to our oneAPI Construction Kit
+`VERSION`_ for both OpenCL to our oneAPI Construction Kit
`PROJECT_VERSION`_, but provide the ``CA_CL_LIBRARY_VERSION`` option to
-override that behavior for OpenCL. We don't provide an equivalent CMake
-library version option for Vulkan as simulating the ICD loader is a use
-case that we have yet to encounter.
+override that behavior for OpenCL.
On Linux an OpenCL build with our default options will result in the following
symbolic links being created to the fully qualified shared library.
diff --git a/doc/design.md b/doc/design.md
index f73801e5e..1a4f62591 100644
--- a/doc/design.md
+++ b/doc/design.md
@@ -9,7 +9,7 @@ within the directory structure.
A common structure is used as much as possible throughout the oneAPI
Construction Kit repository. Implementations of open standards, such as
-OpenCL and Vulkan, exist as subdirectories of the `source` directory and
+OpenCL, exist as subdirectories of the `source` directory and
shared components, or modules, reside in the `modules` directory.
Throughout the repository the following layout is adhered to when applicable:
diff --git a/doc/developer-guide.md b/doc/developer-guide.md
index de8c95532..25bd8408f 100644
--- a/doc/developer-guide.md
+++ b/doc/developer-guide.md
@@ -14,15 +14,12 @@ Kit build then uses this installation as a dependency.
Current directory layout:
* `source`: Contains source specific to implementing open standards, such as
- OpenCL and Vulkan.
+ OpenCL.
* `source/cl`: Encapsulates all source code which implements the OpenCL open
standard, this is an optional component and may not be present dependent on
license agreement.
* `source/cl/source/extension/include`: This directory holds the headers
for the Codeplay specific OpenCL extensions.
- * `source/vk`: Encapsulates all source code which implements the Vulkan open
- standard, this is an optional component and may not be present dependent on
- license agreement.
* `modules`: Contains shared _modules_ used in the implementation of the open
standards in `source`. For details on the _modules_ layout in the [modules
documentation](modules.md). Currently we have the following modules:
@@ -254,7 +251,7 @@ The builtin CMake options used when invoking CMake on the command line.
a supported LLVM version.
* `CA_ENABLE_API`: Semi-colon separated list of APIs to enable. Valid values
- are `cl` for OpenCL, and `vk` for Vulkan. Enabling an API when an optional
+ are `cl` for OpenCL. Enabling an API when an optional
component is not present dependent on license agreement will result in a CMake
error. The default is `cl;vk`.
@@ -315,7 +312,7 @@ The builtin CMake options used when invoking CMake on the command line.
`RPATH` for all targets when they are installed using `CMAKE_INSTALL_RPATH`,
this ensures that when the `install` target is invoked the user does not need
to specify `LD_LIBRARY_PATH` to correctly execute a test binary in order to
- use the installed OpenCL or Vulkan library. Do disable this behaviour set
+ use the installed OpenCL library. Do disable this behaviour set
`-DCMAKE_SKIP_RPATH=ON` when configuring CMake in build directory.
* `CA_HOST_TARGET__CPU`, `CA_HOST_TARGET__FEATURES`: These options
@@ -374,7 +371,7 @@ The builtin CMake options used when invoking CMake on the command line.
#### oneAPI Construction Kit CMake Build Targets
-* `ComputeAorta`: Build the OpenCL and Vulkan libraries, if present, and all
+* `ComputeAorta`: Build the OpenCL libraries, if present, and all
their test suites.
* `check-ock`/`check-ock-`: Build and run all short running test
suites, this selection of testing is used by continuous integration to verify
@@ -407,13 +404,6 @@ The builtin CMake options used when invoking CMake on the command line.
* `check-ock-cl`: Build and run various OpenCL test suites, primarily UnitCL and
selected short running OpenCL CTS tests.
-##### oneAPI Construction Kit Vulkan CMake Build Targets
-
-* `VK`: Build only the Vulkan library, only available when Vulkan is enabled.
-* `UnitVK`: Build the UnitVK test suite, as well as the Vulkan library.
-* `VKICDManifest`: Generates the Vulkan ICD manifest, Linux only.
-* `check-ock-vk`: Build and run UnitVK and spirv-ll lit tests.
-
## Compiling
### Compiling LLVM
@@ -644,8 +634,7 @@ cmake --build %CD%\build-x86_64-Debug --target check --config Debug
Compiling the oneAPI Construction Kit without LLVM is also referred to as an
offline-only configuration or disabling the runtime compiler. In this mode the
-oneAPI Construction Kit does not include a JIT compiler for OpenCL, offline-only
-is currently not supported for Vulkan and is disabled in the configuration.
+oneAPI Construction Kit does not include a JIT compiler for OpenCL.
#### Compiling the oneAPI Construction Kit without LLVM on Linux
diff --git a/doc/getting-started.rst b/doc/getting-started.rst
index 7367d9327..ae00d5644 100644
--- a/doc/getting-started.rst
+++ b/doc/getting-started.rst
@@ -120,7 +120,6 @@ configuration.
* `Git`_
* `CMake`_ 3.4.3+
* `Python`_ 3.6.9+
-* `Vulkan SDK`_ 1.1.97+
Windows 10 does not provide an adequate package manager. However, the
third-party `Chocolatey `_
@@ -168,53 +167,20 @@ Windows 11
Windows 11 is supported, but has not been tested to the same level as Windows 10.
-Vulkan SDK
-----------
-
-For Vulkan support the Vulkan SDK is required to be installed. It can be
-acquired from `LunarG `_. The latest version
-should always be supported. The minimum supported version is 1.1.97.
-
-The Vulkan SDK includes `SPIRV-Tools`_ as part of the package. Therefore
-`SPIRV-Tools`_ does not need to be installed separately.
-
Package Manager Installation
............................
-Users of Ubuntu 20.04 and later should configure their apt package manager to
-install the Vulkan SDK packages directly as described by the `LunarG Vulkan SDK
-packages`_ page. This installation method does neither set nor require the
-:envvar:`VULKAN_SDK` environment variable, avoiding the configuration
-complexities experienced when installing manually.
-
+SPIRV-Tools is needed to build the OneAPI Construction Kit. This can either come from Vulkan
+SDK OR installing spirv tools directly. On windows, we suggest installing the vulkan SDK>.
Windows users should install directly from `LunarG
`_, as at the time of writing the Vulkan SDK
cannot be installed through Chocolatey.
-Manual Installation
-...................
-
-Other Linux users will need to take some extra steps after downloading the
-tarball distribution. First run the ``build_tools.sh`` script; then source the
-``setup-env.sh`` script whilst the Vulkan SDK directory as the current
-directory. These steps are needed to access the ``spirv-as`` tool through the
-:envvar:`VULKAN_SDK` environment variable in order to successfully compile
-the oneAPI Construction Kit and generate all test suites correctly.
-
-.. hint::
- Modifying ``.bashrc`` to source the ``setup-env.sh`` script avoids having to
- remember to do this on every new terminal session building the oneAPI
- Construction Kit.
-
-The ``setup-env.sh`` script prepends :envvar:`VULKAN_SDK` to the system
-:envvar:`PATH`, leading to prioritization of :envvar:`VULKAN_SDK` binaries
-ahead of any other versions of the tools which may be installed in ``/usr/bin``.
SPIRV-Tools
-----------
-When OpenCL support is required but Vulkan support is not, `SPIRV-Tools`_
-**may** optionally be installed on the system :envvar:`PATH`. This is
+`SPIRV-Tools`_ **may** optionally be installed on the system :envvar:`PATH`. This is
recommended to achieve good coverage of SPIR-V compilation paths.
Follow the build instructions, or install the pre-built binaries in the
diff --git a/doc/index.rst b/doc/index.rst
index 129622b44..1d8fa35b6 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -6,14 +6,14 @@ The documentation herein refers to version |release| of the oneAPI Construction
The heterogeneous language toolkit.
===================================
-The oneAPI Construction Kit is a framework to provide implementations of open standards, such as OpenCL and Vulkan,
+The oneAPI Construction Kit is a framework to provide implementations of open standards, such as OpenCL,
for a wide range of devices. The oneAPI Construction Kit can be used to build with the oneAPI Toolkit. The oneAPI Toolkit
includes support for various open standards, such as OpenMP, SYCL, and DPC++. DPC++ is based on the SYCL programming
model, which allows to write single-source C++ code that can target both CPUs and GPUs. To get more information on oneAPI,
please visit `oneAPI `_.
.. note::
- It is not intended to be used as a standalone OpenCL or Vulkan implementation. It does not support the oneAPI Level Zero API.
+ It is not intended to be used as a standalone OpenCL implementation. It does not support the oneAPI Level Zero API.
.. toctree::
:maxdepth: 3
diff --git a/doc/modules/mux.rst b/doc/modules/mux.rst
index 24e06f120..9ff9ffd32 100644
--- a/doc/modules/mux.rst
+++ b/doc/modules/mux.rst
@@ -185,7 +185,7 @@ would increase build time and bloat the final binary. The way
capabilities are handled in the build system may not be immediately
obvious because of the number of CMake variables and the number of
components involved. Capability-related variables are present in Abacus
-builtins, Mux, and all Mux target devices. The OpenCL and Vulkan
+builtins, Mux, and all Mux target devices. The OpenCL
implementations (``source/cl`` and ``source/vk``) do not rely on
capability variables, as they need to generically support more than one
Mux device, each with potentially different capabilities, at the same
diff --git a/doc/modules/mux/cmake.rst b/doc/modules/mux/cmake.rst
index 350be1e98..35f3b6610 100644
--- a/doc/modules/mux/cmake.rst
+++ b/doc/modules/mux/cmake.rst
@@ -7,7 +7,7 @@ build.
``modules/mux/CMakeLists.txt`` creates a static library target ``mux`` using
:cmake:command:`add_ca_library` that frontend APIs implemented by the oneAPI
-Construction Kit, such as OpenCL and Vulkan, build on. ComputeMux library code
+Construction Kit, such as OpenCL, build on. ComputeMux library code
provides entry points to the Mux API which perform implementation agnostic error
checking of argument invalid usage, and then direct control flow through to a
desired Mux implementation. The :cmake:variable:`CA_MUX_ENABLE_SHARED` option can
diff --git a/doc/overview/compiler/computemux-compiler.rst b/doc/overview/compiler/computemux-compiler.rst
index 312ed0b51..cfee2f806 100644
--- a/doc/overview/compiler/computemux-compiler.rst
+++ b/doc/overview/compiler/computemux-compiler.rst
@@ -20,7 +20,7 @@ LLVM
The ComputeMux Compiler hides its usage of LLVM behind a set of virtual
interfaces. This avoids the need for an open standards implementation linking
-with the oneAPI Construction Kit, such as OpenCL and Vulkan, to also link with
+with the oneAPI Construction Kit, such as OpenCL, to also link with
LLVM, improving encapsulation.
The base implementation of the interfaces, such as ``BaseModule``, are
diff --git a/doc/overview/introduction/architecture.rst b/doc/overview/introduction/architecture.rst
index e3b6120d2..eda3a3091 100644
--- a/doc/overview/introduction/architecture.rst
+++ b/doc/overview/introduction/architecture.rst
@@ -80,7 +80,7 @@ Host Runtime
""""""""""""
A ComputeMux Runtime API implementation targeting the CPU device on which the OpenCL
-or Vulkan driver is running. This includes implementation of entry points for:
+ driver is running. This includes implementation of entry points for:
Memory Transfers
Reading, writing, copying, filling etc. memory buffers/images.
@@ -153,7 +153,7 @@ Host Compiler
"""""""""""""
A ComputeMux Compiler API implementation targeting the CPU device on which the
-OpenCL or Vulkan driver is running.
+OpenCL driver is running.
Custom Compiler
"""""""""""""""
@@ -176,7 +176,7 @@ Clang
from the OpenCL API.
SPIR-V Parser
An in house SPIR-V to LLVM IR translator for consuming SPIR-V from the OpenCL
- and Vulkan APIs.
+ API.
Middle End
""""""""""
@@ -258,8 +258,7 @@ SYCL
----
oneAPI Construction Kit is designed to slot into a `SYCL`_ technology stack, as the
-:ref:`overview/introduction/architecture:OpenCL` and
-:ref:`overview/introduction/architecture:Vulkan` APIs exposed can be used as a
+:ref:`overview/introduction/architecture:OpenCL` API exposed can be used as a
`SYCL Backend`_, or oneAPI Construction Kit can be used to write an implementation of
SYCL directly to a system or device.
@@ -282,9 +281,3 @@ To learn more about ComputeCpp see the :doc:`ComputeCpp Overview
https://www.khronos.org/registry/SYCL/specs/sycl-2020/html/sycl-2020.html#_the_sycl_backend_model
.. _ComputeCpp:
https://developer.codeplay.com/products/computecpp/ce/home
-
-Vulkan
-------
-
-oneAPI Construction Kit provides a pre-conformant Vulkan driver implementing the compute
-subset of Vulkan 1.0 functionality.
diff --git a/doc/overview/preface.rst b/doc/overview/preface.rst
index c4d3e6e2e..c35baef78 100644
--- a/doc/overview/preface.rst
+++ b/doc/overview/preface.rst
@@ -4,7 +4,7 @@ Preface
This document provides an introduction to Codeplay's oneAPI Construction Kit.
It should help the reader understand how to use the oneAPI Construction Kit to
create a high-performance implementation of open-standards for a processor or
-system, i.e. SYCL, OpenCL, or Vulkan. This implementation will enable
+system, i.e. SYCL, OpenCL. This implementation will enable
programmers to use a well-understood programming model, and allow all parties
to benefit from the open-standards software ecosystem.
diff --git a/doc/overview/runtime/computemux-runtime.rst b/doc/overview/runtime/computemux-runtime.rst
index 21178b541..7f495d8d4 100644
--- a/doc/overview/runtime/computemux-runtime.rst
+++ b/doc/overview/runtime/computemux-runtime.rst
@@ -3,7 +3,7 @@ ComputeMux Runtime
The ComputeMux Runtime defines an API providing an interface between hardware
target-specific code and general implementations of open standards such as
-OpenCL, Vulkan Compute and SPIR-V. Each entry point required for a hardware
+OpenCL and SPIR-V. Each entry point required for a hardware
target in the Runtime API is specified in the :doc:`ComputeMux Runtime
Specification `, containing detail on the
purpose of each entry point, valid usage, and expected error codes.
diff --git a/doc/source/vk.md b/doc/source/vk.md
deleted file mode 100644
index 2af2fb48c..000000000
--- a/doc/source/vk.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Vulkan
-
-Codeplay's compute only implementation of the [Vulkan API][vk-reg].
-
-The Vulkan specification comes in both [html][vk-html] and [pdf][vk-pdf] form,
-this is the canonical reference text for the standard. Portions of the Vulkan
-specification target graphics, this driver does not attempt to implement these
-features, _only_ the compute portions of the specification are targeted.
-
-The open source [Vulkan-CTS][vk-cts] repository contains the Conformance Test
-Suite (CTS), it is necessary to pass these tests in order to state that a driver
-conforms to the Vulkan specification. At the time of writing the CTS does not
-cover compute only implementations.
-
-## Dependencies
-
-The [Vulkan SDK][vk-sdk] is the only required build dependency beyond those
-required for the oneAPI Construction Kit as a whole. Ensure it is installed on
-your system.
-
-> On Linux pre-built binaries for some tools are not supplied with the
-> tarball distribution or older Ubuntu packages of the [SDK][vk-sdk] and must be
-> compiled by the user. Ensure that the `build_tools.sh` script has been invoked
-> to build the tools. In addition, ensure that the `setup-env.sh` script has
-> been sourced before configuring the CMake build directory to make sure that
-> Vulkan support is enabled.
-
-## Building
-
-Vulkan support is enabled when:
-
-* If the `VULKAN_SDK` environment variable is set and points to a valid
- [Vulkan SDK][vk-sdk] install, see [dependencies](#dependencies).
- The installation of newer Vulkan SDK for Ubuntu packages does not require
- the `VULKAN_SDK` environment variable to be set as CMake will automatically
- find the SDK in the standard system directories.
-* `CA_ENABLE_API` CMake variable is an empty string `""` or contains `"vk"`
-
-## spirv-ll
-
-As specified in [Appendix A][vk-spirv] of the [spec][vk-html] an implementation
-must consume [SPIR-V][spirv-reg] supporting the [GLSL extended instruction
-set][spirv-ext]. oneAPI Construction Kit uses [LLVM][llvm] so `spirv-ll`
-provides a [SPIR-V][spirv-reg] to [LLVM-IR][llvm-ir] translator to implement
-[SPIR-V][spirv-reg] consumption.
-
-### Generation
-
-[SPIR-V][spirv-reg] provides machine readable descriptions of the instructions
-in the core spec and [extended specs][spirv-ext]. `spirv-ll` takes advantage of
-these JSON files to generate C++ source to enable working with
-[SPIR-V][spirv-reg] binary data. These C++ files are generated using the
-following Python scripts:
-
-* `generate_builder_calls_inc.py` generates `spv_builder_calls.inc.h`, update
- and run this every time a new set of extended instructions are added
-* `generate_glsl_builder_calls_cpp.py` generates `spv_glsl_builder_calls.cpp`,
- update and run this every time a new GLSL function is implemented in Abacus
-* `generate_spirv_opcode_h.py` - used to generate `spv_opcodes.h` header file,
- update and run this every time a new set of extended instructions are added
-* `generate_spirv_opcode_cpp.py` generates `spv_opcodes.cpp`, update and run
- this every time a new set of extended instructions are added.
-
-> It is only required to use these generation scripts when the
-> [SPIR-V][spirv-reg] standard releases a new version which oneAPI Construction
-> Kit must support or if the `spirv-ll` API is to be changed.
-
-## Optimization
-
-This section is intended to document any areas of note for either future performance optimization or
-for writing optimization guides.
-
-* The command buffer usage flag `VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT` should be
- avoided by users and its implementation revisited when mux is better equipped to accommodate the
- functionality it represents. Currently instead of true simultaneous use command buffers are copied
- in their entirety when simultaneous use is required and the copy is then used simultaneously.
-
-[vk-reg]: https://www.khronos.org/registry/vulkan
-[vk-html]: https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html
-[vk-pdf]: https://www.khronos.org/registry/vulkan/specs/1.0/pdf/vkspec.pdf
-[vk-cts]: https://github.com/KhronosGroup/Vulkan-CTS
-[vk-sdk]: https://vulkan.lunarg.com
-[vk-spirv]: https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#spirvenv
-[spirv-reg]: https://www.khronos.org/registry/spir-v
-[spirv-ext]: https://www.khronos.org/registry/spir-v/#extins
-[llvm-ir]: https://llvm.org/docs/LangRef.html
diff --git a/doc/source/vk/cmake.rst b/doc/source/vk/cmake.rst
deleted file mode 100644
index a9cd50aa7..000000000
--- a/doc/source/vk/cmake.rst
+++ /dev/null
@@ -1,70 +0,0 @@
-Vulkan CMake
-============
-
-Extension Compile Definitions
------------------------------
-
-The following ``PRIVATE`` compile definitions are added to the ``VK`` target
-so that we can configure support for Vulkan extensions.
-
-CA_VK_KHR_get_physical_device_properties2
- Reports support for `VK_KHR_get_physical_device_properties2`_, enabled by
- default
-
-CA_VK_KHR_storage_buffer_storage_class
- Reports support for `VK_KHR_storage_buffer_storage_class`_, enabled by
- default.
-
-CA_VK_KHR_variable_pointers
- Reports support for `VK_KHR_variable_pointers`_, enabled by default.
-
-.. _VK_KHR_get_physical_device_properties2:
- https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_get_physical_device_properties2.html
-.. _VK_KHR_storage_buffer_storage_class:
- https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_storage_buffer_storage_class.html
-.. _VK_KHR_variable_pointers:
- https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_variable_pointers.html
-
-Installable Client Driver(ICD) Manifest
----------------------------------------
-
-The `Vulkan loader`_ discovers implementations available on a system by
-detecting ICD JSON manifest files documenting a path to the shared library and
-the API version implemented.
-
-Our ``source/vk/CMakeLists.txt`` file creates a manifest file for the loader
-as part of the `install`_ target, located at
-``/share/vulkan/icd.d/VK.json``. This JSON is generated by our CMake
-running python script ``source/vk/scripts/VKICDManifest.py`` so we can embed
-the correct version number and library name, using a relative path to our
-installed VK library.
-
-.. _Vulkan loader:
- https://github.com/KhronosGroup/Vulkan-Loader
-.. _install:
- https://cmake.org/cmake/help/latest/command/install.html
-
-Options
--------
-
-There is currently only a single CMake option specific to the implementation
-and testing of the Vulkan library.
-
-.. cmake:variable:: CA_VK_LIBRARY_NAME
-
- A string CMake option to override the output name of the Vulkan shared
- library.
-
- Default value
- ``"VK"``
-
-Modules
--------
-
-Vulkan specific CMake utilities are provided by:
-
-.. toctree::
- :maxdepth: 2
-
- cmake/FindVulkan
- cmake/GLSL
diff --git a/doc/source/vk/cmake/FindVulkan.rst b/doc/source/vk/cmake/FindVulkan.rst
deleted file mode 100644
index c2f767f80..000000000
--- a/doc/source/vk/cmake/FindVulkan.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-FindVulkan Module
-=================
-
-.. cmake-module:: ../../../../source/vk/cmake/FindVulkan.cmake
-
-.. seealso::
- ``UnitVK`` Vulkan unit tests can be built with CMake option
- ``UNITVK_USE_LOADER`` enabled, which uses the ``FindVulkan`` module to test
- through the Vulkan loader.
diff --git a/doc/source/vk/cmake/GLSL.rst b/doc/source/vk/cmake/GLSL.rst
deleted file mode 100644
index 1460a6188..000000000
--- a/doc/source/vk/cmake/GLSL.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-GLSL Module
-===========
-
-The GLSL module is used to streamline applications by embedding SPIR-V inside
-the executable binary, avoiding the need to load a file from disk at runtime
-containing the SPIR-V. This module also tracks depencies between GLSL, SPIR-V,
-and the execuable. Liberating developers from having to manually run the
-`glslang`_ compiler to generate SPIR-V after every GLSL shader modifications.
-
-.. seealso::
- Embedding SPIR-V in an application is done as part of our ``VectorAddition``
- Vulkan example which uses this CMake module.
-
- ``UnitVK`` Vulkan unit tests also make uses of ``GLSL.cmake`` to avoid
- having to maintain paths to shader files, allowing the test executable to be
- moved between directories without keeping track of the shader file
- dependencies.
-
-.. _glslang:
- https://github.com/KhronosGroup/glslang
-
-.. cmake-module:: ../../../../source/vk/cmake/GLSL.cmake
diff --git a/modules/compiler/CMakeLists.txt b/modules/compiler/CMakeLists.txt
index 0cffe4703..ec8e0ae1e 100644
--- a/modules/compiler/CMakeLists.txt
+++ b/modules/compiler/CMakeLists.txt
@@ -161,8 +161,7 @@ if(CA_RUNTIME_COMPILER_ENABLED)
message(WARNING "Unhandled build environment.")
endif()
- # Specify chosen library linker options, use the specified output name and
- # version of the Vulkan library.
+ # Specify chosen library linker options, use the specified output name.
# Ensure we're not overwriting existing link options
get_target_property(tgt_link_flags compiler LINK_FLAGS)
get_target_property(tgt_link_flags_release compiler LINK_FLAGS_RELEASE)
diff --git a/modules/compiler/include/compiler/module.h b/modules/compiler/include/compiler/module.h
index 3386a9995..babe843bc 100644
--- a/modules/compiler/include/compiler/module.h
+++ b/modules/compiler/include/compiler/module.h
@@ -476,6 +476,8 @@ struct DeviceInfo {
spv::AddressingModel addressing_model;
/// @brief Supported memory model.
spv::MemoryModel memory_model;
+
+ // TODO: Check this can be removed if Vulkan is removed.
/// @brief Size of a device memory address in bits (Vulkan only).
uint32_t address_bits;
};
diff --git a/modules/mux/tools/api/mux.xml b/modules/mux/tools/api/mux.xml
index b38167dd1..84b5419c6 100644
--- a/modules/mux/tools/api/mux.xml
+++ b/modules/mux/tools/api/mux.xml
@@ -2251,7 +2251,6 @@ For OpenCL, this value is used to implement clGetDeviceInfo, when asking for CL_
Specify what kind of filter to user when reading image data.
normalize_coordsbool
If true sampler expects coordinates to be normalized, if false sampler does not expect normalized coordinates.
-
A container describing a sampler.
diff --git a/source/vk/.gitattributes b/source/vk/.gitattributes
deleted file mode 100644
index 97f7a8db3..000000000
--- a/source/vk/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-*.test text eof=lf
-*.test text eol=lf
diff --git a/source/vk/CMakeLists.txt b/source/vk/CMakeLists.txt
deleted file mode 100644
index b5caea41e..000000000
--- a/source/vk/CMakeLists.txt
+++ /dev/null
@@ -1,186 +0,0 @@
-# Copyright (C) Codeplay Software Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-# Exceptions; you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-if(NOT CA_RUNTIME_COMPILER_ENABLED)
- message(FATAL_ERROR
- "The vk API is not supported when CA_RUNTIME_COMPILER_ENABLED is OFF")
-endif()
-
-ca_option(CA_VK_LIBRARY_NAME STRING
- "Output name of the Vulkan library" "VK")
-
-# Include our custom CMake modules.
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-
-# Set useful variables used in subdirectories.
-set(VK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-
-add_ca_library(VK SHARED
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/allocator.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/buffer.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/buffer_view.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/command_buffer.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/command_pool.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/descriptor_pool.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/descriptor_set.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/descriptor_set_layout.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/device.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/device_memory.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/error.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/event.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/fence.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/icd.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/image.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/image_view.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/instance.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/physical_device.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/pipeline.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/pipeline_cache.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/pipeline_layout.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/query_pool.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/queue.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/sampler.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/semaphore.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/shader_module.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/small_vector.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/type_traits.h
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk/unique_ptr.h
- ${CMAKE_CURRENT_SOURCE_DIR}/source/allocator.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/buffer.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/buffer_view.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/command_buffer.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/command_pool.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/descriptor_pool.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/descriptor_set.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/descriptor_set_layout.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/device.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/device_memory.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/error.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/event.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/fence.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/image.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/image_view.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/instance.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/physical_device.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/pipeline.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/pipeline_cache.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/pipeline_layout.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/query_pool.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/queue.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/sampler.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/semaphore.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/shader_module.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/source/vulkan.cpp
- $<$:${BUILTINS_RC_FILE}>)
-
-target_include_directories(VK PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/include)
-target_include_directories(VK SYSTEM PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/external/Khronos/include)
-
-# TODO: has some llvm dependencies via spirv-ll/module.h. This should be looked at
-target_include_directories(VK SYSTEM PRIVATE
- ${LLVM_INCLUDE_DIR})
-
-# TODO(CA-1643): Add fully configurable extension options.
-target_compile_definitions(VK PRIVATE
- CA_VK_KHR_get_physical_device_properties2=1
- CA_VK_KHR_storage_buffer_storage_class=1
- CA_VK_KHR_variable_pointers=1)
-target_link_libraries(VK
- PRIVATE Threads::Threads builtins cargo mux compiler-static spirv-ll)
-target_resources(VK NAMESPACES ${BUILTINS_NAMESPACES})
-
-if(TARGET LLVMSupport)
- # Only link against LLVMSupport when NDEBUG is defined and the target exists.
- target_link_libraries(VK PRIVATE
- $<$,$>:LLVMSupport>)
-endif()
-
-# Choose library linker options.
-if(CA_PLATFORM_LINUX)
- # Export API entry point symbols for Linux, or if we're using a GNU compiler
- # on Windows. I.e. a MinGW build on Windows uses the Linux symbol exports,
- # not the Windows ones.
- if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
- set(VK_EXPORT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/source/export-linux.sym)
- # Retain only the symbols listed in the file filename, discarding all others
- set(VK_LINK_FLAGS
- "${VK_LINK_FLAGS} -Xlinker --retain-symbols-file=${VK_EXPORT_FILE}")
- endif()
- # Use internal library defined functions, required for vkGetInstanceProcAddr,
- # vkGetDeviceProcAddr, overriding new and delete.
- set(VK_LINK_FLAGS "${VK_LINK_FLAGS} -Xlinker -Bsymbolic")
-elseif(CA_PLATFORM_WINDOWS)
- set(CA_VK_LIBRARY_DEF_FILE export-windows.def)
- set(ExportLibraryName ${CMAKE_STATIC_LIBRARY_PREFIX}${CA_VK_LIBRARY_NAME})
- configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/source/${CA_VK_LIBRARY_DEF_FILE}.cmake
- ${CMAKE_CURRENT_BINARY_DIR}/source/${CA_VK_LIBRARY_DEF_FILE})
- # Set exports definition file for Windows.
- set(VK_EXPORT_FILE ${CMAKE_CURRENT_BINARY_DIR}/source/${CA_VK_LIBRARY_DEF_FILE})
- if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- string(APPEND VK_LINK_FLAGS " /DEF:\"${VK_EXPORT_FILE}\"")
- else()
- string(APPEND VK_LINK_FLAGS " \"${VK_EXPORT_FILE}\"")
- endif()
-else()
- message(WARNING "Unhandled build environment.")
-endif()
-
-# Specify chosen library linker options, use the specified output name and
-# version of the Vulkan library.
-set_target_properties(VK PROPERTIES LINK_FLAGS "${VK_LINK_FLAGS}"
- OUTPUT_NAME ${CA_VK_LIBRARY_NAME} SOVERSION ${PROJECT_VERSION_MAJOR}
- VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
-
-# Create directory for the ICD json manifest file.
-set(VKICDManifestDir share/vulkan/icd.d)
-file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${VKICDManifestDir})
-
-# Generate ICD json manifest file.
-set(VKICDManifestScript ${VK_SOURCE_DIR}/scripts/VKICDManifest.py)
-set(VKICDManifestFile ${PROJECT_BINARY_DIR}/${VKICDManifestDir}/VK.json)
-add_custom_command(TARGET VK PRE_BUILD
- COMMAND ${PYTHON_EXECUTABLE} ${VKICDManifestScript}
- "$" "${VKICDManifestFile}"
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${VKICDManifestScript} vulkan.h
- COMMENT "Generate VK ICD manifest.")
-
-if(COMMAND add_coverage_modules)
- add_coverage_modules(${CMAKE_CURRENT_SOURCE_DIR}/source
- ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/VK.dir/source
- ${CMAKE_CURRENT_SOURCE_DIR}/include/vk
- ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/VK.dir/source)
-endif()
-
-if(CA_ENABLE_TESTS)
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test)
-endif()
-if(CA_ENABLE_EXAMPLES)
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/examples)
-endif()
-
-install(DIRECTORY
- ${CMAKE_CURRENT_SOURCE_DIR}/external/Khronos/include/vulkan
- DESTINATION include COMPONENT VKHeaders)
-install(TARGETS VK
- ARCHIVE DESTINATION lib COMPONENT VK
- LIBRARY DESTINATION lib COMPONENT VK
- RUNTIME DESTINATION bin COMPONENT VK)
-install(FILES ${VKICDManifestFile}
- DESTINATION ${VKICDManifestDir} COMPONENT VK)
diff --git a/source/vk/README.md b/source/vk/README.md
deleted file mode 100644
index 6a760f719..000000000
--- a/source/vk/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Vulkan
-
-Documentation can be found [here](../../../doc/source/vk.md).
diff --git a/source/vk/cmake/FindVulkan.cmake b/source/vk/cmake/FindVulkan.cmake
deleted file mode 100644
index ba26e0f40..000000000
--- a/source/vk/cmake/FindVulkan.cmake
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (C) Codeplay Software Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-# Exceptions; you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-#[=======================================================================[.rst:
-A `Find Module`_ for detecting the Vulkan loader library, checking environment
-variables set by the `Vulkan SDK`_ in addition to the default system locations.
-
-.. seealso::
- Implemented using `FindPackageHandleStandardArgs`_
-
-Variables
----------
-
-This modules adds the following variables:
-
-.. cmake:variable:: VULKAN_INCLUDE_DIR
-
- A filepath variable to the include directory containing ``vulkan/vulkan.h``.
-
-.. cmake:variable:: VULKAN_LIBRARY
-
- A filepath variable to the directory containing the Vulkan loader libary.
-
-.. cmake:variable:: VULKAN_FOUND
-
- A boolean CMake variable set to ``TRUE`` if both
- :cmake:variable:`VULKAN_LIBRARY` and :cmake:variable:`VULKAN_LIBRARY`
- are set and valid, ``FALSE`` otherwise.
-
-Usage
------
-
-To use load this module either include it or use CMake `find_package`_.
-
-.. code:: cmake
-
- include(FindVulkan)
-
-.. code:: cmake
-
- find_package(Vulkan)
-
-.. _Find Module:
- https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#find-modules
-.. _FindPackageHandleStandardArgs:
- https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html
-.. _Vulkan SDK:
- https://www.lunarg.com/vulkan-sdk
-.. _find_package:
- https://cmake.org/cmake/help/latest/command/find_package.html
-#]=======================================================================]
-
-if(WIN32)
- find_path(VULKAN_INCLUDE_DIR NAMES vulkan/vulkan.h HINTS
- "$ENV{VULKAN_SDK}/Include"
- "$ENV{VK_SDK_PATH}/Include")
- if(CMAKE_CL_64)
- find_library(VULKAN_LIBRARY NAMES vulkan-1 HINTS
- "$ENV{VULKAN_SDK}/Bin" "$ENV{VK_SDK_PATH}/Bin")
- find_library(VULKAN_STATIC_LIBRARY NAMES vkstatic.1 HINTS
- "$ENV{VULKAN_SDK}/Bin" "$ENV{VK_SDK_PATH}/Bin")
- else()
- find_library(VULKAN_LIBRARY NAMES vulkan-1 HINTS
- "$ENV{VULKAN_SDK}/Bin32"
- "$ENV{VK_SDK_PATH}/Bin32")
- endif()
-else()
- find_path(VULKAN_INCLUDE_DIR NAMES vulkan/vulkan.h HINTS
- "$ENV{VULKAN_SDK}/include")
- find_library(VULKAN_LIBRARY NAMES vulkan HINTS
- "$ENV{VULKAN_SDK}/lib")
-endif()
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Vulkan
- DEFAULT_MSG VULKAN_LIBRARY VULKAN_INCLUDE_DIR)
-
-mark_as_advanced(VULKAN_INCLUDE_DIR VULKAN_LIBRARY VULKAN_STATIC_LIBRARY)
diff --git a/source/vk/cmake/GLSL.cmake b/source/vk/cmake/GLSL.cmake
deleted file mode 100644
index 9bba9d03f..000000000
--- a/source/vk/cmake/GLSL.cmake
+++ /dev/null
@@ -1,186 +0,0 @@
-# Copyright (C) Codeplay Software Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-# Exceptions; you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-#[=======================================================================[.rst:
-Utilities to compile GLSL compute shaders to SPIR-V binaries and convert them
-to header files at build time. This module depends on the :doc:`/cmake/Bin2H`
-and :doc:`/cmake/CAPlatform` modules to function. To use these utilities:
-
-.. code:: cmake
-
- include(GLSL)
-
- add_glsl_command(
- ${path_to_input}/file.comp
- ${path_to_output}/file.spv)
-
- add_glsl_target(my_spv
- ${path_to_input}/file.comp
- ${path_to_output}/file.spv)
-
- add_glsl_bin2h_command(my_spv
- ${path_to_input}/file.comp
- ${path_to_output}/file.h)
-
- add_glsl_bin2h_target(my_spv
- ${path_to_input}/file.comp
- ${path_to_output}/file.h)
-#]=======================================================================]
-include(Bin2H)
-include(CAPlatform)
-
-# Make sure we have the glslang validator
-if(NOT TARGET glslangValidator)
- find_program(GLSLANG_VALIDATOR_PATH
- glslangValidator${CA_HOST_EXECUTABLE_SUFFIX}
- HINTS "$ENV{VULKAN_SDK}/bin" "$ENV{VULKAN_SDK}/Bin")
- if(GLSLANG_VALIDATOR_PATH STREQUAL "GLSLANG_VALIDATOR_PATH-NOTFOUND")
- message(FATAL_ERROR "glslangValidator not found, ensure the Vulkan SDK is "
- "installed. Please visit https://vulkan.lunarg.com/ "
- "to download!")
- else()
- add_ca_executable_import(glslangValidator ${GLSLANG_VALIDATOR_PATH})
- endif()
-endif()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_glsl_command
-
- The ``add_glsl_command`` macro creates a custom command which compiles a GLSL
- compute shader into a SPIR-V binary using glslangValidator provided by the
- Vulkan SDK.
-
- Arguments:
- * ``input``: The GLSL compute shader source filepath
- * ``output``: The SPIR-V binary output filepath
-#]=======================================================================]
-macro(add_glsl_command input output)
- file(RELATIVE_PATH relOut ${CMAKE_BINARY_DIR} ${output})
- add_custom_command(OUTPUT ${output}
- COMMAND glslangValidator -s -V -o ${spv} ${input}
- DEPENDS glslangValidator ${input}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Building GLSL object ${relOut}")
-endmacro()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_spvasm_command
-
- The ``add_spvasm_command`` macro creates a custom command which compiles a
- hand-written SPVASM compute shader into a SPIR-V binary using spv-as provided
- by the Vulkan SDK.
-
- Arguments:
- * ``input``: The GLSL compute shader source filepath
- * ``output``: The SPIR-V binary output filepath
-#]=======================================================================]
-macro(add_spvasm_command input output)
- file(RELATIVE_PATH relOut ${CMAKE_BINARY_DIR} ${output})
- add_custom_command(OUTPUT ${output}
- COMMAND spirv::spirv-as --target-env vulkan1.0 -o ${spv} ${spvasm}
- DEPENDS spirv::spirv-as ${spvasm}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Building SPVASM object ${relOut}")
-endmacro()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_glsl_target
-
- The ``add_glsl_target`` macro creates creates a custom target which compiles
- a GLSL compute shader into a SPIR-V binary and used in CMake dependency
- tracking.
-
- Arguments:
- * ``target``: The name of the target
- * ``input``: The GLSL compute shader source filepath
- * ``output``: The SPIR-V binary output filepath
-#]=======================================================================]
-macro(add_glsl_target target input output)
- add_glsl_command(${input} ${output})
- add_custom_target(${target}
- DEPENDS ${output}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Building GLSL object ${output}")
-endmacro()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_glsl_bin2h_command
-
- The ``add_glsl_bin2h_command`` function creates a custom command which
- compiles a GLSL compute shader into a SPIR-V binary then generates a header
- that can be included into source code.
-
- .. seealso::
- See :doc:`add_bin2h_command` documentation for more
- information.
-
- Arguments:
- * ``variable``: The name of the variable to access the data in the header
- file
- * ``input``: The GLSL compute shader source filepath
- * ``output``: The header filepath to generate
-#]=======================================================================]
-function(add_glsl_bin2h_command variable input output)
- get_filename_component(name ${input} NAME_WE)
- set(spv ${CMAKE_CURRENT_BINARY_DIR}/${name}.spv)
- add_glsl_command(${input} ${spv})
- add_bin2h_command(${variable} ${spv} ${output})
-endfunction()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_spvasm_bin2h_command
-
- The ``add_spvasm_bin2h_command`` function creates a custom command which
- compiles a hand-written spvasm compute shader into a SPIR-V binary then
- generates a header that can be included into source code.
-
- .. seealso::
- See :doc:`add_bin2h_command` documentation for more
- information.
-
- Arguments:
- * ``variable``: The name of the variable to access the data in the header
- file
- * ``input``: The SPVASM compute shader source filepath
- * ``output``: The header filepath to generate
-#]=======================================================================]
-function(add_spvasm_bin2h_command variable input output)
- get_filename_component(name ${input} NAME_WE)
- set(spv ${CMAKE_CURRENT_BINARY_DIR}/${name}.spv)
- add_spvasm_command(${input} ${spv})
- add_bin2h_command(${variable} ${spv} ${output})
-endfunction()
-
-#[=======================================================================[.rst:
-.. cmake:command:: add_glsl_bin2h_target
-
- The ``add_glsl_bin2h_target`` macro creates a custom target which compiles a
- GLSL compute shader into a SPIR-V binary then generates a header that can be
- included into source code and use the target in CMake dependency tracking.
-
- Arguments:
- * ``target``: The name of the target and the name of the variable to access
- the data in the header file
- * ``input``: The GLSL compute shader source filepath
- * ``output``: The header filepath to generate
-#]=======================================================================]
-macro(add_glsl_bin2h_target target input output)
- add_glsl_bin2h_command(${target} ${input} ${output})
- add_custom_target(${target}
- DEPENDS ${output} ${input}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Generating H file ${output}")
-endmacro()
diff --git a/source/vk/examples/CMakeLists.txt b/source/vk/examples/CMakeLists.txt
deleted file mode 100644
index 9da4b503a..000000000
--- a/source/vk/examples/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (C) Codeplay Software Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-# Exceptions; you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-add_subdirectory(VectorAddition)
diff --git a/source/vk/examples/VectorAddition/CMakeLists.txt b/source/vk/examples/VectorAddition/CMakeLists.txt
deleted file mode 100644
index 4137966ba..000000000
--- a/source/vk/examples/VectorAddition/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (C) Codeplay Software Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-# Exceptions; you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-include(GLSL)
-
-# GLSL shader
-set(comp ${CMAKE_CURRENT_SOURCE_DIR}/source/vector_add.comp)
-if(NOT EXISTS ${comp})
- message(FATAL_ERROR "${comp} doesn't exist!")
-endif()
-
-# Header to be generated containing SPIR-V binary
-set(header ${CMAKE_CURRENT_BINARY_DIR}/vector_add.h)
-
-# Compile GLSL to create SPIR-V, then bin2h to convert it to a header
-add_glsl_bin2h_command(vector_add_shader ${comp} ${header})
-add_custom_target(vector_add_shader DEPENDS ${header})
-
-add_ca_executable(vkVectorAddition
- ${CMAKE_CURRENT_SOURCE_DIR}/source/main.c ${header})
-target_link_libraries(vkVectorAddition PRIVATE VK)
-
-# Look in binary directory for generated header
-target_include_directories(vkVectorAddition PRIVATE
- ${CMAKE_CURRENT_BINARY_DIR})
-
-if(TARGET tidy-vkVectorAddition)
- add_dependencies(tidy-vkVectorAddition vector_add_shader)
-endif()
-
-add_ca_check(vkVectorAddition
- COMMAND vkVectorAddition
- DEPENDS vkVectorAddition)
-
-install(TARGETS vkVectorAddition RUNTIME DESTINATION bin COMPONENT VKExamples)
diff --git a/source/vk/examples/VectorAddition/source/main.c b/source/vk/examples/VectorAddition/source/main.c
deleted file mode 100644
index bbebbf1ad..000000000
--- a/source/vk/examples/VectorAddition/source/main.c
+++ /dev/null
@@ -1,567 +0,0 @@
-// Copyright (C) Codeplay Software Limited
-//
-// Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-// Exceptions; you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations
-// under the License.
-//
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-#include
-#include
-#include
-#include
-
-#include "vector_add.h" // Contains shader SPIR-V
-
-#define IS_VK_SUCCESS(X) \
- { \
- const VkResult ret_val = X; \
- if (VK_SUCCESS != ret_val) { \
- (void)fprintf(stderr, "Vulkan error occurred: %s returned %d\n", #X, \
- ret_val); \
- exit(1); \
- } \
- }
-
-#define NUM_WORK_ITEMS 64
-
-// There is no global state in Vulkan. Create and return a VkInstance object
-// which initializes the Vulkan library and encapsulates per-application state.
-VkInstance createVkInstance(void) {
- const VkApplicationInfo app_info = {
- VK_STRUCTURE_TYPE_APPLICATION_INFO,
- NULL,
- "VectorAddition", // Application name
- VK_MAKE_VERSION(1, 0, 0), // Application version (Major.Minor.Patch)
- "Codeplay", // Engine Name
- 0,
- VK_MAKE_VERSION(1, 0, 0) // Vulkan API version to target
- };
-
- // The first member of all create info structs is a `sType` member
- // representing the structure type. This is to aide backwards compatibility,
- // so that the stuct can change in future versions without having to add a
- // new entry point.
- const VkInstanceCreateInfo inst_create_info = {
- VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
- NULL,
- 0,
- &app_info,
- 0, // Number of layers to enable
- NULL,
- 0, // Number of instance extensions to enable
- NULL};
-
- VkInstance instance;
-
- // `VkCreate*` APIs allocate memory for creating objects, and take
- // `Vk*CreateInfo` structures with the object parameters. As a result this
- // memory must also be freed by an associated VkDestroy*. Here we call
- // vkDestoryInstance() at the end of main().
- IS_VK_SUCCESS(vkCreateInstance(&inst_create_info, NULL, &instance));
-
- printf(" * VkInstance successfully created\n");
- return instance;
-}
-
-// Queries for suitable device memory which is large enough for our requirements
-uint32_t getMemoryTypeIndex(VkPhysicalDevice device, VkDeviceSize memory_size) {
- // The VkPhysicalDeviceMemoryProperties struct describes memory heaps as well
- // as memory types that can be used to access those heaps.
- VkPhysicalDeviceMemoryProperties properties;
- vkGetPhysicalDeviceMemoryProperties(device, &properties);
-
- // Iterate over all memory types in physical device looking for a memory of
- // at least required size which is cache coherent and can be mapped to host.
- uint32_t mem_type_index = UINT32_MAX;
- for (uint32_t i = 0; i < properties.memoryTypeCount; ++i) {
- const VkMemoryType mem_type = properties.memoryTypes[i];
- if ((VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT & mem_type.propertyFlags) &&
- (VK_MEMORY_PROPERTY_HOST_COHERENT_BIT & mem_type.propertyFlags) &&
- (memory_size < properties.memoryHeaps[mem_type.heapIndex].size)) {
- mem_type_index = i;
- break;
- }
- }
-
- if (mem_type_index == UINT32_MAX) {
- (void)fprintf(
- stderr, "Couldn't find suitable memory of a least %" PRIu64 " bytes\n",
- memory_size);
- exit(1);
- }
-
- return mem_type_index;
-}
-
-// A physical device should group all queues of matching capabilities together
-// in a single family. We want to find the index of the first queue family with
-// compute support.
-uint32_t getComputeQueueFamilyIndex(VkPhysicalDevice device) {
- // Query number of compute families
- uint32_t queue_properties_count = 0;
- vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_properties_count, 0);
-
- // Request all queue families
- VkQueueFamilyProperties *queue_properties = (VkQueueFamilyProperties *)malloc(
- sizeof(VkQueueFamilyProperties) * queue_properties_count);
-
- vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_properties_count,
- queue_properties);
-
- uint32_t compute_queue_index = UINT32_MAX;
- for (uint32_t i = 0; i < queue_properties_count; ++i) {
- const VkQueueFlags queue_flags = queue_properties[i].queueFlags;
- if (queue_flags & VK_QUEUE_COMPUTE_BIT) {
- compute_queue_index = i;
- break;
- }
- }
-
- if (compute_queue_index == UINT32_MAX) {
- (void)fputs("Couldn't find a compute queue on device, exiting\n", stderr);
- exit(1);
- }
-
- free(queue_properties);
- return compute_queue_index;
-}
-
-// Given a VkInstance this function finds a vkPhysicalDevice and VkDevice
-// corresponding to Codeplay's CPU target.
-void createVkDevice(VkInstance instance, VkDevice *device,
- VkPhysicalDevice *physical_device) {
- // Retrieve list of physical devices
- uint32_t num_devices = 0;
- IS_VK_SUCCESS(vkEnumeratePhysicalDevices(instance, &num_devices, 0));
-
- if (0 == num_devices) {
- (void)fputs("No Vulkan devices found, exiting\n", stderr);
- exit(1);
- }
-
- VkPhysicalDevice *phys_devices =
- (VkPhysicalDevice *)malloc(sizeof(VkPhysicalDevice) * num_devices);
- IS_VK_SUCCESS(
- vkEnumeratePhysicalDevices(instance, &num_devices, phys_devices));
-
- // Find Codeplay CPU device
- VkPhysicalDevice *codeplay_cpu_device = NULL;
- for (uint32_t i = 0; i < num_devices; ++i) {
- VkPhysicalDevice phys_device = phys_devices[i];
-
- VkPhysicalDeviceProperties phys_dev_properties;
- vkGetPhysicalDeviceProperties(phys_device, &phys_dev_properties);
-
- // 0x10004 is Codeplay vendor ID VK_VENDOR_ID_CODEPLAY, find our CPU target
- if (VK_VENDOR_ID_CODEPLAY == phys_dev_properties.vendorID &&
- VK_PHYSICAL_DEVICE_TYPE_CPU == phys_dev_properties.deviceType) {
- printf(" * Selected device: %s\n", phys_dev_properties.deviceName);
- codeplay_cpu_device = &phys_devices[i];
- break;
- }
- }
-
- if (NULL == codeplay_cpu_device) {
- (void)fputs("Couldn't find Codeplay Vulkan CPU device, exiting\n", stderr);
- exit(1);
- }
-
- // Set output parameter
- *physical_device = *codeplay_cpu_device;
-
- // Find index of compute queue family
- const uint32_t queue_family = getComputeQueueFamilyIndex(*physical_device);
- // 1.0 is highest priority queue
- const float prioritory = 1.0f;
-
- // Creating a logical device also requires us to create the queues associated
- // with that device.
- const VkDeviceQueueCreateInfo queue_create_info = {
- VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
- NULL,
- 0,
- queue_family,
- 1, // Number of queues to create
- &prioritory};
-
- // Vulkan differentiates between physical devices, which represent a single
- // piece of hardware, and logical devices that act as an abstraction to that
- // physical device for the application to interface with.
- const VkDeviceCreateInfo device_create_info = {
- VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
- NULL,
- 0,
- 1, // Size of queue create info array
- &queue_create_info,
- 0,
- NULL,
- 0, // Number of device extensions to enable
- NULL,
- NULL};
-
- // Create our logical device.
- IS_VK_SUCCESS(
- vkCreateDevice(*physical_device, &device_create_info, 0, device));
-
- free((void *)phys_devices);
-}
-
-// Loads our shader, sets up compute pipeline and command buffer, before
-// finally executing vector add shader.
-void buildAndRunShader(VkDevice device, uint32_t compute_queue_family,
- VkBuffer src1_buffer, VkBuffer src2_buffer,
- VkBuffer dst_buffer) {
- // Create our shader module, containing SPIR-V defined in header include
- const VkShaderModuleCreateInfo shader_module_info = {
- VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, 0, 0,
- vector_add_shader_size, // Code size
- (const uint32_t *)vector_add_shader // Pointer to SPIR-V code
- };
-
- VkShaderModule shader_module;
- IS_VK_SUCCESS(
- vkCreateShaderModule(device, &shader_module_info, 0, &shader_module));
-
- // A descriptor represents a binding to a resource such as image, sampler, or
- // buffer for a shader to access. A descriptor layout defines an array of
- // descriptor bindings which may be accessed by the pipeline.
- const VkDescriptorSetLayoutBinding descriptor_set_bindings[3] = {
- {0, // Binding number
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, 0},
- {1, // Binding number
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, 0},
- {2, // Binding number
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, 0}};
-
- const VkDescriptorSetLayoutCreateInfo descriptor_set_create = {
- VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, 0, 0, 3,
- descriptor_set_bindings};
-
- VkDescriptorSetLayout descriptor_set_layout;
- IS_VK_SUCCESS(vkCreateDescriptorSetLayout(device, &descriptor_set_create, 0,
- &descriptor_set_layout));
-
- // A pipeline layout is used to access descriptor sets, describing the
- // complete set of resources than are available to a pipeline.
- const VkPipelineLayoutCreateInfo pipeline_layout_info = {
- VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
- NULL,
- 0,
- 1,
- &descriptor_set_layout,
- 0,
- NULL};
-
- VkPipelineLayout pipeline_layout;
- IS_VK_SUCCESS(vkCreatePipelineLayout(device, &pipeline_layout_info, 0,
- &pipeline_layout));
-
- // Create a compute pipeline running our vector add shader
- const VkPipelineShaderStageCreateInfo shader_stage_create_info = {
- VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
- NULL,
- 0,
- VK_SHADER_STAGE_COMPUTE_BIT,
- shader_module,
- "main", // Shader module entry point, `main` is vector add
- NULL};
-
- const VkComputePipelineCreateInfo pipeline_create_info = {
- VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
- NULL,
- 0,
- shader_stage_create_info,
- pipeline_layout,
- VK_NULL_HANDLE,
- 0};
-
- VkPipeline pipeline;
- IS_VK_SUCCESS(vkCreateComputePipelines(device, 0, 1, &pipeline_create_info, 0,
- &pipeline));
-
- // A descriptor pool maintains a pool of descriptors, from which descriptor
- // sets are allocated.
- const VkDescriptorPoolSize descriptor_pool_size = {
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 3};
-
- const VkDescriptorPoolCreateInfo descriptor_pool_create_info = {
- VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
- NULL,
- 0,
- 1, // Max number of descriptor sets that can be allocated
- 1, // Number of elements in pool size
- &descriptor_pool_size};
-
- VkDescriptorPool descriptor_pool;
- IS_VK_SUCCESS(vkCreateDescriptorPool(device, &descriptor_pool_create_info, 0,
- &descriptor_pool));
-
- // Allocate our descriptor set
- const VkDescriptorSetAllocateInfo descriptor_set_alloc_info = {
- VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, NULL, descriptor_pool, 1,
- &descriptor_set_layout};
-
- VkDescriptorSet descriptor_set;
- IS_VK_SUCCESS(vkAllocateDescriptorSets(device, &descriptor_set_alloc_info,
- &descriptor_set));
-
- // First storage input buffer has binding zero
- const VkDescriptorBufferInfo descriptor_buffer_in1 = {src1_buffer, 0,
- VK_WHOLE_SIZE};
- const VkWriteDescriptorSet src1_write_descriptor = {
- VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
- NULL,
- descriptor_set,
- 0, // Binding
- 0, // Array element
- 1, // Descriptor count
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
- NULL,
- &descriptor_buffer_in1,
- NULL};
-
- // Second storage input buffer has binding one
- const VkDescriptorBufferInfo descriptor_buffer_in2 = {src2_buffer, 0,
- VK_WHOLE_SIZE};
- const VkWriteDescriptorSet src2_write_descriptor = {
- VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
- NULL,
- descriptor_set,
- 1, // Binding
- 0, // Array element
- 1, // Descriptor count
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
- NULL,
- &descriptor_buffer_in2,
- NULL};
-
- // Output storage buffer has binding two
- const VkDescriptorBufferInfo descriptor_buffer_out = {dst_buffer, 0,
- VK_WHOLE_SIZE};
- const VkWriteDescriptorSet dst_write_descriptor = {
- VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
- NULL,
- descriptor_set,
- 2, // Binding
- 0, // Array element
- 1, // Descriptor count
- VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
- NULL,
- &descriptor_buffer_out,
- NULL};
-
- // Update descriptor set with buffer bindings
- VkWriteDescriptorSet write_descriptor_set[3] = {
- src1_write_descriptor, src2_write_descriptor, dst_write_descriptor};
- vkUpdateDescriptorSets(device, 3, write_descriptor_set, 0, NULL);
-
- // Command pools allow Vulkan to amortize the cost of resource allocation
- // when creating multiple command buffers.
- const VkCommandPoolCreateInfo command_pool_create_info = {
- VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, NULL, 0,
- compute_queue_family // Specifies than commands from this buffer
- // can only be submitted to compute queues.
- };
-
- VkCommandPool command_pool;
- IS_VK_SUCCESS(vkCreateCommandPool(device, &command_pool_create_info, NULL,
- &command_pool));
-
- // Primary command buffers are submitted to queues, and can execute secondary
- // command buffers. Whereas secondary command buffers are executed by
- // primary command buffers rather than submitted to queues.
- const VkCommandBufferAllocateInfo command_buffer_alloc_info = {
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL, command_pool,
- VK_COMMAND_BUFFER_LEVEL_PRIMARY,
- 1 // Number of command buffers to allocate
- };
-
- // Command buffers are used to record commands which will be submitted to the
- // device queue for execution.
- VkCommandBuffer command_buffer;
- IS_VK_SUCCESS(vkAllocateCommandBuffers(device, &command_buffer_alloc_info,
- &command_buffer));
-
- const VkCommandBufferBeginInfo command_buffer_begin_info = {
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL,
- VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, // We're only submitting the
- // command buffer once
- NULL};
-
- // Start recording our command buffer
- IS_VK_SUCCESS(
- vkBeginCommandBuffer(command_buffer, &command_buffer_begin_info));
-
- vkCmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
-
- vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
- pipeline_layout, 0, 1, &descriptor_set, 0, NULL);
-
- // Invoke shader in a single dimension with NUM_WORK_ITEMS work groups.
- // Our shader has a local size of 1,1,1 and therefore a single work item in
- // each group.
- const uint32_t group_count_x = NUM_WORK_ITEMS;
- const uint32_t group_count_y = 1;
- const uint32_t group_count_z = 1;
- vkCmdDispatch(command_buffer, group_count_x, group_count_y, group_count_z);
-
- // Complete recording of command buffer, and check for errors
- IS_VK_SUCCESS(vkEndCommandBuffer(command_buffer));
-
- // Get our compute queue from logical device
- VkQueue queue;
- vkGetDeviceQueue(device, compute_queue_family, 0, &queue);
-
- const VkSubmitInfo submit_info = {VK_STRUCTURE_TYPE_SUBMIT_INFO,
- NULL,
- 0, // No semaphores to wait on
- NULL,
- NULL,
- 1, // Command buffer count
- &command_buffer,
- 0, // No semaphores to signal
- NULL};
-
- // Submit command buffer to queue
- IS_VK_SUCCESS(vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE));
-
- // Waits indefinitely for all submitted commands to complete
- IS_VK_SUCCESS(vkQueueWaitIdle(queue));
-
- // Cleanup
- vkDestroyDescriptorSetLayout(device, descriptor_set_layout, NULL);
- vkDestroyShaderModule(device, shader_module, NULL);
- vkDestroyPipeline(device, pipeline, NULL);
- vkDestroyPipelineLayout(device, pipeline_layout, NULL);
- vkDestroyDescriptorPool(device, descriptor_pool, NULL);
- vkDestroyCommandPool(device, command_pool, NULL);
-}
-
-// Sample Vulkan compute application performing a vector add
-int main(void) {
- puts("Vector add Vulkan compute example:");
- // Initialize the Vulkan library
- VkInstance instance = createVkInstance();
-
- // Find Codeplay CPU devices
- VkDevice device;
- VkPhysicalDevice physical_device;
- createVkDevice(instance, &device, &physical_device);
-
- // We will have 3 buffers, each containing a single int32_t per work item
- const VkDeviceSize buffer_size = sizeof(int32_t) * NUM_WORK_ITEMS;
- const VkDeviceSize memory_size = buffer_size * 3;
-
- // Type and amount of memory we want to allocate
- const uint32_t memory_type_index =
- getMemoryTypeIndex(physical_device, memory_size);
- const VkMemoryAllocateInfo memory_info = {
- VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL,
- memory_size, // bytes to allocate
- memory_type_index};
-
- // Allocate memory, to be shared among all the buffers
- VkDeviceMemory memory;
- IS_VK_SUCCESS(vkAllocateMemory(device, &memory_info, NULL, &memory));
- printf(" * Allocated %" PRIu64 " bytes of device memory\n", memory_size);
-
- // Map input buffers to host so that we can initialize them
- void *mapped_ptr_void;
- int32_t *mapped_ptr;
-
- // Input buffer 1 will reside in the first `buffer_size` bytes of memory, and
- // each buffer element is initialized to it's index.
- IS_VK_SUCCESS(
- vkMapMemory(device, memory, 0, buffer_size, 0, &mapped_ptr_void));
- mapped_ptr = mapped_ptr_void;
- for (int32_t i = 0; i < NUM_WORK_ITEMS; ++i) {
- mapped_ptr[i] = i;
- }
- vkUnmapMemory(device, memory);
-
- // Input buffer 2 will be located at offset `buffer_size` in memory, and
- // each buffer element is initialized to it's index plus one.
- IS_VK_SUCCESS(vkMapMemory(device, memory, buffer_size, buffer_size, 0,
- &mapped_ptr_void));
- mapped_ptr = mapped_ptr_void;
- for (int32_t i = 0; i < NUM_WORK_ITEMS; ++i) {
- mapped_ptr[i] = i + 1;
- }
- vkUnmapMemory(device, memory);
-
- // Find compute queue family index
- const uint32_t queue_family = getComputeQueueFamilyIndex(physical_device);
- // All our buffers will be of the same size
- const VkBufferCreateInfo buffer_create_info = {
- VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
- NULL,
- 0,
- buffer_size, // Size in bytes of buffer
- VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, // These are storage buffers
- VK_SHARING_MODE_EXCLUSIVE, // Buffer won't overlap in memory
- 1,
- &queue_family};
-
- // Bind the first input buffer to the first `buffer_size` bytes of memory
- VkBuffer src1_buffer;
- IS_VK_SUCCESS(
- vkCreateBuffer(device, &buffer_create_info, NULL, &src1_buffer));
- IS_VK_SUCCESS(vkBindBufferMemory(device, src1_buffer, memory, 0));
-
- // Bind the second input buffer to memory at offset `buffer_size`
- VkBuffer src2_buffer;
- IS_VK_SUCCESS(
- vkCreateBuffer(device, &buffer_create_info, NULL, &src2_buffer));
- IS_VK_SUCCESS(vkBindBufferMemory(device, src2_buffer, memory, buffer_size));
-
- // Bind the output buffer to memory at offset 2 x `buffer_size`
- VkBuffer dst_buffer;
- IS_VK_SUCCESS(vkCreateBuffer(device, &buffer_create_info, NULL, &dst_buffer));
- IS_VK_SUCCESS(
- vkBindBufferMemory(device, dst_buffer, memory, 2 * buffer_size));
-
- printf(" * Created input & output buffers\n");
-
- // Build our vector add shader and run with our buffers on target device
- buildAndRunShader(device, queue_family, src1_buffer, src2_buffer, dst_buffer);
-
- // Map our output buffer back to host memory
- IS_VK_SUCCESS(vkMapMemory(device, memory, 2 * buffer_size, buffer_size, 0,
- &mapped_ptr_void));
- mapped_ptr = mapped_ptr_void;
-
- // Verify our results
- for (int32_t i = 0; i < NUM_WORK_ITEMS; ++i) {
- const int32_t reference = i + (i + 1);
- if (mapped_ptr[i] != reference) {
- printf("Result mismatch for index %d\n", i);
- printf("Got %d, but expected %d\n", mapped_ptr[i], reference);
- exit(1);
- }
- }
- vkUnmapMemory(device, memory);
-
- printf(" * Successfully validated result\n");
-
- // Cleanup
- vkFreeMemory(device, memory, NULL);
- vkDestroyBuffer(device, src1_buffer, NULL);
- vkDestroyBuffer(device, src2_buffer, NULL);
- vkDestroyBuffer(device, dst_buffer, NULL);
- vkDestroyDevice(device, NULL);
- vkDestroyInstance(instance, NULL);
- printf(" * Released all created Vulkan objects\n");
-
- printf("\nExample ran successfully, exiting\n");
-
- return 0;
-}
diff --git a/source/vk/examples/VectorAddition/source/vector_add.comp b/source/vk/examples/VectorAddition/source/vector_add.comp
deleted file mode 100644
index b7c1a0484..000000000
--- a/source/vk/examples/VectorAddition/source/vector_add.comp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) Codeplay Software Limited
-//
-// Licensed under the Apache License, Version 2.0 (the "License") with LLVM
-// Exceptions; you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations
-// under the License.
-//
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-#version 450 core
-
-layout(set = 0, binding = 0) buffer block_a { int[] test_in1; };
-
-layout(set = 0, binding = 1) buffer block_b { int[] test_in2; };
-
-layout(set = 0, binding = 2) buffer block_c { int[] test_out; };
-
-void main() {
- uint id = gl_GlobalInvocationID.x;
- test_out[id] = test_in1[id] + test_in2[id];
-}
diff --git a/source/vk/external/Khronos/.cmake-format.py b/source/vk/external/Khronos/.cmake-format.py
deleted file mode 100644
index 07d2f99d6..000000000
--- a/source/vk/external/Khronos/.cmake-format.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Configuration for cmake-format (v0.4.1, circa Jul 2018)
-# https://github.com/cheshirekow/cmake_format
-
-# How wide to allow formatted cmake files
-line_width = 132
-
-# How many spaces to tab for indent
-tab_size = 4
-
-# If arglists are longer than this, break them always
-max_subargs_per_line = 3
-
-# If true, separate flow control names from their parentheses with a space
-separate_ctrl_name_with_space = False
-
-# If true, separate function names from parentheses with a space
-separate_fn_name_with_space = False
-
-# If a statement is wrapped to more than one line, than dangle the closing
-# parenthesis on it's own line
-dangle_parens = False
-
-# What character to use for bulleted lists
-bullet_char = u'*'
-
-# What character to use as punctuation after numerals in an enumerated list
-enum_char = u'.'
-
-# What style line endings to use in the output.
-line_ending = u'unix'
-
-# Format command names consistently as 'lower' or 'upper' case
-command_case = u'lower'
-
diff --git a/source/vk/external/Khronos/.gitattributes b/source/vk/external/Khronos/.gitattributes
deleted file mode 100644
index ca85b4618..000000000
--- a/source/vk/external/Khronos/.gitattributes
+++ /dev/null
@@ -1,16 +0,0 @@
-# See https://git-scm.com/docs/gitattributes
-# See https://help.github.com/articles/dealing-with-line-endings/
-
-# Default behavior, if core.autocrlf is unset.
-* text=auto
-
-# Files to be converted to native line endings on checkout.
-*.cpp text
-*.h text
-
-# Text files to always have CRLF (dos) line endings on checkout.
-*.bat text eol=crlf
-
-# Text files to always have LF (unix) line endings on checkout.
-*.sh text eol=lf
-
diff --git a/source/vk/external/Khronos/.gitignore b/source/vk/external/Khronos/.gitignore
deleted file mode 100644
index 61df00102..000000000
--- a/source/vk/external/Khronos/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# Python cache
-__pycache__
-*.pyc
-build
-.vscode/
-**/.*.swp
diff --git a/source/vk/external/Khronos/BUILD.gn b/source/vk/external/Khronos/BUILD.gn
deleted file mode 100644
index 67b9cf624..000000000
--- a/source/vk/external/Khronos/BUILD.gn
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2018-2019 The ANGLE Project Authors.
-# Copyright (C) 2019 LunarG, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import("//build_overrides/vulkan_headers.gni")
-
-config("vulkan_headers_config") {
- include_dirs = [ "include" ]
-
- if (is_win) {
- defines = [ "VK_USE_PLATFORM_WIN32_KHR" ]
- }
- if (defined(vulkan_use_x11) && vulkan_use_x11) {
- defines = [ "VK_USE_PLATFORM_XCB_KHR" ]
- }
- if (is_android) {
- defines = [ "VK_USE_PLATFORM_ANDROID_KHR" ]
- }
- if (is_fuchsia) {
- defines = [ "VK_USE_PLATFORM_FUCHSIA" ]
- }
- if (is_mac) {
- defines = [ "VK_USE_PLATFORM_METAL_EXT" ]
- }
- if (defined(is_ggp) && is_ggp) {
- defines = [ "VK_USE_PLATFORM_GGP" ]
- }
-}
-
-# Vulkan headers only, no compiled sources.
-source_set("vulkan_headers") {
- sources = [
- "include/vulkan/vk_icd.h",
- "include/vulkan/vk_layer.h",
- "include/vulkan/vk_platform.h",
- "include/vulkan/vk_sdk_platform.h",
- "include/vulkan/vulkan.h",
- "include/vulkan/vulkan.hpp",
- "include/vulkan/vulkan_core.h",
- ]
- public_configs = [ ":vulkan_headers_config" ]
-}
-
diff --git a/source/vk/external/Khronos/BUILD.md b/source/vk/external/Khronos/BUILD.md
deleted file mode 100644
index 118813486..000000000
--- a/source/vk/external/Khronos/BUILD.md
+++ /dev/null
@@ -1,274 +0,0 @@
-# Build Instructions
-
-Instructions for building this repository on Windows, Linux, and MacOS.
-
-## Index
-
-1. [Contributing](#contributing-to-the-repository)
-1. [Repository Content](#repository-content)
-1. [Repository Set-up](#repository-set-up)
-1. [Windows Build](#building-on-windows)
-1. [Linux Build](#building-on-linux)
-1. [MacOS Build](#building-on-macos)
-
-## Contributing to the Repository
-
-The contents of this repository are sourced primarily from the Khronos Vulkan
-API specification [repository](https://github.com/KhronosGroup/Vulkan-Docs).
-Please visit that repository for information on contributing.
-
-## Repository Content
-
-This repository contains the Vulkan header files and the Vulkan API definition
-(registry) with its related files. This repository does not create libraries
-or executables.
-
-However, this repository contains CMake build configuration files to "install"
-the files from this repository to a specific install directory. For example,
-you can install the files to a system directory such as `/usr/local` on Linux.
-
-If you are building other Vulkan-related repositories such as
-[Vulkan-Loader](https://github.com/KhronosGroup/Vulkan-Loader),
-you need to build the install target of this repository and provide the
-resulting install directory to those repositories.
-
-### Installed Files
-
-The `install` target installs the following files under the directory
-indicated by *install_dir*:
-
-- *install_dir*`/include/vulkan` : The header files found in the
- `include/vulkan` directory of this repository
-- *install_dir*`/share/vulkan/registry` : The registry files found in the
- `registry` directory of this repository
-
-The `uninstall` target can be used to remove the above files from the install
-directory.
-
-## Repository Set-Up
-
-### Download the Repository
-
-To create your local git repository:
-
- git clone https://github.com/KhronosGroup/Vulkan-Headers.git
-
-### Repository Dependencies
-
-This repository does not depend on any other repositories.
-
-### Build and Install Directories
-
-A common convention is to place the build directory in the top directory of
-the repository with a name of `build` and place the install directory as a
-child of the build directory with the name `install`. The remainder of these
-instructions follow this convention, although you can use any name for these
-directories and place them in any location.
-
-## Building On Windows
-
-### Windows Development Environment Requirements
-
-- Windows
- - Any Personal Computer version supported by Microsoft
-- Microsoft [Visual Studio](https://www.visualstudio.com/)
- - Versions
- - [2015](https://www.visualstudio.com/vs/older-downloads/)
- - [2017](https://www.visualstudio.com/vs/older-downloads/)
- - [2019](https://www.visualstudio.com/vs/downloads/)
- - The Community Edition of each of the above versions is sufficient, as
- well as any more capable edition.
-- [CMake 3.10.2](https://cmake.org/files/v3.10/cmake-3.10.2-win64-x64.zip) is recommended.
- - Use the installer option to add CMake to the system PATH
-- Git Client Support
- - [Git for Windows](http://git-scm.com/download/win) is a popular solution
- for Windows
- - Some IDEs (e.g., [Visual Studio](https://www.visualstudio.com/),
- [GitHub Desktop](https://desktop.github.com/)) have integrated
- Git client support
-
-### Windows Build - Microsoft Visual Studio
-
-The general approach is to run CMake to generate the Visual Studio project
-files. Then either run CMake with the `--build` option to build from the
-command line or use the Visual Studio IDE to open the generated solution and
-work with the solution interactively.
-
-#### Windows Quick Start
-
-From a "Developer Command Prompt for VS 201x" console:
-
- cd Vulkan-Headers
- mkdir build
- cd build
- cmake ..
- cmake --build . --target install
-
-See below for the details.
-
-#### Use `CMake` to Create the Visual Studio Project Files
-
-From within a "Developer Command Prompt for VS 201x" console, change your
-current directory to the top of the cloned repository directory, create a
-build directory and generate the Visual Studio project files:
-
- cd Vulkan-Headers
- mkdir build
- cd build
- cmake ..
-
-> Note: The `..` parameter tells `cmake` the location of the top of the
-> repository. If you place your build directory someplace else, you'll need to
-> specify the location of the repository top differently.
-
-The CMake configuration files set the default install directory location to
-`$CMAKE_BINARY_DIR\install`, which is a child of your build directory. In this
-example, the install directory becomes the `Vulkan-Headers\build\install`
-directory.
-
-The project installs the header files to
-
- Vulkan-Headers\build\install\include\vulkan
-
-and installs the registry files to
-
- Vulkan-Headers\build\install\share\vulkan\registry
-
-You can change the install directory with the `CMAKE_INSTALL_PREFIX` CMake
-variable.
-
-For example:
-
- cd Vulkan-Headers
- mkdir build
- cd build
- cmake -DCMAKE_INSTALL_PREFIX=/c/Users/dev/install .. # MINGW64 shell
-
-As it starts generating the project files, `cmake` responds with something
-like:
-
- -- Building for: Visual Studio 14 2015
-
-which is a 32-bit generator.
-
-Since this repository does not compile anything, there is no need to specify a
-specific generator such as "Visual Studio 14 2015 Win64", so the default
-generator should suffice.
-
-The above steps create a Windows solution file named `Vulkan-Headers.sln` in
-the build directory.
-
-At this point, you can build the solution from the command line or open the
-generated solution with Visual Studio.
-
-#### Build the Solution From the Command Line
-
-While still in the build directory:
-
- cmake --build . --target install
-
-to build the install target.
-
-Build the `uninstall` target to remove the files from the install directory.
-
- cmake --build . --target uninstall
-
-#### Build the Solution With Visual Studio
-
-Launch Visual Studio and open the "Vulkan-Headers.sln" solution file in the
-build directory. Build the `INSTALL` target from the Visual Studio solution
-explorer.
-
-Build the `uninstall` target to remove the files from the install directory.
-
-> Note: Since there are only the `INSTALL` and `uninstall` projects in the
-> solution, building the solution from the command line may be more efficient
-> than starting Visual Studio for these simple operations.
-
-## Building On Linux
-
-### Linux Development Environment Requirements
-
-There are no specific Linux distribution or compiler version requirements for
-building this repository. The required tools are
-
-- [CMake 3.10.2](https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz) is recommended.
-- git
-
-### Linux Build
-
-The general approach is to run CMake to generate make files. Then either run
-CMake with the `--build` option or `make` to build from the command line.
-
-#### Linux Quick Start
-
- cd Vulkan-Headers
- mkdir build
- cd build
- cmake -DCMAKE_INSTALL_PREFIX=install ..
- make install
-
-See below for the details.
-
-#### Use CMake to Create the Make Files
-
-Change your current directory to the top of the cloned repository directory,
-create a build directory and generate the make files:
-
- cd Vulkan-Headers
- mkdir build
- cd build
- cmake -DCMAKE_INSTALL_PREFIX=install ..
-
-> Note: The `..` parameter tells `cmake` the location of the top of the
-> repository. If you place your `build` directory someplace else, you'll need
-> to specify the location of the repository top differently.
-
-Set the `CMAKE_INSTALL_PREFIX` variable to the directory to serve as the
-destination directory for the `install` target.
-
-The above `cmake` command sets the install directory to
-`$CMAKE_BINARY_DIR/install`, which is a child of your `build` directory. In
-this example, the install directory becomes the `Vulkan-Headers/build/install`
-directory.
-
-The make file install target installs the header files to
-
- Vulkan-Headers/build/install/include/vulkan
-
-and installs the registry files to
-
- Vulkan-Headers/build/install/share/vulkan/registry
-
-> Note: For Linux, the default value for `CMAKE_INSTALL_PREFIX` is
-> `/usr/local`, which would be used if you do not specify
-> `CMAKE_INSTALL_PREFIX`. In this case, you may need to use `sudo` to install
-> to system directories later when you run `make install`.
-
-Note that after generating the make files, running `make`:
-
- make
-
-does nothing, since there are no libraries or executables to build.
-
-To install the header files:
-
- make install
-
-or
-
- cmake --build . --target install
-
-To uninstall the files from the install directories, you can execute:
-
- make uninstall
-
-or
-
- cmake --build . --target uninstall
-
-## Building on MacOS
-
-The instructions for building this repository on MacOS are similar to those for Linux.
-
-[CMake 3.10.2](https://cmake.org/files/v3.10/cmake-3.10.2-Darwin-x86_64.tar.gz) is recommended.
diff --git a/source/vk/external/Khronos/CMakeLists.txt b/source/vk/external/Khronos/CMakeLists.txt
deleted file mode 100644
index fc96c5e53..000000000
--- a/source/vk/external/Khronos/CMakeLists.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# ~~~
-# Copyright (c) 2018 Valve Corporation
-# Copyright (c) 2018 LunarG, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ~~~
-
-# CMake project initialization ---------------------------------------------------------------------------------------------------
-# This section contains pre-project() initialization, and ends with the project() command.
-
-cmake_minimum_required(VERSION 3.10.2)
-
-# NONE = this project has no language toolchain requirement.
-project(Vulkan-Headers NONE)
-
-# User-interface declarations ----------------------------------------------------------------------------------------------------
-# This section contains variables that affect development GUIs (e.g. CMake GUI and IDEs), such as option(), folders, and variables
-# with the CACHE property.
-
-include(GNUInstallDirs)
-
-if(WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- # Windows: if install locations not set by user, set install prefix to "\install".
- set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "default install path" FORCE)
-endif()
-
-# --------------------------------------------------------------------------------------------------------------------------------
-
-# define exported targets for nested project builds to consume
-add_library(Vulkan-Headers INTERFACE)
-target_include_directories(Vulkan-Headers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
-add_library(Vulkan::Headers ALIAS Vulkan-Headers)
-
-add_library(Vulkan-Registry INTERFACE)
-target_include_directories(Vulkan-Registry INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/registry")
-add_library(Vulkan::Registry ALIAS Vulkan-Registry)
-
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/registry" DESTINATION ${CMAKE_INSTALL_DATADIR}/vulkan)
-
-# uninstall target
-if(NOT TARGET uninstall)
- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE
- @ONLY)
- add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
-endif()
diff --git a/source/vk/external/Khronos/CODE_OF_CONDUCT.md b/source/vk/external/Khronos/CODE_OF_CONDUCT.md
deleted file mode 100644
index a11610bd3..000000000
--- a/source/vk/external/Khronos/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1 +0,0 @@
-A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil.
diff --git a/source/vk/external/Khronos/LICENSE.txt b/source/vk/external/Khronos/LICENSE.txt
deleted file mode 100644
index d64569567..000000000
--- a/source/vk/external/Khronos/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/source/vk/external/Khronos/README.md b/source/vk/external/Khronos/README.md
deleted file mode 100644
index 4687289a3..000000000
--- a/source/vk/external/Khronos/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Vulkan-Headers
-
-Vulkan header files and API registry
-
-## Repository Content
-
-The contents of this repository are largely obtained from other repositories and are
-collected, coordinated, and curated here.
-
-Do not propose pull requests to this repository which modify any files under
-include/vulkan/ or registry/. All such files are generated from the
-Vulkan-Docs repository and, in the case of include/vulkan/vulkan.hpp, the
-Vulkan-Hpp repository. Any changes must be made in those repositories.
-
-The projects for these repositories are:
-
-- [KhronosGroup/Vulkan-Docs](https://github.com/KhronosGroup/Vulkan-Docs)
- - Core Vulkan headers and Registry
-- [KhronosGroup/Vulkan-Hpp](https://github.com/KhronosGroup/Vulkan-Hpp)
- - C++ Bindings for Vulkan
-
-Please visit the appropriate project in the above list for obtaining additional information,
-asking questions, or opening issues.
-
-## Version Tagging Scheme
-
-Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
-specification release are tagged using the following format:
-`v<`_`version`_`>` (e.g., `v1.1.96`).
-
-**Note**: Marked version releases have undergone thorough testing but do not
-imply the same quality level as SDK tags. SDK tags follow the
-`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).
-
-This scheme was adopted following the 1.1.96 Vulkan specification release.
diff --git a/source/vk/external/Khronos/cmake/Copyright_cmake.txt b/source/vk/external/Khronos/cmake/Copyright_cmake.txt
deleted file mode 100644
index 743c63418..000000000
--- a/source/vk/external/Khronos/cmake/Copyright_cmake.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-CMake - Cross Platform Makefile Generator
-Copyright 2000-2018 Kitware, Inc. and Contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of Kitware, Inc. nor the names of Contributors
- may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-------------------------------------------------------------------------------
-
-The following individuals and institutions are among the Contributors:
-
-* Aaron C. Meadows
-* Adriaan de Groot
-* Aleksey Avdeev
-* Alexander Neundorf
-* Alexander Smorkalov
-* Alexey Sokolov
-* Alex Turbov
-* Andreas Pakulat
-* Andreas Schneider
-* André Rigland Brodtkorb
-* Axel Huebl, Helmholtz-Zentrum Dresden - Rossendorf
-* Benjamin Eikel
-* Bjoern Ricks
-* Brad Hards
-* Christopher Harvey
-* Christoph Grüninger
-* Clement Creusot
-* Daniel Blezek
-* Daniel Pfeifer
-* Enrico Scholz
-* Eran Ifrah
-* Esben Mose Hansen, Ange Optimization ApS
-* Geoffrey Viola
-* Google Inc
-* Gregor Jasny
-* Helio Chissini de Castro
-* Ilya Lavrenov
-* Insight Software Consortium
-* Jan Woetzel
-* Kelly Thompson
-* Konstantin Podsvirov
-* Mario Bensi
-* Mathieu Malaterre
-* Matthaeus G. Chajdas
-* Matthias Kretz
-* Matthias Maennich
-* Michael Stürmer
-* Miguel A. Figueroa-Villanueva
-* Mike Jackson
-* Mike McQuaid
-* Nicolas Bock
-* Nicolas Despres
-* Nikita Krupen'ko
-* NVIDIA Corporation
-* OpenGamma Ltd.
-* Patrick Stotko
-* Per Øyvind Karlsen
-* Peter Collingbourne
-* Petr Gotthard
-* Philip Lowman
-* Philippe Proulx
-* Raffi Enficiaud, Max Planck Society
-* Raumfeld
-* Roger Leigh
-* Rolf Eike Beer
-* Roman Donchenko
-* Roman Kharitonov
-* Ruslan Baratov
-* Sebastian Holtermann
-* Stephen Kelly
-* Sylvain Joubert
-* Thomas Sondergaard
-* Tobias Hunger
-* Todd Gamblin
-* Tristan Carel
-* University of Dundee
-* Vadim Zhukov
-* Will Dicharry
-
-See version control history for details of individual contributions.
-
-The above copyright and license notice applies to distributions of
-CMake in source and binary form. Third-party software packages supplied
-with CMake under compatible licenses provide their own copyright notices
-documented in corresponding subdirectories or source files.
-
-------------------------------------------------------------------------------
-
-CMake was initially developed by Kitware with the following sponsorship:
-
- * National Library of Medicine at the National Institutes of Health
- as part of the Insight Segmentation and Registration Toolkit (ITK).
-
- * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
- Visualization Initiative.
-
- * National Alliance for Medical Image Computing (NAMIC) is funded by the
- National Institutes of Health through the NIH Roadmap for Medical Research,
- Grant U54 EB005149.
-
- * Kitware, Inc.
diff --git a/source/vk/external/Khronos/cmake/cmake_uninstall.cmake.in b/source/vk/external/Khronos/cmake/cmake_uninstall.cmake.in
deleted file mode 100644
index 2037e3653..000000000
--- a/source/vk/external/Khronos/cmake/cmake_uninstall.cmake.in
+++ /dev/null
@@ -1,21 +0,0 @@
-if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
- message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-
-file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
-string(REGEX REPLACE "\n" ";" files "${files}")
-foreach(file ${files})
- message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
- if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
- exec_program(
- "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
- OUTPUT_VARIABLE rm_out
- RETURN_VALUE rm_retval
- )
- if(NOT "${rm_retval}" STREQUAL 0)
- message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
- endif(NOT "${rm_retval}" STREQUAL 0)
- else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
- message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
- endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
-endforeach(file)
diff --git a/source/vk/external/Khronos/include/vulkan/vk_icd.h b/source/vk/external/Khronos/include/vulkan/vk_icd.h
deleted file mode 100644
index 5dff59a16..000000000
--- a/source/vk/external/Khronos/include/vulkan/vk_icd.h
+++ /dev/null
@@ -1,183 +0,0 @@
-//
-// File: vk_icd.h
-//
-/*
- * Copyright (c) 2015-2016 The Khronos Group Inc.
- * Copyright (c) 2015-2016 Valve Corporation
- * Copyright (c) 2015-2016 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef VKICD_H
-#define VKICD_H
-
-#include "vulkan.h"
-#include
-
-// Loader-ICD version negotiation API. Versions add the following features:
-// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr
-// or vk_icdNegotiateLoaderICDInterfaceVersion.
-// Version 1 - Add support for vk_icdGetInstanceProcAddr.
-// Version 2 - Add Loader/ICD Interface version negotiation
-// via vk_icdNegotiateLoaderICDInterfaceVersion.
-// Version 3 - Add ICD creation/destruction of KHR_surface objects.
-// Version 4 - Add unknown physical device extension qyering via
-// vk_icdGetPhysicalDeviceProcAddr.
-// Version 5 - Tells ICDs that the loader is now paying attention to the
-// application version of Vulkan passed into the ApplicationInfo
-// structure during vkCreateInstance. This will tell the ICD
-// that if the loader is older, it should automatically fail a
-// call for any API version > 1.0. Otherwise, the loader will
-// manually determine if it can support the expected version.
-#define CURRENT_LOADER_ICD_INTERFACE_VERSION 5
-#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0
-#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4
-typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
-
-// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
-// file directly, it won't be found.
-#ifndef PFN_GetPhysicalDeviceProcAddr
-typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
-#endif
-
-/*
- * The ICD must reserve space for a pointer for the loader's dispatch
- * table, at the start of .
- * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
- */
-
-#define ICD_LOADER_MAGIC 0x01CDC0DE
-
-typedef union {
- uintptr_t loaderMagic;
- void *loaderData;
-} VK_LOADER_DATA;
-
-static inline void set_loader_magic_value(void *pNewObject) {
- VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
- loader_info->loaderMagic = ICD_LOADER_MAGIC;
-}
-
-static inline bool valid_loader_magic_value(void *pNewObject) {
- const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
- return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
-}
-
-/*
- * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
- * contains the platform-specific connection and surface information.
- */
-typedef enum {
- VK_ICD_WSI_PLATFORM_MIR,
- VK_ICD_WSI_PLATFORM_WAYLAND,
- VK_ICD_WSI_PLATFORM_WIN32,
- VK_ICD_WSI_PLATFORM_XCB,
- VK_ICD_WSI_PLATFORM_XLIB,
- VK_ICD_WSI_PLATFORM_ANDROID,
- VK_ICD_WSI_PLATFORM_MACOS,
- VK_ICD_WSI_PLATFORM_IOS,
- VK_ICD_WSI_PLATFORM_DISPLAY,
- VK_ICD_WSI_PLATFORM_HEADLESS,
- VK_ICD_WSI_PLATFORM_METAL,
-} VkIcdWsiPlatform;
-
-typedef struct {
- VkIcdWsiPlatform platform;
-} VkIcdSurfaceBase;
-
-#ifdef VK_USE_PLATFORM_MIR_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- MirConnection *connection;
- MirSurface *mirSurface;
-} VkIcdSurfaceMir;
-#endif // VK_USE_PLATFORM_MIR_KHR
-
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- struct wl_display *display;
- struct wl_surface *surface;
-} VkIcdSurfaceWayland;
-#endif // VK_USE_PLATFORM_WAYLAND_KHR
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- HINSTANCE hinstance;
- HWND hwnd;
-} VkIcdSurfaceWin32;
-#endif // VK_USE_PLATFORM_WIN32_KHR
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- xcb_connection_t *connection;
- xcb_window_t window;
-} VkIcdSurfaceXcb;
-#endif // VK_USE_PLATFORM_XCB_KHR
-
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- Display *dpy;
- Window window;
-} VkIcdSurfaceXlib;
-#endif // VK_USE_PLATFORM_XLIB_KHR
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-typedef struct {
- VkIcdSurfaceBase base;
- struct ANativeWindow *window;
-} VkIcdSurfaceAndroid;
-#endif // VK_USE_PLATFORM_ANDROID_KHR
-
-#ifdef VK_USE_PLATFORM_MACOS_MVK
-typedef struct {
- VkIcdSurfaceBase base;
- const void *pView;
-} VkIcdSurfaceMacOS;
-#endif // VK_USE_PLATFORM_MACOS_MVK
-
-#ifdef VK_USE_PLATFORM_IOS_MVK
-typedef struct {
- VkIcdSurfaceBase base;
- const void *pView;
-} VkIcdSurfaceIOS;
-#endif // VK_USE_PLATFORM_IOS_MVK
-
-typedef struct {
- VkIcdSurfaceBase base;
- VkDisplayModeKHR displayMode;
- uint32_t planeIndex;
- uint32_t planeStackIndex;
- VkSurfaceTransformFlagBitsKHR transform;
- float globalAlpha;
- VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
- VkExtent2D imageExtent;
-} VkIcdSurfaceDisplay;
-
-typedef struct {
- VkIcdSurfaceBase base;
-} VkIcdSurfaceHeadless;
-
-#ifdef VK_USE_PLATFORM_METAL_EXT
-typedef struct {
- VkIcdSurfaceBase base;
- const CAMetalLayer *pLayer;
-} VkIcdSurfaceMetal;
-#endif // VK_USE_PLATFORM_METAL_EXT
-
-#endif // VKICD_H
diff --git a/source/vk/external/Khronos/include/vulkan/vk_layer.h b/source/vk/external/Khronos/include/vulkan/vk_layer.h
deleted file mode 100644
index fa7652008..000000000
--- a/source/vk/external/Khronos/include/vulkan/vk_layer.h
+++ /dev/null
@@ -1,202 +0,0 @@
-//
-// File: vk_layer.h
-//
-/*
- * Copyright (c) 2015-2017 The Khronos Group Inc.
- * Copyright (c) 2015-2017 Valve Corporation
- * Copyright (c) 2015-2017 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/* Need to define dispatch table
- * Core struct can then have ptr to dispatch table at the top
- * Along with object ptrs for current and next OBJ
- */
-#pragma once
-
-#include "vulkan.h"
-#if defined(__GNUC__) && __GNUC__ >= 4
-#define VK_LAYER_EXPORT __attribute__((visibility("default")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
-#define VK_LAYER_EXPORT __attribute__((visibility("default")))
-#else
-#define VK_LAYER_EXPORT
-#endif
-
-#define MAX_NUM_UNKNOWN_EXTS 250
-
- // Loader-Layer version negotiation API. Versions add the following features:
- // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr
- // or vk_icdNegotiateLoaderLayerInterfaceVersion.
- // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and
- // vk_icdNegotiateLoaderLayerInterfaceVersion.
-#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2
-#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1
-
-#define VK_CURRENT_CHAIN_VERSION 1
-
-// Typedef for use in the interfaces below
-typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
-
-// Version negotiation values
-typedef enum VkNegotiateLayerStructType {
- LAYER_NEGOTIATE_UNINTIALIZED = 0,
- LAYER_NEGOTIATE_INTERFACE_STRUCT = 1,
-} VkNegotiateLayerStructType;
-
-// Version negotiation structures
-typedef struct VkNegotiateLayerInterface {
- VkNegotiateLayerStructType sType;
- void *pNext;
- uint32_t loaderLayerInterfaceVersion;
- PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
- PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr;
- PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr;
-} VkNegotiateLayerInterface;
-
-// Version negotiation functions
-typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct);
-
-// Function prototype for unknown physical device extension command
-typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device);
-
-// ------------------------------------------------------------------------------------------------
-// CreateInstance and CreateDevice support structures
-
-/* Sub type of structure for instance and device loader ext of CreateInfo.
- * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
- * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
- * then VkLayerFunction indicates struct type pointed to by pNext
- */
-typedef enum VkLayerFunction_ {
- VK_LAYER_LINK_INFO = 0,
- VK_LOADER_DATA_CALLBACK = 1,
- VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2
-} VkLayerFunction;
-
-typedef struct VkLayerInstanceLink_ {
- struct VkLayerInstanceLink_ *pNext;
- PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
- PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr;
-} VkLayerInstanceLink;
-
-/*
- * When creating the device chain the loader needs to pass
- * down information about it's device structure needed at
- * the end of the chain. Passing the data via the
- * VkLayerDeviceInfo avoids issues with finding the
- * exact instance being used.
- */
-typedef struct VkLayerDeviceInfo_ {
- void *device_info;
- PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
-} VkLayerDeviceInfo;
-
-typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
- void *object);
-typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
- void *object);
-typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
- const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
-typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction);
-typedef struct {
- VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
- const void *pNext;
- VkLayerFunction function;
- union {
- VkLayerInstanceLink *pLayerInfo;
- PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
- struct {
- PFN_vkLayerCreateDevice pfnLayerCreateDevice;
- PFN_vkLayerDestroyDevice pfnLayerDestroyDevice;
- } layerDevice;
- } u;
-} VkLayerInstanceCreateInfo;
-
-typedef struct VkLayerDeviceLink_ {
- struct VkLayerDeviceLink_ *pNext;
- PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
- PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
-} VkLayerDeviceLink;
-
-typedef struct {
- VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
- const void *pNext;
- VkLayerFunction function;
- union {
- VkLayerDeviceLink *pLayerInfo;
- PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
- } u;
-} VkLayerDeviceCreateInfo;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct);
-
-typedef enum VkChainType {
- VK_CHAIN_TYPE_UNKNOWN = 0,
- VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1,
- VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2,
- VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3,
-} VkChainType;
-
-typedef struct VkChainHeader {
- VkChainType type;
- uint32_t version;
- uint32_t size;
-} VkChainHeader;
-
-typedef struct VkEnumerateInstanceExtensionPropertiesChain {
- VkChainHeader header;
- VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *,
- VkExtensionProperties *);
- const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink;
-
-#if defined(__cplusplus)
- inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const {
- return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties);
- }
-#endif
-} VkEnumerateInstanceExtensionPropertiesChain;
-
-typedef struct VkEnumerateInstanceLayerPropertiesChain {
- VkChainHeader header;
- VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *);
- const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink;
-
-#if defined(__cplusplus)
- inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const {
- return pfnNextLayer(pNextLink, pPropertyCount, pProperties);
- }
-#endif
-} VkEnumerateInstanceLayerPropertiesChain;
-
-typedef struct VkEnumerateInstanceVersionChain {
- VkChainHeader header;
- VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *);
- const struct VkEnumerateInstanceVersionChain *pNextLink;
-
-#if defined(__cplusplus)
- inline VkResult CallDown(uint32_t *pApiVersion) const {
- return pfnNextLayer(pNextLink, pApiVersion);
- }
-#endif
-} VkEnumerateInstanceVersionChain;
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/source/vk/external/Khronos/include/vulkan/vk_platform.h b/source/vk/external/Khronos/include/vulkan/vk_platform.h
deleted file mode 100644
index dbb011285..000000000
--- a/source/vk/external/Khronos/include/vulkan/vk_platform.h
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// File: vk_platform.h
-//
-/*
-** Copyright (c) 2014-2020 The Khronos Group Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-
-#ifndef VK_PLATFORM_H_
-#define VK_PLATFORM_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif // __cplusplus
-
-/*
-***************************************************************************************************
-* Platform-specific directives and type declarations
-***************************************************************************************************
-*/
-
-/* Platform-specific calling convention macros.
- *
- * Platforms should define these so that Vulkan clients call Vulkan commands
- * with the same calling conventions that the Vulkan implementation expects.
- *
- * VKAPI_ATTR - Placed before the return type in function declarations.
- * Useful for C++11 and GCC/Clang-style function attribute syntax.
- * VKAPI_CALL - Placed after the return type in function declarations.
- * Useful for MSVC-style calling convention syntax.
- * VKAPI_PTR - Placed between the '(' and '*' in function pointer types.
- *
- * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void);
- * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
- */
-#if defined(_WIN32)
- // On Windows, Vulkan commands use the stdcall convention
- #define VKAPI_ATTR
- #define VKAPI_CALL __stdcall
- #define VKAPI_PTR VKAPI_CALL
-#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
- #error "Vulkan isn't supported for the 'armeabi' NDK ABI"
-#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
- // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
- // calling convention, i.e. float parameters are passed in registers. This
- // is true even if the rest of the application passes floats on the stack,
- // as it does by default when compiling for the armeabi-v7a NDK ABI.
- #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
- #define VKAPI_CALL
- #define VKAPI_PTR VKAPI_ATTR
-#else
- // On other platforms, use the default calling convention
- #define VKAPI_ATTR
- #define VKAPI_CALL
- #define VKAPI_PTR
-#endif
-
-#include
-
-#if !defined(VK_NO_STDINT_H)
- #if defined(_MSC_VER) && (_MSC_VER < 1600)
- typedef signed __int8 int8_t;
- typedef unsigned __int8 uint8_t;
- typedef signed __int16 int16_t;
- typedef unsigned __int16 uint16_t;
- typedef signed __int32 int32_t;
- typedef unsigned __int32 uint32_t;
- typedef signed __int64 int64_t;
- typedef unsigned __int64 uint64_t;
- #else
- #include
- #endif
-#endif // !defined(VK_NO_STDINT_H)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif // __cplusplus
-
-#endif
diff --git a/source/vk/external/Khronos/include/vulkan/vk_sdk_platform.h b/source/vk/external/Khronos/include/vulkan/vk_sdk_platform.h
deleted file mode 100644
index 96d867694..000000000
--- a/source/vk/external/Khronos/include/vulkan/vk_sdk_platform.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// File: vk_sdk_platform.h
-//
-/*
- * Copyright (c) 2015-2016 The Khronos Group Inc.
- * Copyright (c) 2015-2016 Valve Corporation
- * Copyright (c) 2015-2016 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VK_SDK_PLATFORM_H
-#define VK_SDK_PLATFORM_H
-
-#if defined(_WIN32)
-#define NOMINMAX
-#ifndef __cplusplus
-#undef inline
-#define inline __inline
-#endif // __cplusplus
-
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
-// C99:
-// Microsoft didn't implement C99 in Visual Studio; but started adding it with
-// VS2013. However, VS2013 still didn't have snprintf(). The following is a
-// work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the
-// "CMakeLists.txt" file).
-// NOTE: This is fixed in Visual Studio 2015.
-#define snprintf _snprintf
-#endif
-
-#define strdup _strdup
-
-#endif // _WIN32
-
-// Check for noexcept support using clang, with fallback to Windows or GCC version numbers
-#ifndef NOEXCEPT
-#if defined(__clang__)
-#if __has_feature(cxx_noexcept)
-#define HAS_NOEXCEPT
-#endif
-#else
-#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46
-#define HAS_NOEXCEPT
-#else
-#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS
-#define HAS_NOEXCEPT
-#endif
-#endif
-#endif
-
-#ifdef HAS_NOEXCEPT
-#define NOEXCEPT noexcept
-#else
-#define NOEXCEPT
-#endif
-#endif
-
-#endif // VK_SDK_PLATFORM_H
diff --git a/source/vk/external/Khronos/include/vulkan/vulkan.h b/source/vk/external/Khronos/include/vulkan/vulkan.h
deleted file mode 100644
index 20ecd1016..000000000
--- a/source/vk/external/Khronos/include/vulkan/vulkan.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef VULKAN_H_
-#define VULKAN_H_ 1
-
-/*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include "vk_platform.h"
-#include "vulkan_core.h"
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-#include "vulkan_android.h"
-#endif
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-#include
-#include "vulkan_fuchsia.h"
-#endif
-
-#ifdef VK_USE_PLATFORM_IOS_MVK
-#include "vulkan_ios.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_MACOS_MVK
-#include "vulkan_macos.h"
-#endif
-
-#ifdef VK_USE_PLATFORM_METAL_EXT
-#include "vulkan_metal.h"
-#endif
-
-#ifdef VK_USE_PLATFORM_VI_NN
-#include "vulkan_vi.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-#include
-#include "vulkan_wayland.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#include
-#include "vulkan_win32.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-#include
-#include "vulkan_xcb.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-#include
-#include "vulkan_xlib.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
-#include
-#include
-#include "vulkan_xlib_xrandr.h"
-#endif
-
-
-#ifdef VK_USE_PLATFORM_GGP
-#include
-#include "vulkan_ggp.h"
-#endif
-
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#include "vulkan_beta.h"
-#endif
-
-#endif // VULKAN_H_
diff --git a/source/vk/external/Khronos/include/vulkan/vulkan.hpp b/source/vk/external/Khronos/include/vulkan/vulkan.hpp
deleted file mode 100644
index 089171756..000000000
--- a/source/vk/external/Khronos/include/vulkan/vulkan.hpp
+++ /dev/null
@@ -1,82734 +0,0 @@
-// Copyright (c) 2015-2020 The Khronos Group Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-// ---- Exceptions to the Apache 2.0 License: ----
-//
-// As an exception, if you use this Software to generate code and portions of
-// this Software are embedded into the generated code as a result, you may
-// redistribute such product without providing attribution as would otherwise
-// be required by Sections 4(a), 4(b) and 4(d) of the License.
-//
-// In addition, if you combine or link code generated by this Software with
-// software that is licensed under the GPLv2 or the LGPL v2.0 or 2.1
-// ("`Combined Software`") and if a court of competent jurisdiction determines
-// that the patent provision (Section 3), the indemnity provision (Section 9)
-// or other Section of the License conflicts with the conditions of the
-// applicable GPL or LGPL license, you may retroactively and prospectively
-// choose to deem waived or otherwise exclude such Section(s) of the License,
-// but only in their entirety and only with respect to the Combined Software.
-//
-
-// This header is generated from the Khronos Vulkan XML API Registry.
-
-#ifndef VULKAN_HPP
-#define VULKAN_HPP
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#if defined(VULKAN_HPP_DISABLE_ENHANCED_MODE)
-# if !defined(VULKAN_HPP_NO_SMART_HANDLE)
-# define VULKAN_HPP_NO_SMART_HANDLE
-# endif
-#else
-# include
-# include
-#endif
-
-#if !defined(VULKAN_HPP_ASSERT)
-# include
-# define VULKAN_HPP_ASSERT assert
-#endif
-
-#if !defined(VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL)
-# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1
-#endif
-
-#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL == 1
-# if defined(__linux__) || defined(__APPLE__)
-# include
-# endif
-
-# if defined(_WIN32)
-# include
-# endif
-#endif
-
-#if 201711 <= __cpp_impl_three_way_comparison
-# define VULKAN_HPP_HAS_SPACESHIP_OPERATOR
-#endif
-#if defined(VULKAN_HPP_HAS_SPACESHIP_OPERATOR)
-# include
-#endif
-
-static_assert( VK_HEADER_VERSION == 135 , "Wrong VK_HEADER_VERSION!" );
-
-// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
-// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
-#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
-# if !defined( VULKAN_HPP_TYPESAFE_CONVERSION )
-# define VULKAN_HPP_TYPESAFE_CONVERSION
-# endif
-#endif
-
-// includes through some other header
-// this results in major(x) being resolved to gnu_dev_major(x)
-// which is an expression in a constructor initializer list.
-#if defined(major)
- #undef major
-#endif
-#if defined(minor)
- #undef minor
-#endif
-
-// Windows defines MemoryBarrier which is deprecated and collides
-// with the VULKAN_HPP_NAMESPACE::MemoryBarrier struct.
-#if defined(MemoryBarrier)
- #undef MemoryBarrier
-#endif
-
-#if !defined(VULKAN_HPP_HAS_UNRESTRICTED_UNIONS)
-# if defined(__clang__)
-# if __has_feature(cxx_unrestricted_unions)
-# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
-# endif
-# elif defined(__GNUC__)
-# define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
-# if 40600 <= GCC_VERSION
-# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
-# endif
-# elif defined(_MSC_VER)
-# if 1900 <= _MSC_VER
-# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
-# endif
-# endif
-#endif
-
-#if !defined(VULKAN_HPP_INLINE)
-# if defined(__clang__)
-# if __has_attribute(always_inline)
-# define VULKAN_HPP_INLINE __attribute__((always_inline)) __inline__
-# else
-# define VULKAN_HPP_INLINE inline
-# endif
-# elif defined(__GNUC__)
-# define VULKAN_HPP_INLINE __attribute__((always_inline)) __inline__
-# elif defined(_MSC_VER)
-# define VULKAN_HPP_INLINE inline
-# else
-# define VULKAN_HPP_INLINE inline
-# endif
-#endif
-
-#if defined(VULKAN_HPP_TYPESAFE_CONVERSION)
-# define VULKAN_HPP_TYPESAFE_EXPLICIT
-#else
-# define VULKAN_HPP_TYPESAFE_EXPLICIT explicit
-#endif
-
-#if defined(__cpp_constexpr)
-# define VULKAN_HPP_CONSTEXPR constexpr
-# if __cpp_constexpr >= 201304
-# define VULKAN_HPP_CONSTEXPR_14 constexpr
-# else
-# define VULKAN_HPP_CONSTEXPR_14
-# endif
-# define VULKAN_HPP_CONST_OR_CONSTEXPR constexpr
-#else
-# define VULKAN_HPP_CONSTEXPR
-# define VULKAN_HPP_CONSTEXPR_14
-# define VULKAN_HPP_CONST_OR_CONSTEXPR const
-#endif
-
-#if !defined(VULKAN_HPP_NOEXCEPT)
-# if defined(_MSC_VER) && (_MSC_VER <= 1800)
-# define VULKAN_HPP_NOEXCEPT
-# else
-# define VULKAN_HPP_NOEXCEPT noexcept
-# define VULKAN_HPP_HAS_NOEXCEPT 1
-# endif
-#endif
-
-#if !defined(VULKAN_HPP_NAMESPACE)
-#define VULKAN_HPP_NAMESPACE vk
-#endif
-
-#define VULKAN_HPP_STRINGIFY2(text) #text
-#define VULKAN_HPP_STRINGIFY(text) VULKAN_HPP_STRINGIFY2(text)
-#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY(VULKAN_HPP_NAMESPACE)
-
-namespace VULKAN_HPP_NAMESPACE
-{
-#if !defined(VULKAN_HPP_DISABLE_ENHANCED_MODE)
- template
- class ArrayProxy
- {
- public:
- VULKAN_HPP_CONSTEXPR ArrayProxy(std::nullptr_t) VULKAN_HPP_NOEXCEPT
- : m_count(0)
- , m_ptr(nullptr)
- {}
-
- ArrayProxy(typename std::remove_reference::type & ptr) VULKAN_HPP_NOEXCEPT
- : m_count(1)
- , m_ptr(&ptr)
- {}
-
- ArrayProxy(uint32_t count, T * ptr) VULKAN_HPP_NOEXCEPT
- : m_count(count)
- , m_ptr(ptr)
- {}
-
- template
- ArrayProxy(std::array::type, N> & data) VULKAN_HPP_NOEXCEPT
- : m_count(N)
- , m_ptr(data.data())
- {}
-
- template
- ArrayProxy(std::array::type, N> const& data) VULKAN_HPP_NOEXCEPT
- : m_count(N)
- , m_ptr(data.data())
- {}
-
- template ::type>>
- ArrayProxy(std::vector::type, Allocator> & data) VULKAN_HPP_NOEXCEPT
- : m_count(static_cast(data.size()))
- , m_ptr(data.data())
- {}
-
- template ::type>>
- ArrayProxy(std::vector::type, Allocator> const& data) VULKAN_HPP_NOEXCEPT
- : m_count(static_cast(data.size()))
- , m_ptr(data.data())
- {}
-
- ArrayProxy(std::initializer_list::type> const& data) VULKAN_HPP_NOEXCEPT
- : m_count(static_cast(data.end() - data.begin()))
- , m_ptr(data.begin())
- {}
-
- const T * begin() const VULKAN_HPP_NOEXCEPT
- {
- return m_ptr;
- }
-
- const T * end() const VULKAN_HPP_NOEXCEPT
- {
- return m_ptr + m_count;
- }
-
- const T & front() const VULKAN_HPP_NOEXCEPT
- {
- VULKAN_HPP_ASSERT(m_count && m_ptr);
- return *m_ptr;
- }
-
- const T & back() const VULKAN_HPP_NOEXCEPT
- {
- VULKAN_HPP_ASSERT(m_count && m_ptr);
- return *(m_ptr + m_count - 1);
- }
-
- bool empty() const VULKAN_HPP_NOEXCEPT
- {
- return (m_count == 0);
- }
-
- uint32_t size() const VULKAN_HPP_NOEXCEPT
- {
- return m_count;
- }
-
- T * data() const VULKAN_HPP_NOEXCEPT
- {
- return m_ptr;
- }
-
- private:
- uint32_t m_count;
- T * m_ptr;
- };
-#endif
-
- template struct FlagTraits
- {
- enum { allFlags = 0 };
- };
-
- template
- class Flags
- {
- public:
- using MaskType = typename std::underlying_type::type;
-
- // constructors
- VULKAN_HPP_CONSTEXPR Flags() VULKAN_HPP_NOEXCEPT
- : m_mask(0)
- {}
-
- VULKAN_HPP_CONSTEXPR Flags(BitType bit) VULKAN_HPP_NOEXCEPT
- : m_mask(static_cast(bit))
- {}
-
- VULKAN_HPP_CONSTEXPR Flags(Flags const& rhs) VULKAN_HPP_NOEXCEPT
- : m_mask(rhs.m_mask)
- {}
-
- VULKAN_HPP_CONSTEXPR explicit Flags(MaskType flags) VULKAN_HPP_NOEXCEPT
- : m_mask(flags)
- {}
-
- // relational operators
-#if defined(VULKAN_HPP_HAS_SPACESHIP_OPERATOR)
- auto operator<=>(Flags const&) const = default;
-#else
- VULKAN_HPP_CONSTEXPR bool operator<(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask < rhs.m_mask;
- }
-
- VULKAN_HPP_CONSTEXPR bool operator<=(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask <= rhs.m_mask;
- }
-
- VULKAN_HPP_CONSTEXPR bool operator>(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask > rhs.m_mask;
- }
-
- VULKAN_HPP_CONSTEXPR bool operator>=(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask >= rhs.m_mask;
- }
-
- VULKAN_HPP_CONSTEXPR bool operator==(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask == rhs.m_mask;
- }
-
- VULKAN_HPP_CONSTEXPR bool operator!=(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return m_mask != rhs.m_mask;
- }
-#endif
-
- // logical operator
- VULKAN_HPP_CONSTEXPR bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return !m_mask;
- }
-
- // bitwise operators
- VULKAN_HPP_CONSTEXPR Flags operator&(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return Flags(m_mask & rhs.m_mask);
- }
-
- VULKAN_HPP_CONSTEXPR Flags operator|(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return Flags(m_mask | rhs.m_mask);
- }
-
- VULKAN_HPP_CONSTEXPR Flags operator^(Flags const& rhs) const VULKAN_HPP_NOEXCEPT
- {
- return Flags(m_mask ^ rhs.m_mask);
- }
-
- VULKAN_HPP_CONSTEXPR Flags operator~() const VULKAN_HPP_NOEXCEPT
- {
- return Flags(m_mask ^ FlagTraits::allFlags);
- }
-
- // assignment operators
- Flags & operator=(Flags const& rhs) VULKAN_HPP_NOEXCEPT
- {
- m_mask = rhs.m_mask;
- return *this;
- }
-
- Flags & operator|=(Flags const& rhs) VULKAN_HPP_NOEXCEPT
- {
- m_mask |= rhs.m_mask;
- return *this;
- }
-
- Flags & operator&=(Flags const& rhs) VULKAN_HPP_NOEXCEPT
- {
- m_mask &= rhs.m_mask;
- return *this;
- }
-
- Flags & operator^=(Flags const& rhs) VULKAN_HPP_NOEXCEPT
- {
- m_mask ^= rhs.m_mask;
- return *this;
- }
-
- // cast operators
- explicit VULKAN_HPP_CONSTEXPR operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return !!m_mask;
- }
-
- explicit VULKAN_HPP_CONSTEXPR operator MaskType() const VULKAN_HPP_NOEXCEPT
- {
- return m_mask;
- }
-
- private:
- MaskType m_mask;
- };
-
-#if !defined(VULKAN_HPP_HAS_SPACESHIP_OPERATOR)
- // relational operators only needed for pre C++20
- template
- VULKAN_HPP_CONSTEXPR bool operator<(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags > bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR bool operator<=(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags >= bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR bool operator>(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags < bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR bool operator>=(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags <= bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR bool operator==(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags == bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR bool operator!=(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags != bit;
- }
-#endif
-
- // bitwise operators
- template
- VULKAN_HPP_CONSTEXPR Flags operator&(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags & bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR Flags operator|(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags | bit;
- }
-
- template
- VULKAN_HPP_CONSTEXPR Flags operator^(BitType bit, Flags const& flags) VULKAN_HPP_NOEXCEPT
- {
- return flags ^ bit;
- }
-
- template
- class Optional
- {
- public:
- Optional(RefType & reference) VULKAN_HPP_NOEXCEPT { m_ptr = &reference; }
- Optional(RefType * ptr) VULKAN_HPP_NOEXCEPT { m_ptr = ptr; }
- Optional(std::nullptr_t) VULKAN_HPP_NOEXCEPT { m_ptr = nullptr; }
-
- operator RefType*() const VULKAN_HPP_NOEXCEPT { return m_ptr; }
- RefType const* operator->() const VULKAN_HPP_NOEXCEPT { return m_ptr; }
- explicit operator bool() const VULKAN_HPP_NOEXCEPT { return !!m_ptr; }
-
- private:
- RefType *m_ptr;
- };
-
- template struct isStructureChainValid { enum { value = false }; };
-
- template
- struct TypeList
- {
- using list = P;
- using last = T;
- };
-
- template
- struct extendCheck
- {
- static const bool valid = isStructureChainValid::value || extendCheck::valid;
- };
-
- template
- struct extendCheck,X>
- {
- static const bool valid = isStructureChainValid::value;
- };
-
- template
- struct extendCheck
- {
- static const bool valid = true;
- };
-
- template
- struct isPartOfStructureChain
- {
- static const bool valid = false;
- };
-
- template
- struct isPartOfStructureChain
- {
- static const bool valid = std::is_same::value || isPartOfStructureChain::valid;
- };
-
- template
- class StructureChainElement
- {
- public:
- explicit operator Element&() VULKAN_HPP_NOEXCEPT { return value; }
- explicit operator const Element&() const VULKAN_HPP_NOEXCEPT { return value; }
- private:
- Element value;
- };
-
- template
- class StructureChain : private StructureChainElement...
- {
- public:
- StructureChain() VULKAN_HPP_NOEXCEPT
- {
- link();
- }
-
- StructureChain(StructureChain const &rhs) VULKAN_HPP_NOEXCEPT
- {
- linkAndCopy(rhs);
- }
-
- StructureChain(StructureElements const &... elems) VULKAN_HPP_NOEXCEPT
- {
- linkAndCopyElements(elems...);
- }
-
- StructureChain& operator=(StructureChain const &rhs) VULKAN_HPP_NOEXCEPT
- {
- linkAndCopy(rhs);
- return *this;
- }
-
- template ClassType& get() VULKAN_HPP_NOEXCEPT { return static_cast(*this);}
-
- template const ClassType& get() const VULKAN_HPP_NOEXCEPT { return static_cast(*this);}
-
- template
- std::tuple get()
- {
- return std::tie(get(), get(), get()...);
- }
-
- template
- std::tuple get() const
- {
- return std::tie(get(), get(), get()...);
- }
-
- template
- void unlink() VULKAN_HPP_NOEXCEPT
- {
- static_assert(isPartOfStructureChain::valid, "Can't unlink Structure that's not part of this StructureChain!");
- static_assert(!std::is_same>::type>::value, "It's not allowed to unlink the first element!");
- VkBaseOutStructure * ptr = reinterpret_cast(&get());
- VULKAN_HPP_ASSERT(ptr != nullptr);
- VkBaseOutStructure ** ppNext = &(reinterpret_cast(this)->pNext);
- VULKAN_HPP_ASSERT(*ppNext != nullptr);
- while (*ppNext != ptr)
- {
- ppNext = &(*ppNext)->pNext;
- VULKAN_HPP_ASSERT(*ppNext != nullptr); // fires, if the ClassType member has already been unlinked !
- }
- VULKAN_HPP_ASSERT(*ppNext == ptr);
- *ppNext = (*ppNext)->pNext;
- }
-
- template
- void relink() VULKAN_HPP_NOEXCEPT
- {
- static_assert(isPartOfStructureChain::valid, "Can't relink Structure that's not part of this StructureChain!");
- static_assert(!std::is_same>::type>::value, "It's not allowed to have the first element unlinked!");
- VkBaseOutStructure * ptr = reinterpret_cast(&get());
- VULKAN_HPP_ASSERT(ptr != nullptr);
- VkBaseOutStructure ** ppNext = &(reinterpret_cast(this)->pNext);
- VULKAN_HPP_ASSERT(*ppNext != nullptr);
-#if !defined(NDEBUG)
- while (*ppNext)
- {
- VULKAN_HPP_ASSERT(*ppNext != ptr); // fires, if the ClassType member has not been unlinked before
- ppNext = &(*ppNext)->pNext;
- }
- ppNext = &(reinterpret_cast(this)->pNext);
-#endif
- ptr->pNext = *ppNext;
- *ppNext = ptr;
- }
-
- private:
- template
- void link() VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- }
-
- template
- void link() VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- X& x = static_cast(*this);
- Y& y = static_cast(*this);
- x.pNext = &y;
- link, Y, Z...>();
- }
-
- template
- void linkAndCopy(StructureChain const &rhs) VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- static_cast(*this) = static_cast(rhs);
- }
-
- template
- void linkAndCopy(StructureChain const &rhs) VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- X& x = static_cast(*this);
- Y& y = static_cast(*this);
- x = static_cast(rhs);
- x.pNext = &y;
- linkAndCopy, Y, Z...>(rhs);
- }
-
- template
- void linkAndCopyElements(X const &xelem) VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- static_cast(*this) = xelem;
- }
-
- template
- void linkAndCopyElements(X const &xelem, Y const &yelem, Z const &... zelem) VULKAN_HPP_NOEXCEPT
- {
- static_assert(extendCheck::valid, "The structure chain is not valid!");
- X& x = static_cast(*this);
- Y& y = static_cast(*this);
- x = xelem;
- x.pNext = &y;
- linkAndCopyElements, Y, Z...>(yelem, zelem...);
- }
- };
-
-#if !defined(VULKAN_HPP_NO_SMART_HANDLE)
- template class UniqueHandleTraits;
-
- template
- class UniqueHandle : public UniqueHandleTraits::deleter
- {
- private:
- using Deleter = typename UniqueHandleTraits::deleter;
-
- public:
- using element_type = Type;
-
- UniqueHandle()
- : Deleter()
- , m_value()
- {}
-
- explicit UniqueHandle( Type const& value, Deleter const& deleter = Deleter() ) VULKAN_HPP_NOEXCEPT
- : Deleter( deleter)
- , m_value( value )
- {}
-
- UniqueHandle( UniqueHandle const& ) = delete;
-
- UniqueHandle( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT
- : Deleter( std::move( static_cast( other ) ) )
- , m_value( other.release() )
- {}
-
- ~UniqueHandle() VULKAN_HPP_NOEXCEPT
- {
- if ( m_value ) this->destroy( m_value );
- }
-
- UniqueHandle & operator=( UniqueHandle const& ) = delete;
-
- UniqueHandle & operator=( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT
- {
- reset( other.release() );
- *static_cast(this) = std::move( static_cast(other) );
- return *this;
- }
-
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_value.operator bool();
- }
-
- Type const* operator->() const VULKAN_HPP_NOEXCEPT
- {
- return &m_value;
- }
-
- Type * operator->() VULKAN_HPP_NOEXCEPT
- {
- return &m_value;
- }
-
- Type const& operator*() const VULKAN_HPP_NOEXCEPT
- {
- return m_value;
- }
-
- Type & operator*() VULKAN_HPP_NOEXCEPT
- {
- return m_value;
- }
-
- const Type & get() const VULKAN_HPP_NOEXCEPT
- {
- return m_value;
- }
-
- Type & get() VULKAN_HPP_NOEXCEPT
- {
- return m_value;
- }
-
- void reset( Type const& value = Type() ) VULKAN_HPP_NOEXCEPT
- {
- if ( m_value != value )
- {
- if ( m_value ) this->destroy( m_value );
- m_value = value;
- }
- }
-
- Type release() VULKAN_HPP_NOEXCEPT
- {
- Type value = m_value;
- m_value = nullptr;
- return value;
- }
-
- void swap( UniqueHandle & rhs ) VULKAN_HPP_NOEXCEPT
- {
- std::swap(m_value, rhs.m_value);
- std::swap(static_cast(*this), static_cast(rhs));
- }
-
- private:
- Type m_value;
- };
-
- template
- VULKAN_HPP_INLINE std::vector uniqueToRaw(std::vector