Name EXT_stream_consumer_qnxscreen_window Name Strings EGL_EXT_stream_consumer_qnxscreen_window Contributors TBD @ QNX Daniel Kartch Lakshmanan Selvi Muthusamy Nazeer Hussain Shaik Miguel A. Vico Contacts TBD @ QNX Status Draft Version Version 4 - March 13, 2016 Number TBD Extension Type EGL display extension Dependencies Requires EGL_KHR_stream. Requires EGL_NV_stream_attrib Interacts with EGL_KHR_stream_fifo. Requires QNX CAR platform 2.1 (Minimum Expectation). Overview This extension allows a QNX screen window to be connected to an EGLStream as its consumer. Image frames from the EGLStream can be posted into the window for use in composition or display. The effect is similar to using that window system's screen_post_window function, but without requiring the application to perform additional copy steps or have detailed knowledge of the image buffers to map between the EGL client producer and the native window system buffers. The QNX screen window allocation and its handling is done by EXT_stream_consumer_qnxscreen_window extension itself. Application don't need to do any external work to display through the QNX screen window system. New Procedures and Functions EGLBoolean eglStreamConsumerQNXScreenWindowEXT( EGLDisplay dpy, EGLStreamKHR stream); New Tokens Accepted as an attribute in the <attrib_list> parameter of eglCreateStreamKHR and as the <attribute> parameter of eglStreamAttribKHR and eglQueryStreamKHR EGL_CONSUMER_ACQUIRE_QNX_FLUSHING_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_DISPNO_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_LAYERNO_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_SURFACE_TYPE_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_X_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_Y_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_WIDTH_EXT 0xXXXX EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_HEIGHT_EXT 0xXXXX Replace section "3.10.2.1 No way to connect consumer to EGLStream" in the EGL_KHR_stream extension: 3.10.2.1 QNX screen window consumer Call EGLBoolean eglStreamConsumerQNXScreenWindowEXT( EGLDisplay dpy, EGLStreamKHR stream); to connect QNX screen window system as the the consumer of <stream>. On failure, EGL_FALSE is returned and an error is generated. - EGL_BAD_DISPLAY is generated if <dpy> is not a valid, initialized EGLDisplay. - EGL_BAD_STREAM_KHR is generated if <stream> is not a valid EGLStreamKHR created for <dpy>. - EGL_BAD_STATE_KHR is generated if <stream> is not in state EGL_STREAM_STATE_CREATED_KHR. On success, a new QNX screen window is allocated and connected to <stream>, <stream> is placed in the EGL_STREAM_STATE_CONNECTING_KHR state, and EGL_TRUE is returned. The handle of the new window is not returned to the user for direct manipulation. All window properties must be set through the stream. This prevents applications from accessing or interfering with the buffers containing the frame data. If <stream> is destroyed, the QNX screen window will be closed. Call eglStreamConsumerAcquireAttribNV to post the next available frame from <stream> into the QNX screen window. Add a new subsection 3.10.4.x at the end of section "3.10.4 EGLStream Attributes" in the EGL_KHR_stream extension spec: 3.10.4.x EGL_CONSUMER_ACQUIRE_QNX_FLUSHING_EXT Attribute This attribute is a read/write bitfield which may contain any flags of type Screen_Flushing_Types. The default value is 0. It indicates the flushing behavior to use during eglStreamConsumerAcquireAttribNV when connected to a QNX screen window consumer. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+1 EGL_CONSUMER_ACQUIRE_QNX_DISPNO_EXT Attribute This attribute is a read/write integer mapped to the display port number of the QNX screen window's SCREEN_PROPERTY_DISPLAY attribute. It may bet set to any valid display port number supported by the platform. The default value is 0. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+2 EGL_CONSUMER_ACQUIRE_QNX_LAYERNO_EXT Attribute This attribute is a read/write integer mapped to the pipeline id of the QNX screen window's SCREEN_PROPERTY_PIPELINE attribute. It may bet set to any valid pipeline id supported by the platform. The default value is 0. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+3 EGL_CONSUMER_ACQUIRE_QNX_SURFACE_TYPE_EXT Attribute This attribute is a read/write flag mapped to the QNX screen window's SCREEN_PROPERTY_FLIP property. Its value may be 0, indicating the surface is top-left oriented, or 1, indicating bottom-left orientation. The default value is 0. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+4 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_X_EXT Attribute This attribute is a read/write integer mapped to the x value of the QNX screen window's SCREEN_PROPERTY_POSITION attribute. It may bet set to any valid window x position. The default value is 0. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+5 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_Y_EXT Attribute This attribute is a read/write integer mapped to the y value of the QNX screen window's SCREEN_PROPERTY_POSITION attribute. It may bet set to any valid window y position. The default value is 0. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+6 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_WIDTH_EXT Attribute This attribute is a read/write integer mapped to the width value of the QNX screen window's SCREEN_PROPERTY_SIZE attribute. It may bet set to any valid window width value. The default value is current display mode's width. When connected to any other type of consumer, this attribute is ignored. 3.10.4.x+7 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_HEIGHT_EXT Attribute This attribute is a read/write integer mapped to the height value of the QNX screen window's SCREEN_PROPERTY_SIZE attribute. It may bet set to any valid window height value. The default value is current display mode's height. When connected to any other type of consumer, this attribute is ignored. Issues: 1. The EGL_KHR_stream_consumer_gltexture extension provides a timeout attribute which causes the Acquire function to block if no new frame is available. Do we want similar behavior here? RESOLVED - Use the EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR to make eglStreamConsumerAcquireAttribNV blocking if desired. 2. In fifo mode, if a timestamp is specified by the producer which has not yet been reached, should the post operation performed by the Acquire function block until then? UNRESOLVED 3. A separate extension may allow QNX screen windows to be stream producers. How do these extensions interact? Is it legal for a window to be made both the consumer of one stream and the producer of another? If so, at what point do frames acquired by a window get released back to the original producer if they have been passed downstream? If not, what errors are generated if an application attempts to do this? UNRESOLVED Revision History #4 (March 13, 2016) Miguel A. Vico - Rewritten against wording of EGL_NV_stream_attrib. #3 (July 16, 2015) Nazeer Hussain Shaik - Prototype of the acquire API changed to match the one defined by EGL_EXT_stream_acquire_mode and rewritten accordingly. #2 (February 18, 2015) Lakshmanan Selvi Muthusamy - 2nd draft #1 (September 22, 2014) Daniel Kartch - Initial draft