Pixel Local Storage Extension#

Graphics techniques such as deferred lighting are often implemented by attaching multiple colour render targets to a frame buffer object, rendering the required intermediate data, and then sampling from this data as textures. While flexible, this approach even when implemented optimally (see Using Multiple Render Targets Efficiently) still consumes a large amount of system memory bandwidth, which comes at a premium on mobile devices.

OpenGL ES 3.x provides the extension shader_pixel_local_storage(2) enabling communication between fragment shader invocations which cover the same pixel location. This extension enables applications to store the intermediate per-pixel data on-chip; for example, the G-Buffer in a deferred lighting pass. This memory can be read from and written to by shader invocations at the same pixel location.

The extension enables tile-based renderers such as PowerVR graphics cores to efficiently make use of tile memory. These intermediate buffers are never allocated or written out to system memory, as they only exist in on-chip memory.

This extension is extremely beneficial for mobile and embedded systems and using it correctly will result in a significant reduction in memory bandwidth usage. Most techniques that write intermediate data out to system memory then sample from it at the same pixel location – such as deferred lighting – can be optimised using this extension.

For more information on this extension, please refer to the EXT_shader_pixel_local_storage2 Khronos page.