The Raspberry Pi 4, with its powerful new Broadcom VideoCore-VI graphics processor, is set to get its first support for OpenGL ES 3.1 Compute and Geometry Shaders in its open source graphics driver — thanks to the work of outgoing developer Eric Anholt and incoming maintainer Igalia.
The VideoCore-VI GPU in the Raspberry Pi 4's Broadcom BCM2711 system-on-chip is the first new graphics processor core the low-cost family of single-board computers has ever enjoyed: all previous models had featured the VideoCore-IV GPU, powerful enough when it launched but lagging somewhat behind the state of the art today. New hardware, however, only works when there's software support, and the departure of open graphics driver developer Eric Anholt from the project to develop and maintain said open graphics drivers left Raspberry Pi fans concerned that development could stall.
When Anholt left, however, he was quickly replaced: the open source drivers are now maintained by Iago Toral, Alejandro Piñeiro, and José Casanova of open source consultancy Igalia. While their work takes place entirely publicly - code commits are made on the upstream Mesa project — Toral recently penned an update for the Raspberry Pi Blog detailing the status of the project.
The biggest news: the team is working on a fully-compliant OpenGL ES 3.1 implementation, which will bring the Raspberry Pi 4's first support for Compute Shaders — allowing the VideoCore-VI to execute programs which are not limited to operating on mesh or texture data and which share the same memory space as other OpenGL ES programs. "Credit for this goes to Eric Anholt, who did all the implementation work before leaving – he just never got to the point where it was ready to be merged, so we have picked up Eric’s original work, rebased it, and worked on bug fixes to have a fully conformant implementation," Toral writes. "We are currently hard at work squashing the last few bugs exposed by the Khronos Conformance Test Suite and we hope to be ready to merge this functionality in the next major Mesa release, so look forward to it!"
Once Compute Shader support is in place, the team has another target - currently described by Toral as being "in early stages of development": Geometry Shaders, which Toral explains "will bring the V3D driver one step closer to exposing a full programmable 3D pipeline."
The post comes with a potentially unwelcome clarification as to the project's focus, however. "The VideoCore-VI GPU can do OpenGL ES 3.2, but it can’t do OpenGL 3.0," Toral explains, "so future feature work will focus on OpenGL ES" - the embedded-centric variant of the OpenGL API. The issue: The VideoCore-IV supports up to four render targets, the minimum required for OpenGL ES - but below the eight needed for OpenGL 3.0 support.
Toral also details a few improvements already available in the released driver: shader compiler optimisations which have improved the performance of several different shader workloads, bug fixes and optimisations in the transform feedback process, and the implementation of OpenGL Logic Operations — "an OpenGL 2.0 feature that was somehow missing in the V3D driver," Toral explains.
The full post is now available on the Raspberry Pi blog.