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
|
||
|