| Name |
| |
| KHR_no_config_context |
| |
| Name Strings |
| |
| EGL_KHR_no_config_context |
| |
| Contributors |
| |
| Etay Meiri |
| Alon Or-bach |
| Jeff Vigil |
| Ray Smith |
| Michael Gold |
| James Jones |
| Daniel Kartch |
| Adam Jackson |
| Jon Leech |
| |
| Contact |
| |
| Etay Meiri (etay.meiri 'at' intel.com) |
| |
| IP Status |
| |
| No known IP claims. |
| |
| Status |
| |
| Approved by the EGL Working Group on April 27, 2016 |
| |
| Approved by the Khronos Board of Promoters on July 22, 2016 |
| |
| Version |
| |
| Version 9, 2016/09/08 |
| |
| Number |
| |
| EGL Extension #101 |
| |
| Extension Type |
| |
| EGL display extension |
| |
| Dependencies |
| |
| EGL 1.4 is required. This extension is written against the EGL 1.5 |
| Specification of August 27, 2014. |
| |
| Some of the capabilities of these extensions are only available when |
| creating OpenGL or OpenGL ES contexts supporting specific versions or |
| capabilities. All such restrictions are documented in the body of this |
| extension specification. |
| |
| Overview |
| |
| Modern GPUs allow contexts to render to almost any combination of |
| supported color and auxiliary buffer formats. Traditionally EGL context |
| creation is done with respect to an EGLConfig specifying buffer formats, |
| and constrains contexts to only work with surfaces created with a |
| "compatible" config. |
| |
| This extension allows creation of GL & ES contexts without specifying an |
| EGLConfig. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted as the <config> parameter of eglCreateContext: |
| |
| EGL_NO_CONFIG_KHR ((EGLConfig)0) |
| |
| Additions to the EGL 1.5 Specification |
| |
| Modify the 3rd paragraph of section 2.2 "Rendering Contexts and |
| Drawing Surfaces": |
| |
| "Surfaces and contexts are both created with respect to an EGLConfig. |
| The EGLConfig describes the depth of the color buffer components and |
| the types, quantities and sizes of the ancillary buffers (i.e., the |
| depth, multisample, and stencil buffers). It is also possible to |
| create a context without using an EGLConfig, by specifying relevant |
| parameters at creation time (see sections 3.5 and 3.7, respectively)." |
| |
| Modify the sixth paragraph of section 2.2: |
| |
| "A context can be used with any EGLSurface that it is <compatible> |
| with (subject to the restrictions discussed in the section on |
| address space). A context and surface are compatible if they were |
| created with respect to the same EGLDisplay, and if either of the |
| following sets of conditions apply: |
| |
| * The context was created without an EGLConfig. Such contexts match |
| any valid EGLSurface. |
| |
| or, |
| |
| * The context and surface support the same type of color buffer |
| (RGB or luminance). |
| |
| * They have color buffers and ancillary buffers of the same depth. |
| |
| ... replicate remainder of this bullet point ... |
| |
| As long as the compatibility constraint and the address space ..." |
| |
| Insert a new paragraph after paragraph 3 in section 3.7.1 "Creating |
| Rendering Contexts" on p. 51: |
| |
| "<config> specifies an EGLConfig defining properties of the context. If |
| <config> is EGL_NO_CONFIG_KHR, the resulting context is said to be |
| created <without reference to an EGLConfig>. In this case, the context |
| must pass the required conformance tests for that client API and must |
| support being made current without a rendering surface. Such support is |
| guaranteed for OpenGL ES 2.0 implementations supporting the |
| GL_OES_surfaceless_context extension, OpenGL ES 3.0 and later versions |
| of OpenGL ES, and OpenGL 3.0 and later versions of OpenGL. Support for |
| other versions and other client APIs is implementation dependent." |
| |
| Replace the EGL_BAD_CONFIG error for eglCreateContext on p. 56, and add |
| a new errors: |
| |
| "* An EGL_BAD_CONFIG error is generated if <config> is neither |
| EGL_NO_CONFIG_KHR nor a valid <config>. |
| |
| * An EGL_BAD_MATCH error is generated if <config> is EGL_NO_CONFIG_KHR, |
| and the requested client API type and version do not support being |
| made current without a rendering surface. |
| |
| * An EGL_BAD_MATCH error is generated if <config> is EGL_NO_CONFIG_KHR, |
| and the implementation does not support the requested client API and |
| version." |
| |
| Modify the first error for eglMakeCurrent in the list on p. 58: |
| |
| "* An EGL_BAD_MATCH error is generated if <draw> or <read> are not |
| compatible with <ctx>, as described in section 2.2." |
| |
| Modify the description of eglQueryContext in section 3.7.4 on p. 63: |
| |
| "Querying EGL_CONFIG_ID returns the ID of the EGLConfig with respect |
| to which the context was created, or zero if created without |
| respect to an EGLConfig." |
| |
| Errors |
| |
| As described in the body of the extension above. |
| |
| Conformance Tests |
| |
| None |
| |
| Sample Code |
| |
| None |
| |
| Dependencies On EGL 1.4 |
| |
| If implemented on EGL 1.4, interactions with EGL 1.5-specific features |
| are removed. |
| |
| Issues |
| |
| 1) Should non-conformant no-config contexts be allowed to be created? |
| |
| RESOLVED: No. We are not encouraging non-conformant contexts. |
| |
| 2) Are no-config contexts constrained to those GL & ES implementations |
| which can support them? |
| |
| RESOLVED: Yes. ES2 + OES_surfaceless_context, ES 3.0, and GL 3.0 all |
| support binding a surface without a context. This implies that they |
| don't need to know surface attributes at context creation time. |
| |
| 3) For an OpenGL or OpenGL ES context created with no config, what is the |
| initial state of GL_DRAW_BUFFER and GL_READ_BUFFER for the default |
| framebuffer? |
| |
| RESOLVED: This is an implementation detail rather than a spec issue. |
| glReadBuffer/glDrawBuffer have undefined results if called without a |
| current context. The GL_DRAW_BUFFER and GL_READ_BUFFER are set on the |
| first eglMakeCurrent call and can be updated in glReadBuffer and |
| glDrawBuffers calls after that. Therefore, the attribute value with |
| which the context is created is irrelevant from the point of view of the |
| spec and is left up to the implementation. |
| |
| 4) Can eglMakeCurrent alter the GL_DRAW_BUFFER and GL_READ_BUFFER state of |
| the default framebuffer? |
| |
| RESOLVED: Yes, but only on the first call to eglMakeCurrent. The two |
| relevant excerpts from the OpenGL 3.2 Core Profile Specification. |
| From Section 4.2.1 Selecting a Buffer for Writing: |
| |
| For the default framebuffer, in the initial state the draw buffer |
| for fragment color zero is BACK if there is a back buffer; FRONT if |
| there is no back buffer; and NONE if no default framebuffer is |
| associated with the context. |
| |
| From 4.3.3 Pixel Draw/Read State: |
| |
| For the default framebuffer, in the initial state the read buffer is |
| BACK if there is a back buffer; FRONT if there is no back buffer; |
| and NONE if no default framebuffer is associated with the context. |
| |
| Based on the above excerpts on the first call to eglMakeCurrent the |
| GL_DRAW_BUFFER and GL_READ_BUFFER are set to: GL_NONE if the surface is |
| NULL, GL_BACK if the surface is double buffered, GL_FRONT if the surface |
| is single buffered. Following calls to glReadBuffer and glDrawBuffers |
| change the GL_DRAW_BUFFER and GL_READ_BUFFER attributes and these values |
| persist even when the application change the current context. |
| |
| 5) Should we add an eglCreateGenericContext which is the same as |
| eglCreateContext but without the config parameter? |
| |
| RESOLVED: No. |
| |
| 6) Can no-config contexts share state with contexts that has a config? |
| |
| RESOLVED: Yes. This extension implies that the dependency of the context |
| on the config is quite minimal so no restriction w.r.t sharing should be |
| enforced. |
| |
| 7) What surface types can be made current with a no-config context? |
| |
| RESOLVED: any surface type supported by the implementation can be made |
| current with a no-config context. |
| |
| Revision History |
| |
| Version 9. 2016/09/08 (Jon Leech) - Modify cast of EGL_NO_CONFIG_KHR to |
| (EGLConfig) per bug 15473. |
| |
| Version 8. 2016/08/09 (Jon Leech) - Assign extension number, reflow |
| text, and publish. |
| |
| Version 7. 2016/05/09 - Recorded vote at working group and sent to |
| Promoters for ratification. |
| |
| Version 6. 2016/04/27 - Updated issue #6. Added an EGL_BAD_MATCH case to |
| eglCreateContext. |
| |
| Version 5. 2016/04/20 - White space cleanup. Added extension type. |
| Cleaned up issues #1, #2, #4 and #6. |
| |
| Version 4. 2016/03/24 - Added a list of contributers. Fixed resolution |
| of issue #3 and #4. |
| |
| Version 3. 2016/03/10 - removed restriction to window surfaces only. |
| Removed comment on EGL_RENDERABLE_TYPE. Resolved issues 3 and 4. Added |
| issue 7. |
| |
| Version 2, 2016/03/09 - querying EGL_CONFIG_ID on a context created |
| without a config returns zero. Contexts created without a config can |
| share state with contexts which were created with a config. |
| |
| Version 1, 2016/01/27 - branch from draft EGL_KHR_no_config specification. |