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 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.