Vulkan is a cross-platform graphics and compute API from the Khronos group.
Vulkan has many advantages over the older OpenGL and OpenGL ES standards:
- Unified and portable
- Vulkan provides one unified API framework for mobile, desktop, console, and embedded systems.
- It has portability across a wide range of implementations and is useful for a wide range of applications.
- Simpler drivers
- Vulkan uses simpler drivers to minimize driver overhead. The lower latency and better efficiency mean that an application can achieve better performance using Vulkan than OpenGL ES 3.1.
- The simpler drivers reduce application processor bottlenecks.
- Your application performs resource management, and has direct low-level control over your GPU.
- Multi-threading and multi-processing
- Vulkan supports multi-threading across multiple application processors. This feature enables you to use multiple application processors efficiently, lowering processing load, and power consumption.
- Your application controls thread management and synchronization.
- Command Buffers
- You can use multi-threading to do command creation for command buffers in parallel. You can also use a separate submission thread to place command buffers into command queues.
- You can add graphics, compute, and DMA command buffers.
- Different graphics, DMA, and compute queues provide flexibility for job dispatch.
- Multi-threaded command creation enables your code to run across multiple application processor cores, increasing performance. Using multiple application processors running at a lower clock rate, rather than one higher clocked processor also reduces power consumption.
- Vulkan uses the SPIR-V intermediate language that enables you to use a common language front end.
- SPIR-V is a multi-API, intermediate language for parallel compute and graphics. It includes flow control, graphics, and parallel compute constructs.
- It provides native representation for the Vulkan shader and OpenCL kernel source languages.
- Multiple platforms can use the same SPIR-V front-end compiler to generate pre-compiled shaders.
- Using SPIR-V means that there is no front-end compiler in the Vulkan driver, so the driver is simpler and shader compilation is faster.
- Using an intermediate language means that you are not required to ship shader source code with your application. It also provides flexibility for using different shading languages in the future.
- Loadable Layers
- Vulkan enables you to load software layers in development for testing and debugging.
- You can remove the additional software layers for production, so your shipping products do not have the testing overhead.
- Multi-pass rendering
- Multi-pass rendering is a technique where you declare everything ahead of time in the render pass. You can specify different outputs for each sub pass, and chain them together.
- Multi-pass enables the driver to make optimizations when pixels in one sub pass access the results of the previous sub pass at the same pixel location. In this way, data can be contained on the fast on-chip memory, saving bandwidth and power. This process is more efficient on tile-based GPUs such as Mali™ GPUs.
Example use-cases for multi-pass rendering are:
The following diagram shows the structure of Vulkan.
Figure 8-1 Vulkan structure