blob: 0e2d2cdad77ca53b4c249e720dc54036386e57d3 [file] [log] [blame]
Name
CHROMIUM_sync_point
Name Strings
GL_CHROMIUM_sync_point
Version
Last Modifed Date: November 20, 2015
Dependencies
OpenGL ES 2.0 is required.
Overview
This extension allows a client to order operations between contexts.
This extension introduces the concept of a "sync token" that can be passed
to other clients to issue a "wait" command for synchronization. Generating a
sync token inserts a fence into the command stream. This wait command will
then guarantee that commands before the inserted fence are submitted before
commands after the sync token wait.
Combined with mailboxes from CHROMIUM_texture_mailbox, which are exported
using CreateAndConsumeTextureCHROMIUM and imported using
ProduceTextureDirectCHROMIUM commands, this allows clients across processes
to synchronize resources.
Issues
None
New Procedures and Functions
The command
void GenSyncTokenCHROMIUM(GLbyte *sync_token)
inserts a fence into the current context's command stream and returns a
<sync_token>. The <sync_token> can be passed and used by any context on the
same server, including other context groups. The fence also implies an
ordering barrier between contexts in the current scheduling group (stream).
An INVALID_OPERATION error is generated if <sync_token> is NULL.
<sync_token> returns a GL_SYNC_TOKEN_SIZE_CHROMIUM byte sized name.
The command
void GenUnverifiedSyncTokenCHROMIUM(GLbyte *sync_token)
inserts a fence into the current context's command stream and returns a
<sync_token>. The <sync_token> can be passed and used by any context on the
same client (process), including other context groups. The fence also
implies an ordering barrier between contexts in the current scheduling group
(stream). However, to pass the <sync_token> to a context in another client
(process), the <sync_token> must be verified using VerifySyncTokensCHROMIUM.
An INVALID_OPERATION error is generated if <sync_token> is NULL.
The command
void VerifySyncTokensCHROMIUM(GLbyte **sync_tokens, GLsizei count)
verifies array <sync_tokens> of length <count> and ensures that these sync
tokens have all been verified. The generated sync token did not have to be
generated from the same context but it must belong to the same client
(process). If a sync token was generated by GenUnverifiedSyncTokenCHROMIUM
and but isn't from the same client (process), an INVALID_OPERATION error is
generated. Sync tokens which have already been verified are ignored, if all
sync tokens were already verified then nothing will be done.
The command
void WaitSyncTokenCHROMIUM(const GLbyte *sync_token)
causes the current context to stop submitting commands until the specified
fence sync becomes signaled. This is implemented as a server-side wait.
<sync_token> must be a sync token generated by GenSyncTokenCHROMIUM, or
generated by GenUnverifiedSyncTokenCHROMIUM and from the same client
(process). If <sync_token> isn't a valid sync token returned by
GenSyncTokenCHROMIUM or GenUnverifiedSyncTokenCHROMIUM, the result is
undefined.
New Tokens
The size of a sync token name in bytes.
GL_SYNC_TOKEN_SIZE_CHROMIUM 24
Errors
INVALID_VALUE is generated if the <sync_token> parameter of
GenSyncTokenCHROMIUM or GenUnverifiedSyncTokenCHROMIUM is NULL.
INVALID_OPERATION is generated if the <sync_token> parameter of
WaitSyncTokenCHROMIUM or VerifySyncTokensCHROMIUM was generated using
GenUnverifiedSyncTokenCHROMIUM but is not from the same client (process).
New State
None.
Revision History
2/25/2013 Documented the extension
9/8/2015 Modified functions InsertFenceSyncCHROMIUM,
GenSyncTokenCHROMIUM, and WaitSyncTokenCHROMIUM.
10/12/2015 Added function GenUnverifiedSyncTokenCHROMIUM.
11/24/2015 Clarified that GenUnverifiedSyncTokenCHROMIUM only needs an
ordering barrier and added proper error values.
11/25/2015 Added function VerifySyncTokensCHROMIUM.
12/13/2017 Simplified functions GenSyncTokenCHROMIUM and
GenUnverifiedSyncTokenCHROMIUM to generate the fence
implicitly. Removed function InsertFenceSyncCHROMIUM.