The PowerVR with Vulkan Advantage#

Tile-based renderers, such as PowerVR devices, can enjoy several advantages that Vulkan brings to the table.

Explicitly-declared dependencies#

All dependencies are explicitly declared ahead of time by the application. This means the driver can execute the commands in the most optimal way. This work had to be done on-the-fly in OpenGL ES and would usually never be optimal as the driver has to guess.

More importantly for tile-based renderers, the driver can package the work into tiler and rasterizer tasks which are directly consumable by the underlying hardware.

Fine-grained synchronisation#

compared to OpenGL ES, Vulkan applications have much finer control over synchronisation between objects and memory. The driver can build a comprehensive dependency chain, which means only caches that absolutely need to be flushed are, and operations that absolutely need to be completed are waited on. This means the graphics core can be used more efficiently, as work can be scheduled in advance with tiler tasks to get a head start while waiting on a fragment task.

Render passes#

The render pass object describes a render from start to finish. It disallows any operations that would cause a mid-frame flush during rasterization, which could stall the graphics hardware. This also means that the graphics core can more effectively use on-chip storage, because the intermediate frame buffer attachments that do not need to be stored are never written back to system memory. This can significantly reduce memory bandwidth and save power.

Explicit render state#

The Vulkan driver is aware of the entire render state through pipeline objects ahead of time. Shaders can be better optimised based on input/output and various fixed function states such as blending.

Consider operations such as shader patching, where code must be added to a shader to perform a certain graphical operation, such as alpha blending on PowerVR. These operations can now be done in advance before the shader is compiled, because the entire render state is already known. This can improve the graphics core’s efficiency and reduce hitching, as this extra work no longer needs to be carried out at draw time.