The wraps came off of Vulkan, the next-generation rebuild of OpenGL, at the Game Developers Conference last week. Although the graphics API is still in development, we learned quite a bit about it in a conference session devoted to the topic. That session started with a fundamental truth: Vulkan is based on AMD's Mantle API, only it's been adapted and extended to work properly with a range of different modern GPU architectures.
This adaptation work is particularly crucial for makers of mobile GPUs, since many mobile graphics cores simply work differently than big desktop chips like AMD's GCN-based Radeons. The folks at Imagination Technologies ship tons of PowerVR graphics cores in Apple's iOS devices, among other things, and Imagination's GPUs are tile-based deferred renderers, not immediate-mode renderers like most desktop GPUs. Tilers can be more efficient than traditional IMRs, but they rely on keeping active GPU data in an on-chip buffer in order to extract that efficiency. Since Vulkan is a lower-level programming interface that gives game developers more control over the hardware than prior versions of OpenGL, doing the right thing with regard to tilers is an important part of forming Vulkan into a workable cross-platform standard.
Fortunately, that adaptation work appears to be progressing well, as evidenced by the fact that Imagination had a Vulkan demo up and running on its PowerVR GPU hardware on the GDC show floor—one of only a few such demos I saw in action.
The demo is essentially a port of an older OpenGL ES graphics demo, but it emits Vulkan commands that are received by Imagination Tech's own Vulkan graphics driver, so it's the real thing. The port was a two-month exercise involving just two driver engineers, which is a testament to the usability of the Vulkan API. Thanks to lower-level access to the GPU hardware via the API, the firm said its driver is "very thin," and most of the complexity in the programming task has moved into the application itself.
Vulkan has commands that allow the developer to do explicit loads and stores or frame-buffer data, which Imagination describes as a "huge win for tilers." Other modern graphics APIs like OpenGL and Direct3D keep the GPU at arm's length from the application, and as a result, the graphics drivers may modify all sorts of things about how commands actually get executed.
The demo was still in an early form and didn't match the ES version pixel for pixel, but it looked pretty good. Porting the demo to Vulkan didn't result in any performance gains, Imagination told us, largely because the demo itself isn't CPU-bound, but CPU usage is "way down" from the OpenGL ES version.