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.
