| Name |
| |
| NV_stream_flush |
| |
| Name Strings |
| |
| EGL_NV_stream_flush |
| |
| Contributors |
| |
| Santanu Thangaraj |
| Daniel Kartch |
| |
| Contacts |
| |
| Santanu Thangaraj, NVIDIA (sthangaraj 'at' nvidia.com) |
| |
| Status |
| |
| Draft |
| |
| Version |
| |
| Version 3 - April 11, 2018 |
| |
| Number |
| |
| 127 |
| |
| Extension Type |
| |
| EGL display extension |
| |
| Dependencies |
| |
| Requires the EGL_KHR_stream extension. |
| |
| Requires either the EGL_KHR_stream_cross_process_fd or |
| EGL_NV_stream_remote extensions. |
| |
| This extension is written based on the wording of version 27 of |
| the EGL_KHR_stream extension. |
| |
| Overview: |
| |
| The EGL_KHR_stream_cross_process_fd and EGL_NV_stream_remote |
| extensions do not guarantee that when the state of the EGLStream |
| object representing one endpoint of the stream changes, |
| the state of the other endpoint will immediately reflect |
| that change. Depending on the implementation, there may be some |
| latency in the propagation of state changes. |
| |
| This latency will not affect any applications which rely solely |
| on the stream itself for communication. State changes made on |
| one side will eventually be visible on the other side, |
| and can then be responded to. |
| |
| This only affects applications which use some additional means of |
| communication outside of the stream itself, which may encounter |
| race conditions. In particular, if an application inserts a frame |
| into a stream, then sends a message to the other side indicating |
| that the frame is ready, the other side may encounter an error if |
| it tries to acquire the frame and it is not yet available. |
| |
| One solution is to force all operations that change state of one |
| endpoint to behave synchronously, and not return until the change |
| is reflected on the other endpoint. However this adds undesirable |
| delays for the majority of applications and operations where such |
| synchronization is not required. This extension instead provides |
| a means for applications to explicitly invoke such |
| synchronization only where required. |
| |
| New types |
| |
| None |
| |
| New Procedures and functions |
| |
| EGLBoolean eglStreamFlushNV( |
| EGLDisplay dpy, |
| EGLStreamKHR stream); |
| |
| New Tokens |
| |
| None |
| |
| Add a new subsection "3.10.x EGLStream flush" at the end of section |
| "3.10 EGLStreams" in EGL_KHR_stream extension. |
| |
| The command |
| |
| EGLBoolean eglStreamFlushNV( |
| EGLDisplay dpy, |
| EGLStreamKHR stream); |
| |
| When called with either producer or consumer endpoint of the |
| stream, will block until any state changes made to this endpoint |
| prior to the call are visible on the EGLStream object of the other |
| endpoint. |
| |
| On success, EGL_TRUE will be returned. On failure, EGL_FALSE will |
| be returned and an error will be generated. |
| |
| - EGL_BAD_STREAM_KHR is generated if <stream> is not a valid |
| EGLStream. |
| |
| - EGL_BAD_STATE_KHR is generated if <stream> is in |
| EGL_STREAM_STATE_DISCONNECTED_KHR state. |
| |
| - EGL_BAD_DISPLAY is generated if <dpy> is not a valid |
| EGLDisplay. |
| |
| - EGL_NOT_INITIALIZED is generated if <dpy> is not initialized. |
| |
| Issues |
| |
| 1. When both producer and consumer are connected to a single |
| EGLStream object, what happens when eglStreamFlushNV is called? |
| |
| RESOLVED: The function returns without any blocking. |
| |
| Revision History |
| |
| #3 (April 11, 2018) Jon Leech |
| - Add missing NV suffix to eglStreamFlushNV |
| |
| #2 (April 2, 2018) Santanu Thangaraj |
| - Update based on comments from Daniel Kartch |
| - General cleanup |
| |
| #1 (March 26, 2018) Santanu Thangaraj |
| - Initial draft |