Introduction to GPU Technologies
The following introduction covers, at a high level, the differences between the main modern GPU architectures used in both desktop GPUs
and mobile GPUs (IMRs and TBRs) and the graphics APIs used on both.
Immediate-Mode Renderers (IMRs)
IMR-style architectures are dominant in desktops, laptops and consoles.
The key characteristic of an IMR is that primitives are processed immediately through the graphics pipeline.
This means that each primitive travels through the entire GPU pipeline without any knowledge of the primitives
that came before or after it.
Tile-Based Renderers (TBRs)
TBR-style architectures are dominant in mobile and embedded devices.
The key characteristic of a TBR is that the scene is divided into fixed-sized, screen-space regions.
The pixel colours in the scene are calculated a tile at a time. Once a tile render is complete,
its attachments are written out to system memory.
The benefit of TBRs is that an on-chip, tile-sized cache can be used to store intermediate attachment data
during the rendering process. Caching this information on-chip avoids costly system memory bandwidth transfers.
However, the downside of TBRs is that the entire scene's geometry needs to be transformed and binned into
tiled regions before per-tile rasterization can begin. This increases the complexity of the GPUs
and increases memory requirements, as an intermediate buffer to store the transformed primitives
and binning information that the per-tile operations can read later in the GPU execution process.
For more information on the differences between Intermediate-Mode and Tile-Based Renderers, please read our article
on GPU Framebuffer Memory: Understanding Tiling
The OpenGL ES Graphics API
OpenGL ES is a cross-platform, royalty-free 3D graphics and compute API designed for embedded systems.
OpenGL ES 2.0 introduced programmable shader stages and is supported by all Galaxy devices.
The latest Galaxy devices support OpenGL ES 3.2, which is backwards-compatible with OpenGL ES 2.0.
If you are already using OpenGL ES and would like to know how to optimize your renderer for Galaxy devices,
please see our OpenGL ES Usage Recommendations.
The Vulkan Graphics API
Vulkan is a cross-platform, royalty-free explicit 3D graphics and compute API.
Unlike OpenGL and OpenGL ES, Vulkan API users are responsible for managing and synchronizing
all operations performed by their renderer. This gives Vulkan developers fine-grained control over
how their rendering tasks are prepared on CPU cores and submitted to the graphics driver,
enabling work to be submitted to the GPU very efficiently.
If you are already using Vulkan and would like to know how to optimize your renderer for Galaxy devices, please see our
Vulkan Usage Recommendation
Further reading
Resources
Arm
- Principles of High Performance
- Tile-Based Rendering
- Workload Pipelining
- Understanding Render Passes
- Accelerating 2D applications
- The benefits of buffer packing
- Understanding numerical precision
- Utgard shader core
- Midgard shader core
- Bifrost shader core
- Mali GPU Best Practices
- Arm Guide for Unity
- Arm Guide for Unreal Engine 4
- Mali Application Developer Best Practices
Qualcomm
Misc
- A trip through the Graphics Pipeline(2011) (Fabian Giesen)