Introduction to Vulkan®

This guide is a step-by-step tutorial to help developers learn the basics and fundamentals of the Vulkan graphics API. It is not intended to be a comprehensive material designed to teach all of the details of Vulkan, but rather a starting point for developers with some background knowledge of graphics programming to be able to explore and learn the API for themselves by introducing the core principles of Vulkan.

Throughout this guide, code snippets will be included that have been taken from the HelloAPI example available as part of the PowerVR SDK available here. It is highly recommended to go through this example while reading this tutorial in order to see how the code works, as the code presented in this document is not entirely representative of the whole application.

What is Vulkan?

Vulkan is a modern graphics API produced by Khronos and has been developed to better fit modern hardware and programming techniques. Vulkan specifically aims to put more control in the hands of the developers by providing a better utilisation of multi-core devices, more explicit access to hardware, and a reduced driver overhead.

Vulkan can be described as a low-level API, as a lot of the work is left in the developer's hands. It is significantly more verbose than the previous generations of graphics APIs, and as a result, there is more work for the developer to do in using the API to ensure correct behaviour. Because of this, Vulkan is not recommended for beginners or those who do not already have a reasonable understanding of graphics programming. In short, Vulkan provides more control and flexibility to the developer in exchange for more effort from the developer. Using Vulkan also brings about other benefits as well, such as a better application structure, the ability to avoid a global state, a more explicit and easier model, and more.

Tutorial Overview

The goal of this document is to provide the reader with enough understanding of the basic concepts of Vulkan, as well as enough example code to see those concepts in practice, to be able to render a simple triangle on the screen. While this guide provides code snippets, as mentioned, it does not provide the whole code to be copy and pasted. For the full source code, see the HelloAPI example in the PowerVR SDK.

This guide will start off with a high-level overview of the API and its concepts, and then explains each of those concepts and how it relates back to code. To help newer developers gain a familiarity with Vulkan, this guide will continue to refer back to the application as a whole, as well as reiterating core concepts and object definitions.