| Name |
| |
| CHROMIUM_nonblocking_readback |
| |
| Name Strings |
| |
| GL_CHROMIUM_nonblocking_readback |
| |
| Version |
| |
| Last Modifed Date: May 21, 2018 |
| |
| Dependencies |
| |
| OpenGL ES 3.0 is required. |
| |
| Overview |
| |
| This extension provides a query mechanism that allows for non-blocking |
| device-to-host readback of GL buffer object contents. |
| |
| In Chromium's multiprocess GL architecture, buffer readback |
| (MapBufferRange(MAP_READ_BIT)) may be accelerated by a shared-memory shadow |
| copy of a GL buffer object's memory. This shadow copy is allocated based on |
| the buffer allocation usage hint (*_READ). The contents of the shadow copy |
| are updated based on the usage of the |
| READBACK_SHADOW_COPIES_UPDATED_CHROMIUM query and |
| InvalidateReadbackBufferShadowDataCHROMIUM command. (The management of the |
| shadow copies is purely internal to the implementation, and not actually |
| exposed by this extension.) |
| |
| When a buffer is read back, if such a shadow copy is up-to-date with the |
| contents of the real buffer, then the MapBufferRange operation can return |
| that shadow copy. |
| |
| The READBACK_SHADOW_COPIES_UPDATED_CHROMIUM query provides: |
| (1) a signal from client to service (EndQuery) that any previously written |
| *_READ buffers might be read back later, and that their shadow copies should |
| be updated. |
| (2) a signal from service to client (QUERY_RESULT_AVAILABLE) that it will no |
| longer use any of the shadow copies it received from the command buffer |
| client prior to the point in the command stream when the query was issued, |
| and that any previously written *_READ buffers' shadow copies have been |
| updated to mirror the contents of the buffers (at a point in the command |
| stream no earlier than the query was issued). |
| (The QUERY_RESULT is undefined.) |
| |
| Except in the presence of transform feedback operations (see below), this |
| query, and the existence of shadow copies, affect only the performance of |
| the GL, and not its observable semantic behavior. The semantic behavior of |
| READBACK_SHADOW_COPIES_UPDATED_CHROMIUM is otherwise equivalent to that of |
| the COMMANDS_COMPLETED_CHROMIUM query from CHROMIUM_sync_query, except that |
| it is a distinct query target, and the QUERY_RESULT may return a different |
| value. |
| |
| When a buffer is written by any OpenGL ES 3.0 mechanism aside from transform |
| feedback - ReadPixels with a PIXEL_PACK_BUFFER bound, MapBufferRange with |
| MAP_WRITE_BIT, BufferData, BufferSubData, and CopyBufferSubData - the |
| buffer's shadow copy will be automatically invalidated. |
| |
| If the buffer's shadow copy is invalidated by a transform feedback operation |
| writing to the buffer, the application must manually invalidate it via |
| InvalidateReadbackBufferShadowDataCHROMIUM. |
| |
| New Procedures and Functions |
| |
| The command |
| |
| void InvalidateReadbackBufferShadowDataCHROMIUM(GLuint buffer_id) |
| |
| manually invalidates the shadow copy associated with a given buffer, |
| preventing it from being returned for readbacks. |
| |
| This is necessary only when a buffer is written by transform feedback; all |
| other OpenGL ES 3.0 mechanisms which write to the buffer will automatically |
| invalidate the shadow copy. |
| |
| Errors |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <target> parameter of BeginQuery, EndQuery, and GetQueryiv: |
| |
| READBACK_SHADOW_COPIES_UPDATED_CHROMIUM 0x84F8 |
| |
| New State |
| |
| None. |
| |
| Revision History |
| |
| 5/21/2018 Documented the extension |