| Name |
| |
| NV_cuda_event |
| |
| Name Strings |
| |
| EGL_NV_cuda_event |
| |
| Contributors |
| |
| Debalina Bhattacharjee |
| Michael Chock |
| James Jones |
| |
| Contact |
| |
| Michael Chock (mchock 'at' nvidia.com) |
| |
| Status |
| |
| Complete |
| |
| Version |
| |
| Version 1, June 20, 2014 |
| |
| Number |
| |
| EGL Extension #75 |
| |
| Extension Type |
| |
| EGL display extension |
| |
| Dependencies |
| |
| This extension is written against the language of EGL 1.5. |
| |
| Either EGL_KHR_fence_sync and the EGLAttrib type or EGL 1.5 are |
| required. |
| |
| This extension interacts with EGL_NV_device_cuda. |
| |
| Overview |
| |
| This extension allows creating an EGL sync object linked to a CUDA |
| event object, potentially improving efficiency of sharing images and |
| compute results between the two APIs. |
| |
| IP Status |
| |
| No known claims. |
| |
| New Types |
| |
| A pointer to type cudaEvent_t, defined in the CUDA header files, may |
| be included in the attribute list passed to eglCreateSync. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted as attribute names in the <attrib_list> argument |
| of eglCreateSync: |
| |
| EGL_CUDA_EVENT_HANDLE_NV 0x323B |
| |
| Returned in <values> for eglGetSyncAttrib <attribute> |
| EGL_SYNC_TYPE: |
| |
| EGL_SYNC_CUDA_EVENT_NV 0x323C |
| |
| Returned in <values> for eglGetSyncAttrib <attribute> |
| EGL_SYNC_CONDITION: |
| |
| EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D |
| |
| Changes to Chapter 3 of the EGL 1.5 Specification (EGL Functions and |
| Errors) |
| |
| In section 3.8.1 (Sync Objects) Replace the sixth paragraph: |
| |
| "A <OpenCL event sync object> reflects the status of a corresponding |
| OpenCL object to which the sync object is linked. Likewise, a <CUDA |
| event sync object> reflects the status of a corresponding CUDA |
| object. These provide another method of sharing images or compute |
| results between EGL and the CUDA and OpenCL client APIs (see |
| Chapter 9 of the OpenCL Specification and the cl_khr_egl_image |
| extension for a second method of synchronization with OpenCL). |
| Waiting on either type of sync object is equivalent to waiting for |
| completion of the corresponding linked CUDA or OpenCL event object." |
| |
| Add a new section following section 3.8.1.2 (Creating OpenCL Event |
| Sync Objects): |
| |
| "Section 3.8.1.X Creating CUDA Event Sync Objects |
| |
| If <type> is EGL_SYNC_CUDA_EVENT_NV, a CUDA event sync object is |
| created. In this case <attrib_list> must contain the attribute |
| EGL_CUDA_EVENT_HANDLE_NV, set to a pointer to a cudaEvent_t object. |
| The object must be properly initialized and recorded by the CUDA API |
| (using cudaCreateEvent and cudaEventRecord), and the CUDA device |
| used to create the event must correspond to <dpy>[fn1]. Note that |
| EGL_CUDA_EVENT_HANDLE_NV is not a queryable property of a sync |
| object. |
| |
| [fn1] If EGL_NV_device_cuda is supported, it is sufficient that the |
| CUDA device used to create the CUDA event matches the |
| EGL_CUDA_DEVICE_NV attribute of <dpy>'s underlying EGL |
| device. |
| |
| Attributes of the CUDA event sync object are set as follows: |
| |
| Attribute Name Initial Attribute Value(s) |
| ------------- -------------------------- |
| EGL_SYNC_TYPE EGL_SYNC_CUDA_EVENT_NV |
| EGL_SYNC_STATUS Depends on status of <event> |
| EGL_SYNC_CONDITION EGL_SYNC_CUDA_EVENT_COMPLETE_NV |
| |
| The status of such a sync object depends on the state of <event> at |
| the time eglCreateSync was called. If all device work preceding the |
| most recent call to cudaEventRecord on the event has not yet |
| completed, the status of the linked sync object will be |
| EGL_UNSIGNALED. If all such work has completed, the status of the |
| linked sync object will be EGL_SIGNALED. Calling cudaEventRecord has |
| no effect on a previously created sync object. |
| |
| The only condition supported for CUDA event sync objects is |
| EGL_SYNC_CUDA_EVENT_COMPLETE_NV. It is satisfied when all device |
| work prior to the most recent call to cudaEventRecord at sync |
| creation time has completed." |
| |
| Add to the list of errors following 3.8.1.X: |
| |
| "If <type> is EGL_SYNC_CUDA_EVENT_NV and EGL_CUDA_EVENT_HANDLE_NV is |
| not specified in <attrib_list>, then an EGL_BAD_ATTRIBUTE error is |
| generated. If its attribute value is not a valid CUDA event pointer |
| or has not been initialized as described above, then |
| EGL_BAD_ATTRIBUTE may be generated, but the results are undefined |
| and may include program termination." |
| |
| Modify the third paragraph of section 3.8.1.4 (Querying Sync Object |
| Attributes): |
| |
| "If any eglClientWaitSync or eglWaitSync commands are blocking on |
| <sync> when eglDestroySync is called, <sync> is flagged for deletion |
| and will be deleted when the associated fence command, OpenCL event |
| object, or CUDA event object has completed, and <sync> is no longer |
| blocking any such egl*WaitSync command. Otherwise, the sync object |
| is destroyed immediately. |
| |
| Replace the EGL_SYNC_CONDITION row of table 3.9 with: |
| |
| "Attribute Description Supported Sync Objects |
| ----------------- ----------------------- ---------------------- |
| EGL_SYNC_CONDITION Signaling condition EGL_SYNC_FENCE, |
| EGL_SYNC_CL_EVENT, or |
| EGL_SYNC_CUDA_EVENT_NV |
| |
| Table 3.9 Attributes Accepted by eglGetSyncAttrib" |
| |
| |
| Interactions with EGL versions prior to 1.5 |
| |
| This extension may be used with earlier versions of EGL, provided |
| that the EGL_KHR_fence_sync extension is supported. In this case, |
| replace all references to sync functions and tokens with |
| corresponding KHR-suffixed versions (e.g., replace eglCreateSync |
| with eglCreateSyncKHR). |
| |
| Additionally, this extension may be used with the 64-bit types and |
| functions added to EGL_KHR_fence_sync introduced by |
| EGL_KHR_cl_event2 (EGLAttribKHR and eglCreateSync64KHR). Support |
| for OpenCL events is not required. |
| |
| Issues |
| |
| None |
| |
| Revision History |
| |
| Version 1, 2014/06/20 (Michael Chock) |
| - initial version. |