Multisampling for OpenGL ES
For most multisampling, all of the data for the additional samples are kept in the tile memory, which is inside the GPU. This data is resolved to a single pixel color as part of the tile writeback. This is efficient because the bandwidth for the additional samples never enters the external main memory.
You must understand the following concepts:
- OpenGL ES APIs.
- The EXT_multisampled_render_to_texture extension - https://www.khronos.org/registry/gles/extensions/EXT/EXT_multisampled_render_to_texture.txt
Optimal multisampling performance
To get optimal render-to-texture multisampling performance, use the EXT_multisampled_render_to_texture extension. This extension can render multisampled data directly into a single-sampled image in memory, without needing a second pass.
How to optimize the use of MSAA
Try using the following optimization steps:
- Use 4x MSAA because it is not expensive and provides good image quality improvements.
- Use the EXT_multisampled_render_to_texture extension render-to-texture multisampling.
MSAA steps to avoid
Arm recommends that you:
- Do not use glBlitFramebuffer() to implement a multisample resolve.
- Do not use more than 4x MSAA without checking performance.
Negative impacts of implementing MSAA incorrectly
Failing to resolve multisampling inline results in higher memory bandwidth and reduced performance. For example, manually writing and resolving a 4xMSAA 1080p surface at 60 FPS requires 3.9GB/s of memory bandwidth. This is compared to 500MB/s when using the extension.
Debugging MSAA issues more effectively
Review any use of glBlitFramebuffer().