Posted by Nicolas Capens, Software Engineer and Pixel
Pirate
SwiftShader is a software library for high-performance graphics rendering on the
CPU. Google already uses this library in multiple products, including Chrome, Android
development tools, and cloud services. Starting today, SwiftShader is fully open source,
expanding its pool of potential applications.
Since 2009, Chrome has used SwiftShader to enable 3D rendering on systems that
can’t fully support hardware-accelerated rendering. While 3D content like WebGL is written for a GPU, some users’
devices don’t have graphics hardware capable of executing this content. Others may have
drivers with serious bugs which can make 3D rendering unreliable, or even impossible. Chrome
uses SwiftShader on these systems in order to ensure 3D web content is available to all
users.
Chrome running without SwiftShader on a machine with an inadequate GPU (left)
cannot run the WebGL Globe experiment. The same machine with SwiftShader enabled (right) is
able to fully render the content.
SwiftShader implements the same OpenGL ES graphics API used by Chrome and Android. Making SwiftShader open
source will enable other browser vendors to support 3D content universally and move the web
platform forward as a whole. In particular, unconditional WebGL support allows web developers
to create more engaging content, such as casual games, educational apps, collaborative content
creation software, product showcases, virtual tours, and more. SwiftShader also has applications in the cloud,
enabling rendering on GPU-less systems.
To provide users with the best performance, SwiftShader uses several techniques
to efficiently perform graphics calculations on the CPU. Dynamic code generation enables
tailoring the code towards
the tasks at hand at run-time, as opposed to the more common compile-time optimization. This
complex approach is simplified through the use of Reactor, a custom C++
embedded language with an intuitive imperative syntax. SwiftShader also uses vector operations
in SIMT fashion, together
with multi-threading technology, to increase parallelism across the CPU’s available cores and
vector units. This enables real-time rendering for uses such as app
streamingonAndroid.
Developers can access the SwiftShader source code from its git repository. Sign up for the
mailing list to stay up to
date on the latest developments and collaborate with other SwiftShader developers from the
open-source community.