1Name 2 3 QCOM_writeonly_rendering 4 5Name Strings 6 7 GL_QCOM_writeonly_rendering 8 9Contributors 10 11 Benj Lipchak (Original Author) 12 Maurice Ribble 13 14Contact 15 16 Maurice Ribble (mribble 'at' qualcomm.com) 17 18Notice 19 20 Copyright Qualcomm 2009. 21 22IP Status 23 24 Qualcomm Proprietary. 25 26Status 27 28 Complete. 29 30Version 31 32 Last Modified Date: July 7, 2009 33 Revision: #2 34 35Number 36 37 OpenGL ES Extension #61 38 39Dependencies 40 41 OpenGL ES 1.0 is required. 42 43 This extension is written against the OpenGL ES 2.0 specification. 44 45Overview 46 47This extension defines a specialized "write-only" rendering mode that 48may offer a performance boost for simple 2D rendering. 49 50Some applications render large frame buffers with simple geometry, very 51little overdraw, and no need for the following per-fragment stages: 52depth/stencil testing, Multisampling, blending, and Logic Operations. 53Applications rendering a windowed desktop or other 2D GUI might fit 54into this profile. 55 56Applications that match this profile can enable ``write-only'' rendering 57mode. Performance may be improved in this mode through single-pass 58rendering directly to system memory as compared with multipass tile-based 59rendering into on-chip memory. However, since the write-path to system memory 60is generally lower bandwidth, any gains are most likely for 2D applications 61rendering to large frame buffers with little overdraw. 62 63On some HW, the GPU is not able to simultaneously read and write to system 64memory framebuffers, so enabling this mode also implicitly disables any per- 65fragment operations that may read from the frame buffer. In addition, this 66mode implicitly disables any reads and writes from the depth buffer. 67 68To enable write-only rendering, an OpenGL application will call 69glEnable(GL_WRITEONLY_RENDERING_QCOM). When write-only rendering is enabled, 70the following per-fragment stages are disabled regardless of the associated 71GL enables: multisample, depth_test, stencil_test, blending, and color_logic_Op. 72In addition, write-only rendering will implicitly disable all depth writes 73regardless of the value set via glDepthMask(). The alpha_test and scissor_test 74stages function as normal. 75 76To disable fast-rendering, call glDisable(GL_ WRITEONLY_RENDERING_QCOM). Any 77stages previously disabled by write-only rendering will return to their current 78GL state. 79 80IP Status 81 82 There is no intellectual property associated with this extension. 83 84Issues 85 86(1) How can alpha-blending be implemented with write-only rendering? 87 88RESOLVED: For ES2.0 applications that want to use write-only rendering combined 89with alpha-blending, this must be done in the GLSL fragment shader, by binding the 90RT as a texture. Application will handle all coherency issues using glFinish(). 91 92(2) Can write-only logicOps be supported? 93 94RESOLVED: It is possible we could allow some LogicOps (those that don't need to 95read from the destination). For simplicity, the extension doesn't allow any LogicOps 96with write-only rendering. 97 98(3) Can Multisample be supported? 99 100RESOLVED: Write-only rendering with multisampling enabled may not work on 101all HW. For now, MSAA is not allowed with WRITEONLY_RENDERING. 102 103(4) Can the depth or stencil buffer be cleared while write-only rendering is 104enabled? 105 106RESOLVED: No, while write-only rendering is enabled, all reads and writes to the 107depth/stencil buffer implicitly disabled. Clears of the depth buffer are ignored. 108For example, calling glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | 109GL_STENCIL_BUFFER_BIT) would only clear the color buffer. 110 111 112New Procedures and Functions 113 114 115New Tokens 116 117 Accepted by the <cap> parameter of Enable, Disable, and by the 118 119 WRITEONLY_RENDERING_QCOM 0x8823 120 121 122 None. 123 124 125Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment 126Operations and the Frame Buffer) 127 128 TBD 129 130Additions to Chapter 5 of the OpenGL 1.4 Specification (Special 131Errors 132 133 None. 134 135New State 136 137 138Get Value Type Command Value 139--------- ---- ------- ------- 140WRITEONLY_RENDERING_QCOM bool IsEnabled 141 142 143Revision History 144#03 09/30/2009 Maurice Ribble Fixed some AMD stuff I missed. 145#02 07/07/2009 Maurice Ribble Update due to the AMD->Qualcomm move. 146#01 ?? Benj Lipchak Initial version. 147