This is the Game Developers Conference week here in San Francisco, and Khronos, the group that governs the OpenGL ES specifications is revealing the latest version of the graphics API (application programming interface) which brings new features and capabilities to mobile developers. This update brings mobiles one step closer to “feature-parity” with the latest game consoles and PC hardware, but there is a little more work that needs to be done. Here’s what’s new:
Separate Shader Objects
Prior to Open GL ES 3.1 developers had to define a very strict connection between Vertex data formats, Vertex Shaders and Pixel Shaders, and because there can be quite a few variations of each of those developers often bumped into a combinatorial explosion of possible shaders that needed to be created.
This made things difficult to manage, and often required “final shaders” embedded in games to be computer-generated and assembled from a bunch of hand-written pieces. Even if manual labor is not required, having more shaders is bad for caching and can lead to more state changes and poor API performance. By decoupling these elements, OpenGL ES 3.1 makes things more efficient and easier to manage. This is a huge win.
The idea of Compute Shaders is to use the massive array of sub-processors in GPUs to perform tasks on large arrays of data, without going through a graphics API like DirectX or OpenGL. The data could represent anything, from general data, to physics attributes, to static images to layers of a 3D render.
The bottom-line is that it makes it possible tap into the huge performance of graphics processor, in a much more natural data-programming manner. This is the stuff that truly turns your phone in to a super-computer. Before that, it was all fluff.
I’m most excited by the new types of lighting that this will allow, since decoupling the lighting and the geometry has been the main quality and performance driver over the past 6 years or so. PC and consoles are using this, and now ES 3.1 opens the door for mobiles to do so as well.
Indirect Draw Commands
This is a great optimization that lets the GPU issue “draw” commands, without the intervention of the main CPU. On PC, this could be seen as a performance optimization since it can reduce latency dramatically. However, on mobile, anything that leads to diminishing the CPU usage is also a power-consumption optimization (for a given level of performance). “Indirect” means that the CPU is not generating the calls.
For example, if the GPU is used to calculate and generate a large number of debris, it’s best if it can issue its own draw commands to display those. Going back to the CPU to do so would be very inefficient. Expect to see more particles and clutter on mobile!
New Texture Modes
OpenGL ES 3.1 brings some new texturing features like
- multi-sample texture (anti-aliasing/AA quality improvement)
- stencil textures, to read the stencil buffer as a texture
- texture gather, to read a 2×2 matrix of texels in one instruction.
The additional texture features are nice incremental progress, but it will take time for developers to adapt and fully take advantage of them. It’s great to have the option, however.
Great Progress. Still behind DX11.2
Despite the advances, OpenGL ES 3.1 is still a bit behind DirectX 11.2. Just to cite a couple of features that are obviously missing, polygon Tessellation and Transparency Anti-Aliasing aren’t yet supported (among other things) and they can have a huge impact on image quality.
This is even more interesting when we know that today’s mobile hardware will transit to DX11.2-level feature set. Already NVIDIA’s Tegra K1 processor and Qualcomm’s Adreno 400 in the Snapdragon 805 do support the full DX11.2 feature set. As for ARM (Mali GPU) and Imagination (PowerVR GPU), they will announce products with OpenGL ES 3.1 compatibility for sure, but I don’t know how if they will be DX11.2 compliant.
Since the ARM for Windows market is currently marginal, I don’t think that this is an immediate issue for mobile GPU vendors who can’t offer DX11.2 compliance, but the level of competition in the mobile GPU space as just reached a new level.
At the moment, NVIDIA is the only company that has a full OpenGL compatibility with the PC/Mac since they support the full-blown OpenGL 4.4 feature set. However, the rest of the industry doesn’t seem particularly worried by that since NVIDIA’s share of the market is small at the moment.