159 lines
5.3 KiB
Plaintext
159 lines
5.3 KiB
Plaintext
|
|
Name
|
|||
|
|
|
|||
|
|
ANGLE_metal_shared_event_sync
|
|||
|
|
|
|||
|
|
Name Strings
|
|||
|
|
|
|||
|
|
EGL_ANGLE_metal_shared_event_sync
|
|||
|
|
|
|||
|
|
Contributors
|
|||
|
|
|
|||
|
|
Dan Glastonbury, Apple
|
|||
|
|
|
|||
|
|
Contacts
|
|||
|
|
|
|||
|
|
Dan Glastonbury, Apple (djg 'at' apple.com)
|
|||
|
|
|
|||
|
|
Status
|
|||
|
|
|
|||
|
|
Draft
|
|||
|
|
|
|||
|
|
Version
|
|||
|
|
|
|||
|
|
Version 2, 2022-09-08
|
|||
|
|
|
|||
|
|
Number
|
|||
|
|
|
|||
|
|
EGL Extensions XXX
|
|||
|
|
|
|||
|
|
Extension Type
|
|||
|
|
|
|||
|
|
EGL display extension
|
|||
|
|
|
|||
|
|
Dependencies
|
|||
|
|
|
|||
|
|
This extension is written against the wording of the EGL 1.5
|
|||
|
|
Specification.
|
|||
|
|
|
|||
|
|
Overview
|
|||
|
|
|
|||
|
|
This extension enables the creation of EGL fence sync objects that are
|
|||
|
|
associated with a native Metal event object. The EGL fence sync objects
|
|||
|
|
have nearly identical semantics to those sync objects defined by the
|
|||
|
|
EGL 1.5 Specification, except that they have an additional attribute
|
|||
|
|
storing the id<MTLSharedEvent> referring to the metal event object and
|
|||
|
|
the integer value to signal the event with.
|
|||
|
|
|
|||
|
|
New Types
|
|||
|
|
|
|||
|
|
None.
|
|||
|
|
|
|||
|
|
New Procedures and Functions
|
|||
|
|
|
|||
|
|
void* eglCopyMetalSharedEventANGLE(
|
|||
|
|
EGLDisplay dpy,
|
|||
|
|
EGLSync sync);
|
|||
|
|
|
|||
|
|
New Tokens
|
|||
|
|
|
|||
|
|
Accepted by the <type> parameter of eglCreateSync, and returned
|
|||
|
|
in <value> when eglGetSyncAttrib is called with <attribute>
|
|||
|
|
EGL_SYNC_TYPE:
|
|||
|
|
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_ANGLE 0x34D8
|
|||
|
|
|
|||
|
|
Accepted by the <attrib_list> parameter of eglCreateSync:
|
|||
|
|
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE 0x34D9
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNAL_VALUE_LO_ANGLE 0x34DA
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNAL_VALUE_HI_ANGLE 0x34DB
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNALED_ANGLE 0x34DC
|
|||
|
|
|
|||
|
|
Additions to the EGL Specification
|
|||
|
|
|
|||
|
|
Add the following after the first paragraph of Section 3.8.1.1 (Creating
|
|||
|
|
Fence Sync Objects),
|
|||
|
|
|
|||
|
|
"If <type> is EGL_SYNC_METAL_SHARED_EVENT_ANGLE, an EGL metal event sync
|
|||
|
|
object is created. In this case the
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE,
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNAL_VALUE_LO_ANGLE,
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNAL_VALUE_HI_ANGLE, and
|
|||
|
|
EGL_SYNC_CONDITION may be specified.
|
|||
|
|
|
|||
|
|
If EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE attribute is specified, it must
|
|||
|
|
be set to a pointer to a valid id<MTLSharedEvent>, or to a NULL pointer. If
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE is not specified, or is a NULL
|
|||
|
|
pointer, the EGL implementation will create a Metal event
|
|||
|
|
object. Additionally, the EGL implementation assumes ownership of the Metal
|
|||
|
|
event object and will follow Objective-C behavior and increase the Metal
|
|||
|
|
event object's retain count.
|
|||
|
|
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_SIGNAL_VALUE_LO_ANGLE and
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_HI_ANGLE are optional attributes specifying the
|
|||
|
|
low and high 32-bit parts of an unsigned 64-bit value to be set when the
|
|||
|
|
event is signaled. If these attributes are unspecified, the event is
|
|||
|
|
signaled with one more than the event's signaledValue property at the time
|
|||
|
|
of EGLSync creation. The signal value will wrap to 0 if the initial
|
|||
|
|
signaledValue is the maximum value for uint64_t.
|
|||
|
|
|
|||
|
|
If EGL_SYNC_CONDITION attribute is specified, it must be either
|
|||
|
|
EGL_SYNC_PRIOR_COMMANDS_COMPLETE or EGL_SYNC_METAL_SHARED_EVENT_SIGNALED_ANGLE.
|
|||
|
|
The EGL_SYNC_METAL_SHARED_EVENT_SIGNALED_ANGLE condition is satisfied by the
|
|||
|
|
signaling of the MTLSharedEvent referred to by the
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE attribute. When this happens any
|
|||
|
|
eglClientWaitSync commands blocking on <sync> unblock.
|
|||
|
|
|
|||
|
|
The default values for the EGL metal event sync object attributes are as
|
|||
|
|
follows:
|
|||
|
|
|
|||
|
|
Attribute Name Initial Attribute Value(s)
|
|||
|
|
-------------- --------------------------
|
|||
|
|
EGL_SYNC_TYPE EGL_SYNC_METAL_SHARED_EVENT_ANGLE
|
|||
|
|
EGL_SYNC_STATUS EGL_UNSIGNALED
|
|||
|
|
EGL_SYNC_CONDITION EGL_SYNC_PRIOR_COMMANDS_COMPLETE
|
|||
|
|
|
|||
|
|
Modify the list of eglCreateSync errors in Section 3.8.1.2 (Creating OpenCL
|
|||
|
|
Event Sync Objects)
|
|||
|
|
|
|||
|
|
"Errors
|
|||
|
|
------
|
|||
|
|
..."
|
|||
|
|
|
|||
|
|
Modify the second paragraph of Section 3.8.1.1 (Creating Fence Sync Objects),
|
|||
|
|
|
|||
|
|
When a fence sync object is created or when an EGL metal shared event sync
|
|||
|
|
object is created with the EGL_SYNC_CONDITION attribute set to
|
|||
|
|
EGL_SYNC_PRIOR_COMMANDS_COMPLETE, eglCreateSync also inserts a fence command
|
|||
|
|
into the command stream of the bound client API’s current context (i.e., the
|
|||
|
|
context returned by eglGetCurrentContext), and associates it with the newly
|
|||
|
|
created sync object.
|
|||
|
|
|
|||
|
|
Add the following after the last paragraph of Section 3.8.1 (Sync Objects):
|
|||
|
|
|
|||
|
|
"The command
|
|||
|
|
|
|||
|
|
void* eglCopyMetalSharedEventANGLE(
|
|||
|
|
EGLDisplay dpy,
|
|||
|
|
EGLSync sync);
|
|||
|
|
|
|||
|
|
increases the retain count of the id<MTLSharedEvent> stored in the
|
|||
|
|
EGL_SYNC_METAL_SHARED_EVENT_OBJECT_ANGLE attribute of an EGL metal shared
|
|||
|
|
event sync object and returns a pointer to the event as a void* pointer. If
|
|||
|
|
this returns a non-null value, the caller is responsible for releasing the
|
|||
|
|
MTLSharedEvent once after calling this function."
|
|||
|
|
|
|||
|
|
Issues
|
|||
|
|
|
|||
|
|
1. What should the name be? METAL_EVENT_ANGLE? MTL or METAL?
|
|||
|
|
|
|||
|
|
Revision History
|
|||
|
|
|
|||
|
|
Version 1, 2022-05-17
|
|||
|
|
- Initial draft
|
|||
|
|
Version 2, 2022-09-08
|
|||
|
|
- Add eglCopyMetalSharedEventANGLE function
|
|||
|
|
Version 3, 2023-03-06
|
|||
|
|
- Add EGL_SYNC_METAL_SHARED_EVENT_SIGNALED_ANGLE
|
|||
|
|
|