Name

    NV_stream_dma

Name Strings

    EGL_NV_stream_dma

Contributors

    Santanu Thangaraj
    Daniel Kartch
    Arihant Jejani

Contacts

    Santanu Thangaraj, NVIDIA (sthangaraj 'at' nvidia.com)
    Arihant Jejani, NVIDIA (ajejani 'at' nvidia.com)

Status

    complete.

Version

    Version 1 - April 15, 2019

Number

    135

Extension Type

    EGL display extension

Dependencies

    Requires EGL_NV_stream_remote extension.
    
    Requires EGL_NV_stream_cross_system extension.
    
    Interacts with EGL_NV_stream_socket extensions.

Overview:

    This extension provides the framework for performing DMA transfers
    between opposite ends of a single stream, if there is no shared
    memory available between them. 
    
    In case of cross system streams the buffer contents of one end of
    the stream is transferred to other end using sockets by
    EGL_NV_stream_socket extension. Transferring buffer contents
    through sockets is slower compared to DMA transfers. Since DMA
    transfers have higher throughput compared to sockets, using 
    EGL_NV_stream_dma extension, applications can request EGL to
    utilize DMA channels to perform buffer copies.

New types

    None

New Procedures and functions

    None

New Tokens
    
    Accepted as attribute names in eglCreateStreamKHR,
    eglCreateStreamAttribKHR, eglQueryStreamKHR, and
    eglQueryStreamAttribKHR:

    EGL_STREAM_DMA_NV                         0x3371
    EGL_STREAM_DMA_SERVER_NV                  0x3372

Add to list of failures in section "3.10.1 Creating an EGLStream" in 
EGL_KHR stream:
    - EGL_BAD_MATCH is generated if the value of EGL_STREAM_DMA_NV is 
      neither EGL_TRUE nor EGL_FALSE.
    - EGL_BAD_MATCH is generated if the value of 
      EGL_STREAM_DMA_SERVER_NV is not EGL_DONT_CARE or a valid
      DMA server identifier as defined by the platform.

Add to "Table 3.10.4.4 EGLStream Attributes" in EGL_KHR_stream:

    Attribute                 Read/Write   Type              Section
    ------------------------ -----------   ------            ----------
    EGL_STREAM_DMA_NV            io       EGLint             3.10.4.x
    EGL_STREAM_DMA_SERVER_NV     io       platform dependent 3.10.4.x+1

Add new subsections to the end of section "3.10.4 EGLStream Attributes"
in EGL_KHR_stream:

    3.10.4.x EGL_STREAM_DMA_NV Attribute

    The EGL_STREAM_DMA_NV attribute may be set when the stream is 
    created, and indicates whether the DMA channels have to be used to
    transfer the buffer contents from producer to consumer. Legal 
    values are EGL_TRUE or EGL_FALSE. The default value is EGL_FALSE.

    A value of EGL_TRUE indicates that EGL has to use DMA channels to
    transfer buffers from producer to consumer.
    
    If EGL_FALSE is specified, DMA channels will not be utilized for
    buffer transfers.
    
    3.10.4.x+1 EGL_STREAM_DMA_SERVER_NV Attribute

    The EGL_STREAM_DMA_SERVER_NV attribute is a platform dependent
    identifier which may be set when the stream is created and it
    indicates the server, which must be contacted to handle DMA 
    transfers, if that server is not local. Legal values, aside from
    EGL_DONT_CARE, are determined by the implementation. The default
    value is EGL_DONT_CARE.
    
Issues

    1.  What happens when application requests DMA copy using 
        EGL_STREAM_DMA_NV attribute in eglCreateStreamKHR or 
        eglCreateStreamAttribKHR API, but the system does not support 
        access to DMA channels?

        RESOLVED: The functions return EGL_NO_STREAM_KHR and 
        EGL_BAD_ATTRIBUTE error is set.
        
    2.  What happens when application requests DMA copy using 
        EGL_STREAM_DMA_NV attribute in eglCreateStreamKHR or 
        eglCreateStreamAttribKHR API, and the system supports DMA 
        channels, but currently none of the channels are available for
        use?
        
        RESOLVED: The functions return EGL_NO_STREAM_KHR and
        EGL_BAD_ATTRIBUTE error is set.
        
Revision History

    #1  (April 15, 2019) Santanu Thangaraj
        - Initial version
