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 is not a valid EGLStream. - EGL_BAD_STATE_KHR is generated if is in EGL_STREAM_STATE_DISCONNECTED_KHR state. - EGL_BAD_DISPLAY is generated if is not a valid EGLDisplay. - EGL_NOT_INITIALIZED is generated if 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