The Khronos Group made a formal announcement at GDC 2014 on the OpenGL-ES 3.1 API specification. It turns out that with the 3.0 spec released late 2014 we’ve been waiting for the hardware to catch up to the API. As hardware started to become available it became apparent that the hardware was much more capable than just what was required for 3.0, but was in fact anticipating some of the OpenGL 4.x feature set. Thus just over a year after the 3.0 API spec was released we’re not only seeing the 3.1 spec released but we actually have actual hardware announcements. OpenGL 3.1 is a superset of 3.0 and is fully compatible with 3.0 and 2.0 programs. The major improvements are;
Compute Shaders: Compute shaders are the big addition to 3.1. They bring the ability to use OpenGL applications for general purpose GPU computing. Where you might normally need to use the CPU to do calculations, you can now take advantage of the massive parallel capabilities of a GPU to offload them onto a faster and more efficient computational engine. Things like physics calculations, AI, post processing effects, ambient occlusion, photographic filtering effects, etc. This alone brings the power of the desktop graphics API to mobile space.
Shader Objects: It’s now possible to mix and match vertex and pixel shaders and also to have pre-compiled shaders – albeit you’ll still need to compile the shaders the first time and store the resulting binaries. This will make it possible to make program loading much much faster by eliminating the compilation and linking steps for the shaders.
An Updated Shader Language: As with the 3.0 spec, the 3.1 spec continues to add some features previously found only on desktop OpenGL and makes it much easier to support more efficient and advanced shader usage.
Indirect Draw Commands: The ability to submit draw commands from objects in GPU memory rather than have the CPU kick off drawing helps make the pipeline more efficient. Combine this with compute shaders and you can have the GPU computing, updating, and rendering part of the scene itself without any intervention by the CPU.
Enhanced Texture Functionality: Some features from desktop have made it over as well, including mutisampling, stencil textures, texture gather.
There has also been much support for providing a set of conformance tests as well and a standardized shader compiler so that individual vendor’s drivers can now be tested against the ”standard” compiler for conformance. This should help for those situations where some vendors have implemented (or read) the spec differently.
So what’s left out? Tessellation and Geometry shaders are really the two biggest features. Those vendors that are moving their desktop hardware to mobile (Nvidia and Intel) will probably be shipping drivers with extensions for their hardware. Intel is showing off their “PixelSync” extension (which was in their DX drivers) which allows order-independent transparency effects among others.