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.
