Loading [MathJax]/jax/input/TeX/config.js
  • <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • NVIDIA DRIVE OS Linux SDK API Reference

    6.0.9 Release
    All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    EGL_EXT_platform_base
    Name
    
        EXT_platform_base
    
    Name Strings
    
        EGL_EXT_platform_base
    
    Contributors
    
        Chad Versace <chad.versace@intel.com>
        James Jones <jajones@nvidia.com>
    
    Contacts
    
        Chad Versace <chad.versace@intel.com>
    
    Status
    
        Complete
    
    Version
    
        Version 9, 2014.01.09
    
    Number
    
        EGL Extension #57
    
    Extension Type
    
        EGL client extension
    
    Dependencies
    
        Requires EGL 1.4.
    
        Requires EGL_EXT_client_extensions to query its existence without
        a display.
    
        This extension is written against the wording of the 2013.02.11 revision
        of the EGL 1.4 Specification.
    
    Overview
    
        This extension defines functionality and behavior for EGL implementations
        that support multiple platforms at runtime. For example, on Linux an EGL
        implementation could support X11, Wayland, GBM (Generic Buffer Manager),
        Surface Flinger, and perhaps other platforms.
    
        In particular, this extension defines the following:
    
            1. A mechanism by which an EGL client can detect which platforms the
               EGL implementation supports.
    
            2. New functions that enable an EGL client to specify to which
               platform a native resource belongs when creating an EGL resource
               from that native resource.  For example, this extension enables an
               EGL client to specify, when creating an EGLSurface from a native
               window, that the window belongs to X11.
    
            3. That an EGL client is not restricted to interacting with a single
               platform per process. A client process can create and manage EGL
               resources from multiple platforms.
    
        The generic term 'platform' is used throughout this extension
        specification rather than 'window system' because not all EGL platforms
        are window systems. In particular, those platforms that allow headless
        rendering without a display server, such as GBM, are not window systems.
    
        This extension does not specify behavior specific to any platform, nor
        does it specify the set of platforms that an EGL implementation may
        support. Platform-specific details lie outside this extension's scope and
        are instead described by extensions layered atop this one.
    
    New Types
    
        None
    
    New Procedures and Functions
    
        EGLDisplay eglGetPlatformDisplayEXT(
            EGLenum platform,
            void *native_display,
            const EGLint *attrib_list);
    
        EGLSurface eglCreatePlatformWindowSurfaceEXT(
            EGLDisplay dpy,
            EGLConfig config,
            void *native_window,
            const EGLint *attrib_list);
    
        EGLSurface eglCreatePlatformPixmapSurfaceEXT(
            EGLDisplay dpy,
            EGLConfig config,
            void *native_pixmap,
            const EGLint *attrib_list);
    
    New Tokens
    
        None
    
    Additions to the EGL 1.4 Specification
    
        Replace each occurence of the term "window system" with "platform".  The
        rationale behind this change is that not all platforms are window systems,
        yet the EGL 1.4 specification uses the two terms interchangeably.  In
        particular, platforms that allow headless rendering without a display
        server, such as GBM, are not window systems.
    
        Append the following paragraph to the initial, unnamed subsection of
        section 2.1 "Native Window System and Rendering APIs".
    
        "This specification does not define the set of platforms that may be
        supported by the EGL implementation, nor does it specify behavior specific
        to any platform. The set of supported platforms and their behavior is
        defined by extensions. To detect if a particular platform is supported,
        clients should query the EGL_EXTENSIONS string of EGL_NO_DISPLAY using
        eglQueryString.
    
        Replace the text of section 3.2 "Initialization", from the start of the
        section and up to and excluding the phrase "EGL may be intialized on
        a display", with the following:
    
        "A display can be obtained by calling
    
            EGLDisplay eglGetPlatformDisplayEXT(
                EGLenum platform,
                void *native_display,
                const EGLint *attrib_list);
    
        EGL considers the returned EGLDisplay as belonging to the native platform
        specified by <platform>.  This specification defines no valid value for
        <platform>. Any specification that does define a valid value for
        <platform> will also define requirements for the <native_display>
        parameter. For example, an extension specification that defines support
        for the X11 platform may require that <native_display> be a pointer to an
        X11 Display, and an extension specification that defines support for the
        Microsoft Windows platform may require that <native_display> be a pointer
        to a Windows Device Context.
    
        All attribute names in <attrib_list> are immediately followed by the
        corresponding desired value. The list is terminated with EGL_NONE. The
        <attrib_list> is considered empty if either <attrib_list> is NULL or if
        its first element is EGL_NONE. This specification defines no valid
        attribute names for <attrib_list>.
    
        Multiple calls made to eglGetPlatformDisplayEXT with the same <platform>
        and <native_display> will return the same EGLDisplay handle.
    
        An EGL_BAD_PARAMETER error is generated if <platform> has an invalid value.
        If <platform> is valid but no display matching <native_display> is
        available, then EGL_NO_DISPLAY is returned; no error condition is raised
        in this case.
    
        A display can also be obtained by calling
    
            EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id);
    
        The behavior of eglGetDisplay is similar to that of
        eglGetPlatformDisplayEXT, but is specifided in terms of implementation-
        specific behavior rather than platform-specific extensions.
        As for eglGetPlatformDisplayEXT, EGL considers the returned EGLDisplay
        as belonging to the same platform as <display_id>. However, the set of
        platforms to which <display_id> is permitted to belong, as well as the
        actual type of <display_id>, are implementation-specific.  If <display_id>
        is EGL_DEFAULT_DISPLAY, a default display is returned.  Multiple calls
        made to eglGetDisplay with the same <display_id> will return the same
        EGLDisplay handle.  If no display matching <display_id> is available,
        EGL_NO_DISPLAY is returned; no error condition is raised in this case."
    
        In section 3.5.1 "Creating On-Screen Rendering Surfaces", replace the
        second paragraph, which begins with "Using the platform-specific type" and
        ends with "render into this surface", with the following:
    
        "Then call
    
            EGLSurface eglCreatePlatformWindowSurfaceEXT(
                EGLDisplay dpy,
                EGLConfig config,
                void *native_window,
                const EGLint *attrib_list);
    
        eglCreatePlatformWindowSurfaceEXT creates an onscreen EGLSurface and
        returns a handle to it. Any EGL context created with a compatible
        EGLConfig can be used to render into this surface.
    
        <native_window> must belong to the same platform as <dpy>, and EGL
        considers the returned EGLSurface as belonging to that same platform.  The
        extension that defines the platform to which <dpy> belongs also defines
        the requirements for the <native_window> parameter."
    
        In the remainder of section 3.5.1, replace each occurrence of
        'eglCreateWindowSurface' with 'eglCreatePlatformWindowSurfaceEXT'.
    
        Insert the sentence below after the first sentence of the last paragraph
        of section 3.5.1:
    
        "If <dpy> and <native_window> do not belong to the same platform, then
        undefined behavior occurs. [1]"
    
        Add the following footnote to section 3.5.1:
    
        "[1] See section 3.1.0.2 "Parameter Validation".
    
        Append the following to section 3.5.1:
    
        "An on-screen rendering surface may also be created by calling
    
            EGLSurface eglCreateWindowSurface(
                EGLDisplay dpy,
                EGLConfig config,
                EGLNativeWindowType win,
                const EGLint *attrib_list);
    
        The behavior of eglCreateWindowSurface is identical to that of
        eglCreatePlatformWindowSurfaceEXT except that the set of platforms to
        which <dpy> is permitted to belong, as well as the actual type of <win>,
        are implementation specific.
    
        In section 3.5.4 "Creating Native Pixmap Rendering Surfaces", replace the
        third paragraph, which begins with "Using the platform-specific type" and
        ends with "render into this surface", with the following:
    
        "Then call
    
            EGLSurface eglCreatePlatformPixmapSurfaceEXT(
                EGLDisplay dpy,
                EGLConfig config,
                void *native_pixmap,
                const EGLint *attrib_list);
    
        eglCreatePlatformPixmapSurfaceEXT creates an offscreen EGLSurface and
        returns a handle to it. Any EGL context created with a compatible
        EGLConfig can be used to render into this surface.
    
        <native_pixmap> must belong to the same platform as <dpy>, and EGL
        considers the returned EGLSurface as belonging to that same platform.  The
        extension that defines the platform to which <dpy> belongs also defines
        the requirements for the <native_pixmap> parameter."
    
        In the remainder of section 3.5.4, replace each occurrence of
        'eglCreatePixmapSurface' with 'eglCreatePlatformPixmapSurfaceEXT' and each
        occurence of 'eglCreateWindowSurface' with
        'eglCreatePlatformWindowSurfaceEXT'.
    
        Insert the sentence below after the first sentence of the last paragraph
        of section 3.5.4:
    
        "If <dpy> and <native_pixmap> do not belong to the same platform, then
        undefined behavior occurs. [1]"
    
        Add the following footnote to section 3.5.3:
    
        "[1] See section 3.1.0.2 "Parameter Validation".
    
        Append the following to section 3.5.2:
    
        "An offscreen rendering surface may also be created by calling
    
            EGLSurface eglCreatePixmapSurface(
                EGLDisplay dpy,
                EGLConfig config,
                EGLNativePixmapType pixmap,
                const EGLint *attrib_list);
    
        The behavior of eglCreatePixmapSurface is identical to that of
        eglCreatePlatformPixmapSurfaceEXT except that the set of platforms to
        which <dpy> is permitted to belong, as well as the actual type of
        <pixmap>, are implementation specific.
    
    Issues
    
        1. What rules define how EGL resources are shared among displays belonging
           to different platforms?
    
           RESOLVED: Neither the EGL 1.4 specification nor any extension allow EGL
           resources to be shared among displays. This extension does not remove
           that restriction.
    
        2. Rather than define the new function eglGetPlatformDisplayEXT(), should
           this extension instead define new thread-local state for the currently
           bound platform and an associated binding function, such as
           eglBindPlatformEXT()?
    
           RESOLVED: No, for the following reasons.
    
                - A current trend among the Khronos workgroups is to remove use of
                  global state by introducing bindless objects. Introducing a new
                  thread-local binding point defies that trend.
    
                - Additional specification language would be required to define
                  the interactions between the currently bound platform and all
                  EGL functions that accept an EGLDisplay. (For example, if the
                  currently bound platform is Wayland, then what is the result of
                  calling eglCreateWindowSurface() with a display and native
                  window belonging to X11?) By choosing to not introduce the
                  notion of a "currently bound platform", we obtain a cleaner
                  extension specification and eliminate for EGL users a class of
                  potential bugs.
    
        3. Should this extension define the notion of a default platform?
    
           RESOLVED: No. eglGetDisplay() can be used if a default platform is
           needed.
    
        4. Rather than define the new functions
           eglCreatePlatform{Window,Pixmap}SurfaceEXT(), should we instead
           redefine the EGLNative* types in eglplatform.h as void*?
    
           RESOLVED: No, this introduces problems for X11 applications.
    
           Suppose that a 64-bit X11 application is compiled against an old EGL
           library (where EGLNativeWindowType is a typedef for XID, which is in
           turn a typedef for a 64-bit unsigned integer on Fedora 18) and then
           attempts to run against a new EGL library (where EGLNativeType is
           a typedef for void*).  To preserve the ABI of eglCreateWindowSurface()
           in this situation, the new EGL library must re-interpret the
           <native_window> parameter as an integer.
    
           However, this preservation of the ABI breaks source compatibility for
           existing X11 applications. To successfully compile, each call to
    
                eglCreateWindowSurface(dpy, window, attribs)
    
           in existing X11 application source code would need to be replaced with
    
                eglCreateWindowSurface(dpy, (void*) window, attribs) .
    
           Requiring such widespread code modifications would be an unnecessary
           burden to developers and Linux package maintainers.
    
    Revision History
    
        Version 9, 2014.01.09 (Jon Leech)
            - Fix typo eglGetDisplayPlatformEXT -> eglGetPlatformDisplayEXT
    
        Version 8, 2013.07.03 (Chad Versace)
            - Add "Extension Type" section, required by EGL_EXT_client_extensions v9.
    
        Version 7, 2013.06.07 (Chad Versace)
            - Fix some awkward text (s/the EGL/EGL/).
            - Remove text "attribute names are defined by platform-specific
              extensions".
    
        Version 6, 2013.06.07 (Chad Versace)
            - To "Dependencies" section, expand text that discusses
              EGL_EXT_client_extensions.
    
        Version 5, 2013.05.18 (Chad Versace)
            - Removed restriction that "attribute names are defined only by
              platform-specific extensions".
            - Resolve issue 3 as NO.
            - Clarified some text and fixed grammatical errors.
    
        Version 4, 2013.05.14 (Chad Versace)
            - Add <attrib_list> parameter to eglGetPlatformDisplayEXT, per
              feedback at the April Khronos F2F.
    
        Version 3, 2013.04.26 (Chad Versace)
            - Add issues 2, 3, 4.
    
        Version 2, 2013.03.24 (Chad Versace)
            - Complete draft by adding text for pixmaps.
            - The footnotes regarding undefined behavior, simplify them by
              simply referring to section 3.1.0.2.
            - Add issue 1 from Eric Anholt <eric@anholt.net>.
            - Fix spelling and formatting errors.
    
        Version 1, 2013.03.13 (Chad Versace)
            - Incomplete draft posted for review
    
    人人超碰97caoporen国产