Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / gpu / GLES2 / extensions / CHROMIUM / CHROMIUM_sync_point.txt
blob9f1863cc0052467d5ac845a07ef50048bbfad68e
1 Name
3     CHROMIUM_sync_point
5 Name Strings
7     GL_CHROMIUM_sync_point
9 Version
11     Last Modifed Date: September 8, 2015
13 Dependencies
15     OpenGL ES 2.0 is required.
17 Overview
19     This extension allows a client to order operations between contexts.
21     This extension introduces the concept of "fence syncs" and "sync token".
22     Inserted fence syncs represents a position in the command stream of a
23     context. Sync tokens are generated from fence syncs and allows another
24     context to issue a "wait" command on the sync token. This wait command
25     will then guarantee that commands before the inserted fence sync are
26     submitted before commands after the sync token wait.
28     This extension implements a small subset of ARB_sync, with weaker
29     guarantees. In particular it doesn't ensure commands are actually executed
30     by the server, it only guarantees submission order.
32     It does however guarantee operation order with respect to
33     ConsumeTextureCHROMIUM and ProduceTextureCHROMIUM from
34     CHROMIUM_texture_mailbox, if present.
36 Issues
38     None
40 New Procedures and Functions
42     The command
44         uint InsertFenceSyncCHROMIUM()
46     inserts a fence sync in the current command stream. The fence sync is
47     signaled when previous commands have been submitted to the server, or when
48     the context is destroyed, whichever happens first. The fence sync name is
49     only visible for the current context. The returned fence sync name cannot
50     be waited upon directly, but once the command is flushed to the server it
51     can be converted to a sync token using GenSyncTokenCHROMIUM which is
52     waitable.
54     The command
56         void GenSyncTokenCHROMIUM(uint fence_sync, GLbyte *sync_token)
58     converts <fence_sync> which is only visible to the current context to a
59     sync token which may be waited upon by any contexts on the same server.
60     The <fence_sync> command must be flushed before this function may be
61     called, otherwise an INVALID_OPERATION error is generated. The generated
62     <sync_token> must be generated on the same context as when
63     InsertSyncPointCHROMIUM was called. The <sync_token> can be passed and
64     used by any context on the same server, including other context groups.
66     <sync_token> returns a GL_SYNC_POINT_SIZE_CHROMIUM byte sized name.
68     The command
70         void WaitSyncTokenCHROMIUM(GLbyte *sync_token)
72     causes the current context to stop submitting commands until the specified
73     fence sync becomes signaled. This is implemented as a server-side wait.
74     <sync_token> is a sync token generated by GenSyncPointCHROMIUM. If
75     <sync_token> isn't a valid sync token returned by GenSyncPointCHROMIUM, the
76     command is equivalent to a no-op and no error is generated.
78 New Tokens
80     The size of a sync token name in bytes.
82         GL_SYNC_TOKEN_SIZE_CHROMIUM                        12
84 Errors
86     INVALID_VALUE is generated if the <fence_sync> parameter of
87     GenSyncPointCHROMIUM is not a valid local fence sync name.
89     INVALID_OPERATION is generated if the <fence_sync> parameter of
90     GenSyncPointCHROMIUM has not been flushed to the server.
92 New State
94     None.
96 Revision History
98     2/25/2013    Documented the extension
100     9/8/2015     Modified functions to InsertFenceSyncCHROMIUM,
101     GenSyncTokenCHROMIUM, and WaitSyncTokenCHROMIUM.