summaryrefslogtreecommitdiff
path: root/glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt
diff options
context:
space:
mode:
Diffstat (limited to 'glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt')
-rw-r--r--glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt306
1 files changed, 306 insertions, 0 deletions
diff --git a/glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt b/glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt
new file mode 100644
index 0000000..1cb0d06
--- /dev/null
+++ b/glew/auto/EGL-Registry/extensions/NV/EGL_NV_stream_reset.txt
@@ -0,0 +1,306 @@
+Name
+
+ NV_stream_reset
+
+Name Strings
+
+ EGL_NV_stream_reset
+
+Contributors
+
+ Daniel Kartch
+
+Contacts
+
+ Daniel Kartch, NVIDIA (dkartch 'at' nvidia.com)
+
+Status
+
+ Draft
+
+Version
+
+ Version 6 - October 27, 2016
+
+Number
+
+ EGL Extension #112
+
+Extension Type
+
+ EGL display extension
+
+Dependencies
+
+ Requires the EGL_KHR_stream extension.
+
+ Modifies the EGL_KHR_stream_fifo extension.
+
+ Modifies the EGL_KHR_stream_consumer_gltexture extension.
+
+ Modifies the EGL_EXT_stream_consumer_egloutput extension.
+
+ Interacts with the EGL_KHR_stream_cross_process_fd and
+ EGL_NV_stream_remote extensions.
+
+ This extension is written based on the wording of version 26 of the
+ EGL_KHR_stream extension.
+
+Overview
+
+ The base stream extension requires that, once the producer inserts
+ the first frame into the stream, at least one frame is always
+ available to be acquired by the consumer until the stream
+ disconnects. However, there are some use cases in which the producer
+ or the consumer may wish to allow the stream to empty without
+ permanently disconnecting.
+
+ An example of a use case where the producer may wish to empty the
+ stream is a security or rear-view camera which temporarily stops
+ producing new frames, perhaps due to a hardware reset. Continuing to
+ display the last frame available would produce a false impression of
+ the current state, and should be avoided for safety reasons. A
+ better solution would be to let the consumer know there was no
+ available image, so that it could take appropriate actions, and then
+ recover when the camera begins streaming again.
+
+ This use case could be handled with existing functionality by
+ disconnecting and destroying the stream and then recreating and
+ reconnecting it when new frames are available. However, this can be
+ burdensome, particularly when the producer and consumer reside in
+ separate processes.
+
+ An example of a use case where the consumer may wish to empty the
+ stream is an image processer which operates on each frame exactly
+ once. After processing, it will not waste resources operating on the
+ same frame a second time. This use case can be handled by carefully
+ monitoring the availability of a new frame before performing an
+ acquire operation. But returning the buffer(s) as soon as they are
+ no longer needed allows for better resource management.
+
+ This extension allows a stream to be completely drained of existing
+ frames by the consumer or flushed of existing frames by the producer
+ without disconnecting, so that processing may continue again when
+ new frames are produced.
+
+New Functions
+
+ EGLBoolean eglResetStreamNV(
+ EGLDisplay dpy,
+ EGLStreamKHR stream);
+
+New Tokens
+
+ Accepted as an attribute in the <attrib_list> parameter of
+ eglCreateStreamKHR and the <attrib> parameter of eglQueryStreamKHR:
+
+ EGL_SUPPORT_RESET_NV 0x3334
+ EGL_SUPPORT_REUSE_NV 0x3335
+
+To table "3.10.4.4 EGLStream Attributes", add entry
+
+ Attribute Read/Write Type Section
+ -------------------------- ---------- ------ ----------
+ EGL_SUPPORT_RESET_NV io EGLint 3.10.4.x
+ EGL_SUPPORT_REUSE_NV io EGLint 3.10.4.x+1
+
+Modify entries in the list of state transitions in "3.10.4.3
+EGL_STREAM_STATE_KHR Attribute"
+
+ EGL_STREAM_STATE_EMPTY_KHR ->
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR
+ Occurs when the producer inserts the first image frame and any
+ subsequent frame after the stream has been drained.
+
+ EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR ->
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR
+ Occurs when the producer inserts a new image frame and only
+ previously consumed frames are available.
+
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR ->
+ EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR
+ Occurs when the consumer begins examining the last unconsumed
+ frame and reuse of old frames is enabled.
+
+Add entries to the list of state transitions in "3.10.4.3
+EGL_STREAM_STATE_KHR Attribute"
+
+ EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR ->
+ EGL_STREAM_STATE_EMPTY_KHR
+ Occurs when the stream is reset.
+
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR ->
+ EGL_STREAM_STATE_EMPTY_KHR
+ Occurs when the stream is reset or, if reuse of old frames is
+ disabled, when the consumer begins examining the last unconsumed
+ frame.
+
+Add new sections at the end of section "3.10.4 EGLStream Attributes"
+
+ 3.10.4.x EGL_SUPPORT_RESET_NV Attribute
+
+ The EGL_SUPPORT_RESET_NV attribute may only be set when the stream
+ is created. By default, it is EGL_FALSE. If set to EGL_TRUE, the
+ stream will allow restoration of the stream state back to
+ EGL_STREAM_STATE_EMPTY_KHR state from
+ EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR or
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR, releasing existing frames,
+ as described in section 3.10.5.x.
+
+ Not all consumers are required to support stream resets. Attempting
+ to attach a consumer which does not support resets to a stream with
+ EGL_SUPPORT_RESET_NV set to EGL_TRUE will fail with an
+ EGL_BAD_MATCH error.
+
+ Not all producers will provide a means to reset streams themselves,
+ but any producer may be connected to a stream which supports resets
+ and may be used with the eglStreamResetNV function.
+
+ 3.10.4.x+1 EGL_SUPPORT_REUSE_NV Attribute
+
+ The EGL_SUPPORT_REUSE_NV attribute may only be set when the stream
+ is created. By default, it is EGL_TRUE. If EGL_TRUE, then when the
+ consumer acquires the last available image frame from the stream, it
+ will be held for reuse until a new frame is inserted to replace it.
+ If EGL_FALSE, no frames will be available to the consumer until the
+ producer inserts a new one.
+
+Modify third paragraph of "3.10.5.1 EGLStream operation in mailbox mode"
+
+ The consumer retrieves the image frame from the mailbox and
+ examines it. When the consumer is finished examining the image
+ frame it is either placed back in the mailbox (if the mailbox is
+ empty, supports reuse of frames, and has not been reset) or
+ discarded (otherwise).
+
+If EGL_KHR_stream_fifo is present, insert at beginning of fourth paragraph
+of "3.10.5.2 EGLStream operation in fifo mode"
+
+ If the EGL_SUPPORT_REUSE_NV attribute is EGL_TRUE and the stream has
+ not been reset since the image frame was consumed, then if the fifo
+ is empty ...
+
+Insert a new paragraph after the above
+
+ If the EGL_SUPPORT_REUSE_NV attribute is EGL_FALSE or the stream has
+ been reset, then if the fifo is empty when the consumer is finished
+ consuming an image frame, the frame is discarded and the stream is
+ left in the EGL_STREAM_STATE_EMPTY_KHR state until new frames are
+ produced.
+
+Add a new section to "3.10.5 EGLStream operation"
+
+ 3.10.5.x EGLStream reset
+
+ For resource management or safety reasons, it may be necessary to
+ invalidate and reclaim frames pending in the stream. This is only
+ possible if the stream's EGL_SUPPORT_RESET_NV attribute is set to
+ EGL_TRUE.
+
+ Stream resets cause any unconsumed image frames waiting in the
+ stream to be immediately discarded, and place the stream in the
+ EGL_STREAM_STATE_EMPTY_KHR state. Frames currently held by the
+ consumer are not immediately affected, but will be discarded once
+ released, even if the stream would normally hold old frames for
+ reuse. After the reset, new frames inserted by the producer are
+ processed normally.
+
+ Stream resets may be issued by some producers as described in their
+ specifications, and may also be triggered by the application calling
+
+ EGLBoolean eglResetStreamNV(
+ EGLDisplay dpy,
+ EGLStreamKHR stream)
+
+ On success, EGL_TRUE is returned and a reset of the stream is
+ initiated. On failure, EGL_FALSE is returned and an error is
+ generated.
+
+ - EGL_BAD_DISPLAY is generated if <dpy> is not a valid
+ EGLDisplay.
+
+ - EGL_NOT_INITIALIZED is generated if <dpy> is not initialized.
+
+ - EGL_BAD_STREAM_KHR is generated if <stream> is not a valid
+ EGLStream created for <dpy>.
+
+ - EGL_BAD_STATE_KHR is generated if <stream> is in
+ EGL_STREAM_STATE_CREATED_KHR, EGL_STREAM_STATE_CONNECTING_KHR,
+ or EGL_STREAM_STATE_DISCONNECTED_KHR state.
+
+ - EGL_BAD_ACCESS is generated if <stream>'s
+ EGL_SUPPORT_RESET_NV attribute is not EGL_TRUE.
+
+ If a stream is already in the EGL_STREAM_STATE_EMPTY_KHR state, a
+ reset will have no effect.
+
+If EGL_KHR_stream_cross_process_fd or EGL_NV_stream_remote is present,
+add to the list of errors above
+
+ - EGL_BAD_ACCESS is generated if <stream> represents the
+ consumer endpoint of a stream whose producer endpoint is
+ represented by a different EGLStreamKHR handle (e.g. for
+ cross-process streams).
+
+If EGL_KHR_stream_consumer_gltexture is supported, modify the first
+sentence of the fifth paragraph of the description of
+eglStreamConsumerAcquireKHR
+
+ If the producer has not inserted any new image frames since the
+ last call to eglStreamConsumerAcquireKHR, and the stream has been
+ reset or does not support reuse of frames, then
+ eglStreamConsumerAcquireKHR will fail. If it has not been reset and
+ reuse is supported, then eglStreamConsumerAcquireKHR will "latch"
+ the same image frame it latched last time
+ eglStreamConsumerAcquireKHR was called.
+
+If EGL_EXT_stream_consumer_egloutput is supported, add to the
+description if eglStreamConsumerOutputEXT
+
+ If the stream is reset to the EGL_STREAM_STATE_EMPTY_KHR state, any
+ currently displayed frame will be released, and the displayed image
+ will be reset to some default state determined by the display
+ hardware and the implementation. Possible behavior includes, but is
+ not limited to, displaying a black screen, displaying a default
+ splash screen, displaying a "no input" message, or powering off the
+ display. If and when the stream again enters the
+ EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR state, processing of frames
+ will resume as described above.
+
+Issues
+
+ 1. When this extension is present, should all streams automatically
+ support resetting?
+
+ RESOLVED: No. Applications which are not aware of this extension
+ may not be prepared to handle an unexpected return to the EMPTY
+ state. Therefore support for this feature must be explicitly
+ requested.
+
+Revision History
+
+ #6 (October 27, 2016) Daniel Kartch
+ - Clean up for publication
+
+ #5 (July 23rd, 2015) Daniel Kartch
+ - Added interaction with cross-process streams.
+
+ #4 (July 22nd, 2015) Daniel Kartch
+ - Added enum values.
+
+ #3 (July 20th, 2015) Daniel Kartch
+ - Changed to NV specification
+ - Removed flush option from eglResetStream. Resetting will
+ always flush pending frames.
+ - Added EGL_SUPPORT_REUSE_NV flag to control whether released
+ frames are saved or discarded immediately.
+ - Removed reference to unpublished stream_sequence extension.
+
+ #2 (August 21th, 2014) Daniel Kartch
+ - Added paragraph to indicate that producers do not impose
+ restrictions on use of reset.
+ - Clarified consumer behavior on reset.
+ - Added interactions with GL texture and EGLOutput consumers.
+
+ #1 (August 12th, 2014) Daniel Kartch
+ - Initial draft