blob: f0223a643c72e3c341baf320b276cb1e9e1524d1 [file] [log] [blame]
Name
EXT_gl_colorspace_display_p3_passthrough
Name Strings
EGL_EXT_gl_colorspace_display_p3_passthrough
Contributors
Chris Forbes
Courtney Goeltzenleuchter
Contact
Courtney Goeltzenleuchter (courtneygo 'at' google.com)
IP Status
No known IP claims.
Status
Draft
Version
Version 1 - Dec 4, 2018
Number
EGL Extension #130
Extension Type
EGL display extension
Dependencies
This extension is written against the wording of the EGL 1.5
specification (August 27, 2014).
This extension requires EGL_KHR_gl_colorspace.
Overview
Applications that want to use the Display-P3 color space (DCI-P3 primaries
with sRGB-like transfer function) can use this extension to
communicate to the platform that framebuffer contents represent colors in
the non-linear Display-P3 color space.
The application is responsible for producing appropriate framebuffer
contents. An application would want to use this extension rather than
EGL_EXT_gl_colorspace_display_p3 if they apply the sRGB transfer function
themselves and do not need the HW to do it.
New Procedures and Functions
None.
New Tokens
Accepted as attribute values for EGL_GL_COLORSPACE by
eglCreateWindowSurface, eglCreatePbufferSurface and eglCreatePixmapSurface:
[[ If EGL_EXT_gl_colorspace_display_p3_linear is supported ]]
EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490
Modifications to the EGL 1.5 Specification
Insert below text in the 3rd paragraph on page 33 in 3.5.1 "Creating On-
Screen Rendering Surfaces, before "The default value of EGL_GL_COLORSPACE
is EGL_GL_COLORSPACE_LINEAR.":
[[ If EGL_EXT_gl_colorspace_display_p3_passthrough is supported ]]
If its value is EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT, then a
non-linear, sRGB encoded Display-P3 color space is assumed, with a
corresponding GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING value of GL_LINEAR.
The application is responsible for applying the appropriate transfer
function when writing and reading pixels.
Insert below text after the 4th paragraph on the same page:
Note that the EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT attribute
indicates that a colorspace of Display P3 will be communicated to the
Window system. While EGL itself is color space agnostic, the surface
will eventually be presented to a display device with specific color
reproduction characteristics. If any color space transformations are
necessary before an image can be displayed, the color space of the
presented image must be known to the window system.
Errors
Modify below error in the "Errors" section on page 34:
"If config does not support the OpenVG colorspace or alpha format at-
tributes specified in attrib list (as defined for eglCreatePlatformWindow-
Surface), an EGL_BAD_MATCH error is generated."
To include OpenGL colorspace as well:
"If config does not support the OpenGL colorspace, the OpenVG colorspace or
alpha format attributes specified in attrib list (as defined for eglCreate-
PlatformWindowSurface), an EGL_BAD_MATCH error is generated."
Issues
1. When creating an EGL surface, what happens when the specified colorspace
is not compatible with or supported by the EGLConfig?
RESOLVED: There is currently no way to query the compatibility of a
EGLConfig and colorspace pair. So the only option is to define an error
case similar to that of OpenVG colorspace, i.e. if config does not
support the colorspace specified in attrib list (as defined for egl-
CreateWindowSurface, eglCreatePbufferSurface and eglCreatePixmapSurface),
an EGL_BAD_MATCH error is generated.
2. Why the new enum instead of DISPLAY_P3_EXT + EXT_srgb_write_control?
RESOLVED:
We want to rely on "surface state" rather than a "context state", e.g.
EXT_srgb_write_control is global where we only want behavior to apply to
specific surface.
3. Should sRGB framebuffer support affect the pixel path?
RESOLVED: No.
sRGB rendering is defined by GL/GLES. Specifically, glReadPixels and
other pixel paths operations are not affected by sRGB rendering. But
glBlitFramebuffer is. Though, of course, if this extension were to
apply it would be a no-op.
Revision History
Version 1, 2018/12/04
- Internal revisions