Apple loves to position itself as being on the cutting edge of OS research and development, but its long-term support for graphics APIs it didn’t develop in-house has been generally terrible. macOS is still limited to OpenGL 4.1, which was released in July, 2010. To put this in roughly approximate terms, imagine if Microsoft had quit evolving its graphics APIs with DirectX 11.0 and still expected everyone to rely on it for gaming and professional applications. Apple has launched its proprietary API for iOS and macOS, Metal, but it refused to support Vulkan, the open-source, low-overhead API intended to match DirectX 12 in the PC space. Fed up with this approach, the Khronos Group, which maintains Vulkan, has announced its own effort to bring Vulkan support to macOS and iOS whether Apple approves of it or not, via a thin translation layer.
Khronos has partnered with Valve, LunarG, and the Brenwill Workshop to create an SDK and libraries that allow for Vulkan development on macOS and iOS. Valve has also extended DOTA 2 to create a version that runs significantly faster under Vulkan on macOS than it does using Apple’s native OpenGL, as shown below:
This image compares Vulkan vs. native OGL code on three separate platforms: AMD FirePro D500 and a Mac Pro (2013), an Nvidia GT 650M (2012 MacBook Pro) and an Intel Iris Pro MacBook Pro (2014). It’s not surprising that the discrete solution would benefit the least, since Vulkan can’t magically fix limited EDRAM or memory bandwidth, but the 1.13x speedup on Intel integrated is still enough to notice.
Here’s the high-level overview for how code is mapped and translated from Vulkan to the Metal API. The end result is a game that performs better than the native OGL variant, at least in theory.
Khronos notes that only a few features had to be removed from the Vulkan Portability Initiative to hit this target, including:
- Triangle fans are not supported
- Separate stencil reference masks are not supported
- Vulkan Event functionality is currently not supported
- Support for only a limited set of texture-specific swizzles
- Allocation callbacks in object creation functions will be ignored
The long-term goal is to improve feature compatibility and to extend support both within the translation layer and to encompass other competing APIs, like DirectX 12. The rosiest view of this compatibility effort is that a Vulkan translation layer could make it easier to support DirectX 12 games in a non-Windows environment, though such support has historically been difficult enough to enable that I’m a bit leery of drawing that conclusion. Either way, however, these changes suggest Mac gaming could see a boost if more developers choose to support Khronos’ efforts in this space.