blob: c776fe2080aafc66dcab4045a41196610276efb7 [file] [log] [blame]
Name
EXT_no_config_context
Name Strings
GLX_EXT_no_config_context
Contributors
Adam Jackson
Kyle Brenneman
James Jones
Alex Goins
This extension is derived from EGL_KHR_no_config_context, whose
contributors include:
Etay Meiri
Alon Or-bach
Jeff Vigil
Ray Smith
Michael Gold
James Jones
Daniel Kartch
Adam Jackson
Jon Leech
Contact
Adam Jackson <ajax@redhat.com>
IP Status
No known IP claims.
Status
Complete.
Version
Version 6, 2017/12/05
Dependencies
GLX_ARB_create_context is required.
Interacts with GLX_ARB_fbconfig_float.
Interacts with GLX_EXT_fbconfig_packed_float.
This extension is written against the GLX 1.4 Specification.
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 GLX context
creation is done with respect to a GLXFBConfig specifying buffer formats,
and constrains contexts to only work with drawables created with a
"compatible" config.
This extension allows creation of GL & ES contexts without specifying a
GLXFBConfig.
New Procedures and Functions
None.
New Tokens
None.
Additions to the GLX_ARB_create_context Specification
To the paragraph beginning "If glXCreateContextAttribsARB succeeds",
append:
"If <config> is NULL, the context will be created without reference to a
config. In this case, the attribute list must include GLX_SCREEN, naming
the screen for the context; if GLX_SCREEN is not specified, or
GLX_RENDER_TYPE is specified, BadValue is generated."
Additions to the GLX 1.4 Specification
In section 2.1 "Rendering Contexts and Drawing Surfaces", modify the
5th paragraph:
"A rendering context can be used with any GLXDrawable that it is
compatible with (subject to the restrictions discussed in the section on
address space and the restrictions discussed under glXCreatePixmap). A
drawable and context are compatible if either of the following sets of
conditions are true:
* The context was created with NULL GLXFBConfig
* The drawable and context are on the same screen
or:
[...]"
Append a new paragraph to the end of section 2.1 "Rendering Contexts
and Drawing Surfaces":
"If NULL was specified as the GLXFBConfig at creation, the resulting
context is said to be created <without reference to a config>. In this
case, the context must pass the required conformance tests for the version
of OpenGL/OpenGL ES it supports, and must support being made current
without a drawable. 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. Such contexts are compatible with any drawable on the
same screen, though the version of OpenGL or OpenGL ES in use may impose
further restrictions. For example, forward-compatible OpenGL 3.0 contexts
can not render to color index drawables, even if color index GLXFBConfigs
are available."
In section 3.3.7 "Rendering Contexts" in the discussion of glXQueryContext,
to the paragraph beginning "The values and types", append:
"If the context was created without reference to a config, the value
of GLX_RENDER_TYPE will be GLX_DONT_CARE, and the values of
GLX_FBCONFIG_ID and GLX_VISUAL_ID_EXT will be None."
Interactions with GLX_ARB_fbconfig_float
A context created without reference to a config may be used to render to
drawables whose config has GLX_RGBA_FLOAT_BIT_ARB set.
Interactions with GLX_EXT_fbconfig_packed_float
A context created without reference to a config may be used to render to
drawables whose config has GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT set.
Errors
No new error types are added.
GLX Protocol
No new requests are added.
For GLXCreateContextAttribsARB, normally the client library derives the
<screen> field in the request from the specified fbconfig. When the
fbconfig is NULL, the GLX_SCREEN attribute and the <screen> field must
match, or BadValue is generated. This implies that the client library is
responsible for pulling the screen number out of the attribute list, since
glXCreateContextAttribsARB does not have an explicit screen parameter.
Issues
1) Should non-conformant no-config contexts be allowed to be created?
RESOLVED: No. We are not encouraging non-conformant contexts. This is
not a change, in the sense that CreateContextAttribs already does not
accept GLX_NON_CONFORMANT_CONFIG as an attribute.
What is required is: a no-context config bound to a drawable whose
config is conformant, or to no drawable, must be conformant.
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 context without a drawable. This implies that they
don't need to know drawable attributes at context creation time.
In principle, equivalent functionality could be possible with ES 1.x +
OES_surfaceless_context. This extension makes no promises about that. An
implementation wishing to reliably support this combination, or a similarly
permissive combination for GL < 3.0, should indicate so with an additional
GLX extension.
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 glXMakeCurrent 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 glXMakeCurrent alter the GL_DRAW_BUFFER and GL_READ_BUFFER state of
the default framebuffer?
RESOLVED: Yes, but only on the first call to glXMakeCurrent. 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 glXMakeCurrent the
GL_DRAW_BUFFER and GL_READ_BUFFER are set to: GL_NONE if the drawable is
NULL, GL_BACK if the drawable is double buffered, GL_FRONT if the drawable
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 a glXCreateGenericContext which is the same as
glXCreateContext but without the config parameter?
RESOLVED: No.
6) Can no-config contexts share state with contexts that have a config?
RESOLVED: Yes, to the extent that the implementation would allow such
sharing if the contexts had the same config and compatible attributes.
GLX_ARB_create_context has this to say about the <share_context> parameter:
"* If the server context state for <share_context> exists in an address
space that cannot be shared with the newly created context, if
<share_context> was created on a different screen than the one
referenced by <config>, or if the contexts are otherwise incompatible
(for example, one context being associated with a hardware device
driver and the other with a software renderer), BadMatch is generated."
For this extension, "otherwise incompatible" might include mismatched GL
or ES versions, or versions that do not support making a context current
without a drawable. (This list is not intended to be exhaustive.)
Other extensions like GLX_ARB_create_context_no_error and
GLX_ARB_create_context_robustness place additional restrictions on
share context compatibility; this extension does not relax them.
7) What drawable types can be made current with a no-config context?
RESOLVED: Any drawable created relative to a supported config can be made
current with a no-config context.
8) Can you create a no-config context with glXCreate{,New}Context?
RESOLVED: No. GLX contexts are per-screen. Although the corresponding
requests include the screen number, there is no way to specify it from
the function signature, the client library derives it from the visual
or the fbconfig. Only glXCreateContextAttribsARB is expressive enough.
9) Can you specify a no-config context with a specific GLX_RENDER_TYPE?
RESOLVED: No. It might be possible to implement, but there seems to be
little point.
Revision History
Version 7, 2017/12/05 (Adam Jackson)
- Mark complete.
Version 6, 2017/10/04 (Adam Jackson)
- Clarify the float fbconfig extension interaction language
Version 5, 2017/10/03 (Adam Jackson)
- s/GLX_NO_CONFIG_EXT/NULL/
- s/surface/drawable/
- Plain GL 3.0 doesn't fully drop color index, forward-compatible 3.0 does
- Clarify the interaction with non-conformant configs
- Reword references to "client API", which is an EGLism
- Add disclaimers about creating or sharing state with ES1 or GL<3 contexts
- Miscellaneous typo fixes
Version 4, 2017/09/26 (Adam Jackson)
- Tighten the GLX protocol to require the two screen numbers to match
Version 3, 2017/09/21 (Adam Jackson)
- Restrict no-config contexts to glXCreateContextAttribsARB
- Add the GLX_VISUAL_ID_EXT case to glXQueryContext
- Forbid no-config contexts with a specific render type
- Get the screen from the attribute list not the <screen> request field
Version 2, 2017/09/21 (Adam Jackson)
- Add the GLX_FBCONFIG_ID case to glXQueryContext
- Document the GLX protocol encoding
Version 1, 2017/09/20 (Adam Jackson)
- Clone from version 9 of EGL_KHR_no_config_context