QCOM_writeonly_rendering

Name

QCOM_writeonly_rendering

Name Strings

GL_QCOM_writeonly_rendering

Contributors

Benj Lipchak (Original Author)
Maurice Ribble

Contact

Maurice Ribble (mribble 'at' qualcomm.com)

Notice

Copyright Qualcomm 2009.

IP Status

Qualcomm Proprietary.

Status

Complete.

Version

Last Modified Date: July 7, 2009
Revision: #2

Number

OpenGL ES Extension #61

Dependencies

OpenGL ES 1.0 is required.

This extension is written against the OpenGL ES 2.0 specification.

Overview

This extension defines a specialized "write-only" rendering mode that may offer a performance boost for simple 2D rendering.

Some applications render large frame buffers with simple geometry, very little overdraw, and no need for the following per-fragment stages: depth/stencil testing, Multisampling, blending, and Logic Operations. Applications rendering a windowed desktop or other 2D GUI might fit into this profile.

Applications that match this profile can enable ``write-only'' rendering mode. Performance may be improved in this mode through single-pass rendering directly to system memory as compared with multipass tile-based rendering into on-chip memory. However, since the write-path to system memory is generally lower bandwidth, any gains are most likely for 2D applications rendering to large frame buffers with little overdraw.

On some HW, the GPU is not able to simultaneously read and write to system memory framebuffers, so enabling this mode also implicitly disables any per- fragment operations that may read from the frame buffer. In addition, this mode implicitly disables any reads and writes from the depth buffer.

To enable write-only rendering, an OpenGL application will call glEnable(GL_WRITEONLY_RENDERING_QCOM). When write-only rendering is enabled, the following per-fragment stages are disabled regardless of the associated GL enables: multisample, depth_test, stencil_test, blending, and color_logic_Op. In addition, write-only rendering will implicitly disable all depth writes regardless of the value set via glDepthMask(). The alpha_test and scissor_test stages function as normal.

To disable fast-rendering, call glDisable(GL_ WRITEONLY_RENDERING_QCOM). Any stages previously disabled by write-only rendering will return to their current GL state.

IP Status

There is no intellectual property associated with this extension.

Issues

(1) How can alpha-blending be implemented with write-only rendering?

RESOLVED: For ES2.0 applications that want to use write-only rendering combined with alpha-blending, this must be done in the GLSL fragment shader, by binding the RT as a texture. Application will handle all coherency issues using glFinish().

(2) Can write-only logicOps be supported?

RESOLVED: It is possible we could allow some LogicOps (those that don't need to read from the destination). For simplicity, the extension doesn't allow any LogicOps with write-only rendering.

(3) Can Multisample be supported?

RESOLVED: Write-only rendering with multisampling enabled may not work on all HW. For now, MSAA is not allowed with WRITEONLY_RENDERING.

(4) Can the depth or stencil buffer be cleared while write-only rendering is enabled?

RESOLVED: No, while write-only rendering is enabled, all reads and writes to the depth/stencil buffer implicitly disabled. Clears of the depth buffer are ignored. For example, calling glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) would only clear the color buffer.

New Procedures and Functions

New Tokens

Accepted by the <cap> parameter of Enable, Disable, and by the

    WRITEONLY_RENDERING_QCOM                      0x8823


None.

Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment Operations and the Frame Buffer)

TBD

Additions to Chapter 5 of the OpenGL 1.4 Specification (Special Errors

None.

New State

Get Value Type Command Value ——— —- ——- ——- WRITEONLY_RENDERING_QCOM bool IsEnabled

Revision History #03 09/30/2009 Maurice Ribble Fixed some AMD stuff I missed. #02 07/07/2009 Maurice Ribble Update due to the AMD->Qualcomm move. #01 ?? Benj Lipchak Initial version.