[Mesa-dev] [PATCH 3/6] egl: EGL_INTEL_no_surface extension

Kristian Høgsberg krh at bitplanet.net
Fri Jun 4 07:29:00 PDT 2010


2010/6/4 Jakob Bornecrantz <wallbraker at gmail.com>:
> 2010/6/4 Kristian Høgsberg <krh at bitplanet.net>:
>> This extension allows an application to make a context current by
>> passing EGL_NO_SURFACE for the write and read surface in the call to
>> eglMakeCurrent.  The motivation is that applications that only want to
>> render to client API targets (such as OpenGL framebuffer objects)
>> should not need to create a throw-away EGL surface just to get a
>> current context.
>
> Looks good.
>
> Any reason this is a intel extension instead of a Mesa one?

I think it was something like "uh, we'll need some tokens for this
extension, if I make it an Intel extension I think we have a token
range we can use" or something.  Will rename for tokens.

> Can you add a small spec file explaning it? Not that it needs much
> explaining. Tho it would be nice to know if glDrawBuffers(0, NULL) and
> then drawing something should raise a error? Or if rendering will be
> skipped?

Argh, I wrote a spec but forgot to git add it.  Attached here.

> Feel like taking a stab at adding this to st/mesa, st/dri & st/egl?

I wouldn't know where to start :)

Kristian
-------------- next part --------------
Name

    INTEL_no_surface

Name Strings

    EGL_INTEL_no_surface

Contact

    Kristian Høgsberg <krh at bitplanet.net>

Status

    Proposal

Version

    Version 1, May 28, 2010

Number

    EGL Extension #not assigned

Dependencies

    EGL 1.4 is required.
    Written against wording of EGL 1.4 specification.

Overview

    This extension allows an application to make a context current by
    passing EGL_NO_SURFACE for the write and read surface in the call to
    eglMakeCurrent.  The motivation is that applications that only want to
    render to client API targets (such as OpenGL framebuffer objects) should
    not need to create a throw-away EGL surface just to get a current
    context.

    This extension introduces a new config attribute that indicates the APIs
    that support binding a context with no surfaces.  A config can be used
    for making a context current with a value of EGL_NO_SURFACE for the
    write and read surfaces.

    For GL contexts, the state of the context until a FBO is created
    and bound is the same as a context with an incomplete FBO bound.

    Not all client APIs support FBOs or an FBO type mechanism and EGL will
    only enable the bits for the APIs that allow this in
    EGL_RENDERABLE_TYPE.

IP Status 

    There are no known IP issues.

Issues

    1) Should this instead be its own config attribute?  It would be
    an API bitmask that indicate the APIs that allow using the config
    to make a context current with no surfaces.  That way we avoid
    using up bits in the EGL_SURFACE_TYPE mask and avoid combinatorial
    explosion in the number of configs if the ES1 API doesn't support
    FBOs while ES2 does.  That would otherwise require exposing one
    set of configs with ES2 in the EGL_RENDERABLE_TYPE bitmask and
    EGL_NO_SURFACE_BIT_INTEL and one set with ES1 in the
    EGL_RENDERABLE_TYPE and no EGL_NO_SURFACE_BIT_INTEL.

    Resolved: yes.

New Procedures and Functions

    None

New Tokens

    Accepted by the <Attribute> parameter of eglGetConfigAttrib and 
    the <attrib_list> parameter of eglChooseConfig:

    EGL_NO_SURFACE_CAPABLE_INTEL          0xCD00


Additions to the EGL Specification

    Add to table 3.1 (EGLConfig attributes):

    Attribute			  Type     Description
    ----------------------------  -------  ---------------------------------
    EGL_NO_SURFACE_CAPABLE_INTEL  bitmask  EGLConfig supports making a context
                                           current with EGL_NO_SURFACE for
					   write and read surfaces.


    Additions to table 3.4, Default values and match criteria for
    EGLConfig attributes:

    Attribute                     Default         Selection Criteria Priority
    ----------------------------  --------------  ------------------ ---------
    EGL_NO_SURFACE_CAPABLE_INTEL  EGL_DONT_CARE   Mask


    Add to section 3.4, "Configuration Management"

    EGL_NO_SURFACE_CAPABLE_INTEL is a mask indicating the client APIs for
    which the config can be used to make a context current with no surfaces
    bound.  The valid bit settings are the same as for EGL_RENDERABLE_TYPE,
    shown in Table 3.3

    If the bit corresponding the to the client API a context was made for is
    set in EGL_NO_SURFACE_CAPABLE_INTEL, then the config can be used to make
    a context current with no surfaces bound.  This is done by passing
    EGL_NO_SURFACE for the read and write surfaces in the call to
    eglMakeCurrent.  This can only be supported for client APIs that provide
    a mechanism for configuring their own rendering targets, such as OpenGL
    framebuffer objects.

    The state of the context depends on the client API in use.
    Currently only GL APIs with framebuffer object support are
    supported and in this case the state it equivalent to having an
    incomplete framebuffer object bound.

Revision History

    June 3, 2010
        Initial draft (Kristian Høgsberg)


More information about the mesa-dev mailing list