I guess it's back to the tech chatter with this post... :D Looking forward to getting back home and deep back into the TyphonRT video engine launch efforts. However... We'll start with a grumpy face rant... :(
This post is about the modern GL demos repos I put up at the beginning of the year. The goal is to provide a minimal utility framework to make working with modern GL w/ Java & Android easier and provide some basic GLES 3.1 examples to test various GPU manufacturers ability to ship working drivers:https://github.com/typhonrt/modern-java6-android-gldemos
Well, it seems like the Nexus 6 finally got a GPU driver update from Qualcomm that sort of brings OpenGL ES 3.1 to the Adreno 420. The date seemingly of the GPU driver build is 1.29.15, so fairly recent and was part of the Android 5.1 firmware delivered to the Nexus 6 in the past couple of weeks.
One can now create an OpenGL ES 3.1 context on the Nexus 6 so the compute shader examples are now selectable, but the compute shaders fail to run because the Qualcomm driver does not completely support all of the required format layout qualifiers. These qualifiers can be found on the bottom right of page 5 of the 3.1 reference card. https://www.khronos.org/files/opengles31-quick-reference-card.pdf
The GLES 3.1 spec lists 5 floating point layout formats (rgba32f, rgba16f, r32f, rgba8, rgba8_snorm) available and these can be used with images in compute shaders. Sadly with the current Qualcomm driver only "r32f" is supported which doesn't help all too much because "rgba8" is the standard image format used for reading or writing to images with compute shaders and is what is used in all of the gldemos compute shader examples. When compiling the compute shaders used in the gldemos repo they fail to build on the Nexus 6 / Adreno 420 with this error:
ERROR: 0:29: '' : unsupported format on read/write image
ERROR: 0:30: '' : unsupported format on read/write image
ERROR: 2 compilation errors. No code generated.
Notice the "unsupported format" which doesn't mean it's not supported by the GLES 3.1 specification, but that the Qualcomm driver is incomplete.
Nvidia has had stellar support for OpenGL ES 3.1 from the launch of the Tegra K1 last summer. I verified that the Tegra K1 works with all of the layout formats specified in the GLES 3.1 specification. I'll be buying more new devices soon to keep the testing going with various mobile SoCs / GPU combos.
Qualcomm please fix your driver for proper GLES 3.1 / compute shader support! It has been months and months now w/ buggy driver releases and still non-functioning compute shader support. You can do it!
As things go it sucks having a major mobile GPU manufacturer putting out broken things because it really is going to impact the adoption of GLES 3.1 / compute shaders. Curious if this also played into Samsung's move with their own SoC / Mali GPU.
And to be fair I really trumpeted Qualcomm as having the superior mobile GPU for the past generation re: Adreno 3xx. Times have changed!