blob: ab7f253a8c152efee5c2cc67215d22ac031775b2 [file] [log] [blame]
Name
KHR_gl_texture_2D_image
KHR_gl_texture_cubemap_image
KHR_gl_texture_3D_image
KHR_gl_renderbuffer_image
Name Strings
EGL_KHR_gl_texture_2D_image
EGL_KHR_gl_texture_cubemap_image
EGL_KHR_gl_texture_3D_image
EGL_KHR_gl_renderbuffer_image
Contributors
Aaftab Munshi
Barthold Lichtenbelt
Gary King
Jeff Juliano
Jon Leech
Jonathan Grant
Acorn Pooley
Contacts
Gary King, NVIDIA Corporation (gking 'at' nvidia.com)
Notice
Copyright (c) 2006-2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Status
Complete.
Approved by the Khronos Board of Promoters on February 11, 2008.
Version
Version 13, October 9, 2013
Number
EGL Extension #5
Dependencies
All extensions require EGL 1.2 and the EGL_KHR_image extension
These extensions are written against the wording of the EGL 1.2
Specification.
KHR_gl_texture_2D_image requires an OpenGL or OpenGL ES client API (any
version of either API).
KHR_gl_texture_cubemap_image requires an OpenGL or OpenGL ES client API
supporting texture cube maps, either in the core API or via extensions.
KHR_gl_texture_3D_image requires KHR_gl_texture_2D_image to be supported
by the EGL implementation. It also requires an OpenGL or OpenGL ES
client API supporting three-dimensional textures, either in the core API
or via extensions.
KHR_gl_renderbuffer_image requires KHR_gl_texture_2D_image to be
supported by the EGL implementation. It also requires an OpenGL or
OpenGL ES client API supporting renderbuffers, either in the core API or
via extensions.
Overview
The extensions specified in this document provide a mechanism for
creating EGLImage objects from OpenGL and OpenGL ES (henceforth referred
to collectively as 'GL') API resources, including two- and three-
dimensional textures, cube maps and render buffers. For an overview of
EGLImage operation, please see the EGL_KHR_image specification.
Due to the number of available extensions for the OpenGL ES 1.1 and
OpenGL ES 2.0 APIs, this document is organized as 4 separate extensions,
described collectively. These extensions are separated based on the
required underlying GL functionality (described in the dependencies
section).
New Types
None
New Procedures and Functions
None
New Tokens
Accepted in the <target> parameter of eglCreateImageKHR:
EGL_GL_TEXTURE_2D_KHR 0x30B1
Accepted as an attribute in the <attr_list> parameter of
eglCreateImageKHR:
EGL_GL_TEXTURE_LEVEL_KHR 0x30BC
Added by KHR_gl_texture_cubemap_image:
Accepted in the <target> parameter of eglCreateImageKHR:
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
Added by KHR_gl_texture_3D_image:
Accepted in the <target> parameter of eglCreateImageKHR:
EGL_GL_TEXTURE_3D_KHR 0x30B2
Accepted as an attribute in the <attr_list> parameter of
eglCreateImageKHR:
EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD
Added by KHR_gl_renderbuffer_image:
Accepted in the <target> parameter of eglCreateImageKHR:
EGL_GL_RENDERBUFFER_KHR 0x30B9
Additions to the EGL Image (EGL_KHR_image) Specification:
Add the following to Table aaa (Legal values for eglCreateImageKHR
<target> parameter), Section 2.5.1 (EGLImage Specification)
+-------------------------------------+---------------------------------+
| <target> | Notes |
+-------------------------------------+---------------------------------+
| EGL_GL_TEXTURE_2D_KHR | Used for GL 2D texture images |
+-------------------------------------+---------------------------------+
If KHR_gl_texture_cubemap_image is supported:
+-----------------------------------------+-----------------------------+
| <target> | Notes |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR | Used for the +X face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR | Used for the -X face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR | Used for the +Y face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR | Used for the -Y face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR | Used for the +Z face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
| EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR | Used for the -Z face of |
| | GL cubemap texture images |
+-----------------------------------------+-----------------------------+
If KHR_gl_texture_3D_image is supported:
+-------------------------------------+---------------------------------+
| <target> | Notes |
+-------------------------------------+---------------------------------+
| EGL_GL_TEXTURE_3D_KHR | Used for GL 3D texture images |
+-------------------------------------+---------------------------------+
If KHR_gl_renderbuffer_image is supported:
+-------------------------------------+---------------------------------+
| <target> | Notes |
+-------------------------------------+---------------------------------+
| EGL_GL_RENDERBUFFER_KHR | Used for GL renderbuffer images|
+-------------------------------------+---------------------------------+
Add the following to Table bbb (Legal attributes for eglCreateImageKHR
<attr_list> parameter), Section 2.5.1 (EGLImage Specification)
+---------------------------+-------------------------------+----------------------------+---------+
| | | Valid | Default |
| Attribute | Description | <target>s | Value |
+---------------------------+-------------------------------+----------------------------+---------+
| EGL_GL_TEXTURE_LEVEL_KHR | Specifies the mipmap level | EGL_GL_TEXTURE_2D_KHR, | 0 |
| | used as the EGLImage source. | EGL_GL_TEXTURE_CUBE_MAP_*, | |
| | Must be part of the complete | EGL_GL_TEXTURE_3D_KHR | |
| | texture object <buffer> | | |
+---------------------------+-------------------------------+----------------------------+---------+
If KHR_gl_texture_3D_image is supported:
+----------------------------+------------------------------+----------------------------+---------+
| | | Valid | Default |
| Attribute | Description | <target>s | Value |
+----------------------------+------------------------------+----------------------------+---------+
| EGL_GL_TEXTURE_ZOFFSET_KHR | Specifies the depth offset | EGL_GL_TEXTURE_3D_KHR | 0 |
| | of the image to use as the | | |
| | EGLImage source. Must be | | |
| | part of the complete texture| | |
| | object <buffer> | | |
+----------------------------+------------------------------+----------------------------+---------+
Insert the following text after paragraph 3 ("If <target> is
NATIVE_PIXMAP_KHR...") of Section 2.5.1 (EGLImage Specification)
"If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_3D_KHR,
EGL_GL_RENDERBUFFER_KHR,
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR,
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR,
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR,
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR,
EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR, or
EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR,
<dpy> must be a valid EGLDisplay,
and <ctx> must be a valid GL API context on that display.
If <target> is EGL_GL_TEXTURE_2D_KHR, <buffer> must be the name of a
nonzero, GL_TEXTURE_2D target texture object, cast into
the type EGLClientBuffer. <attr_list> should specify the mipmap level
which will be used as the EGLImage source (EGL_GL_TEXTURE_LEVEL_KHR); the
specified mipmap level must be part of <buffer>. If not specified, the
default value listed in Table bbb will be used, instead. Additional
values specified in <attr_list> are ignored. The texture must be complete
unless the mipmap level to be used is 0, the texture has mipmap level 0
specified, and no other mipmap levels are specified.
If <target> is one of the EGL_GL_TEXTURE_CUBE_MAP_* enumerants, <buffer>
must be the name of a cube-complete, nonzero, GL_TEXTURE_CUBE_MAP (or
equivalent in GL extensions) target texture object, cast into the type
EGLClientBuffer. <attr_list> should specify the mipmap level which will
be used as the EGLImage source (EGL_GL_TEXTURE_LEVEL_KHR); the specified
mipmap level must be part of <buffer>. If not specified, the default
value listed in Table bbb will be used, instead. Additional values
specified in <attr_list> are ignored. The texture must be cube-complete
unless the mipmap level to be used is 0, the texture has mipmap level 0
specified for all faces, and no other mipmap levels are specified for any
faces.
If <target> is EGL_GL_TEXTURE_3D_KHR, <buffer> must be the name of a
complete, nonzero, GL_TEXTURE_3D (or equivalent in GL extensions) target
texture object, cast
into the type EGLClientBuffer. <attr_list> should specify the mipmap
level (EGL_GL_TEXTURE_LEVEL_KHR) and z-offset (EGL_GL_TEXTURE_ZOFFSET_KHR)
which will be used as the EGLImage source; the specified mipmap level must
be part of <buffer>, and the specified z-offset must be smaller than the
depth of the specified mipmap level. If a value is not specified, the
default value listed in Table bbb will be used, instead. Additional
values specified in <attr_list> are ignored. The texture must be
complete unless the mipmap level to be used is 0, the texture has mipmap
level 0 specified, and no other mipmap levels are specified.
If <target> is EGL_GL_RENDERBUFFER_KHR, <buffer> must be the name of a
complete, nonzero, non-multisampled GL_RENDERBUFFER (or equivalent in
extensions) target object, cast into the type EGLClientBuffer. Values
specified in <attr_list> are ignored."
Add the following errors to the end of the list in Section 2.5.1 (EGLImage
Specification):
" * If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR,
EGL_GL_RENDERBUFFER_KHR or EGL_GL_TEXTURE_3D_KHR, and <dpy> is not a
valid EGLDisplay, the error EGL_BAD_DISPLAY is generated.
* If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR,
EGL_GL_RENDERBUFFER_KHR or EGL_GL_TEXTURE_3D_KHR, and <ctx> is not a
valid EGLContext, the error EGL_BAD_CONTEXT is generated.
* If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR,
EGL_GL_RENDERBUFFER_KHR or EGL_GL_TEXTURE_3D_KHR, and <ctx> is not a
valid GL context, or does not match the <dpy>, the error
EGL_BAD_MATCH is generated.
* If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR
or EGL_GL_TEXTURE_3D_KHR and <buffer> is not the name of a
texture object of type <target>, the error EGL_BAD_PARAMETER
is generated.
* If <target> is EGL_GL_RENDERBUFFER_KHR and <buffer> is not the
name of a renderbuffer object, or if <buffer> is the name of a
multisampled renderbuffer object, the error EGL_BAD_PARAMETER is
generated.
* If EGL_GL_TEXTURE_LEVEL_KHR is nonzero, <target> is
EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR or
EGL_GL_TEXTURE_3D_KHR, and <buffer> is not the name of a complete
GL texture object, the error EGL_BAD_PARAMETER is generated.
* If EGL_GL_TEXTURE_LEVEL_KHR is 0, <target> is
EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR or
EGL_GL_TEXTURE_3D_KHR, <buffer> is the name of an incomplete GL
texture object, and any mipmap levels other than mipmap level 0
are specified, the error EGL_BAD_PARAMETER is generated.
* If EGL_GL_TEXTURE_LEVEL_KHR is 0, <target> is
EGL_GL_TEXTURE_2D_KHR or EGL_GL_TEXTURE_3D_KHR, <buffer> is not
the name of a complete GL texture object, and mipmap level 0 is
not specified, the error EGL_BAD_PARAMETER is generated.
* If EGL_GL_TEXTURE_LEVEL_KHR is 0, <target> is
EGL_GL_TEXTURE_CUBE_MAP_*_KHR, <buffer> is not the name of a
complete GL texture object, and one or more faces do not have
mipmap level 0 specified, the error EGL_BAD_PARAMETER is
generated.
* If <target> is EGL_GL_TEXTURE_2D_KHR,
EGL_GL_TEXTURE_CUBE_MAP_*_KHR, EGL_GL_RENDERBUFFER_KHR or
EGL_GL_TEXTURE_3D_KHR and <buffer> refers to the default GL
texture object (0) for the corresponding GL target, the error
EGL_BAD_PARAMETER is generated.
* If <target> is EGL_GL_TEXTURE_2D_KHR, EGL_GL_TEXTURE_CUBE_MAP_*_KHR,
or EGL_GL_TEXTURE_3D_KHR, and the value specified in <attr_list>
for EGL_GL_TEXTURE_LEVEL_KHR is not a valid mipmap level for the
specified GL texture object <buffer>, the error EGL_BAD_MATCH is
generated.
* If <target> is EGL_GL_TEXTURE_3D_KHR, and the value specified in
<attr_list> for EGL_GL_TEXTURE_ZOFFSET_KHR exceeds the depth
of the specified mipmap level-of-detail in <buffer>, the error
EGL_BAD_PARAMETER is generated."
Issues
1. What should happen if an application attempts to create an
EGLImage from a default OpenGL object (i.e., objects with
a name of 0)?
SUGGESTION: Disallow this operation, and generate an error.
2. What happens when one of
glTexImage2D
glCopyTexImage2D
glCompressedTexImage2D
glTexImage3D
glCopyTexImage3D
glCompressedTexImage3D
is called on a texture which has a mipmap level which is an EGLImage
sibling?
RESOLVED: the EGLImage sibling is orphaned. The mipmap level and the
EGLImage no longer have any connection.
3. What happens when one of
glTexSubImage2D
glCopyTexSubImage2D
glCompressedTexSubImage2D
glTexSubImage3D
glCopyTexSubImage3D
glCompressedTexSubImage3D
is called on a texture which has a mipmap level which is an EGLImage
sibling?
RESOLVED: the EGLImage sibling is NOT orphaned. The mipmap level
remains an EGLImage sibling.
4. What happens when glGenerateMipmaps is called on a texture which has a
mipmap level which is an EGLImage sibling?
RESOLVED: If the texture is already complete, then the EGLImage
sibling is not orphaned, and the mipmap level remains an EGLImage
sibling. However, if the texture was not complete then the
EGLImage sibling IS orphaned. This is because the implementation
will implicitly alter the structure of the mipmap levels.
5. What happens when the GL_GENERATE_MIPMAP bit causes a texture to be
respecified.
RESOLVED: If the texture is already complete, then the EGLImage
sibling is not orphaned, and the mipmap level remains an EGLImage
sibling. However, if the texture was not complete then the
EGLImage sibling IS orphaned. This is because the implementation
will implicitly alter the structure of the mipmap levels.
6. Can an EGLImage be created from a multisampled GL image?
RESOLVED: NO. Attempting to create an EGLImage from a multisampled
GL renderbuffer is now an error. Attempting to create from a
multisampled OpenGL texture image is not possible because none of
the multisampled <target>s are supported.
7. Are all types of two-dimensional GL images which might
be associated with EGLImages allowed?
Not yet. We could add new variants of these extensions to support
other image types such as rectangular and 2D array slice textures,
but haven't yet seen a need to do so.
Revision History
#13 (Jon Leech, October 9, 2013) - Define interactions with and support for
OpenGL and OpenGL ES 3.0, in addition to OpenGL ES 1/2. Add issue 7 (Bug
10728).
#12 (Jon Leech, September 16, 2013) - Add error when specifying a
renderbuffer <target> and passing a multisampled renderbuffer object.
Add issue 6 describing lack of support for multisampled EGLImages (Bug
10728).
#11 (Jon Leech, June 26, 2013) - Add error when specifying a renderbuffer
<target> and not passing a renderbuffer object (Bug 10384).
#10 (Jon Leech, June 13, 2013) - Add a "Valid Targets" column to table bbb
for new attributes, matching proposed changes in EGL_KHR_image_base (Bug
10151).
#9 (Jon Leech, March 28, 2012)
- Fix spelling of *CUBE_MAP* tokens (from CUBEMAP) to agree with
eglext.h.
#8 (Jon Leech, February 4, 2009)
- Change "non-default ... texture object" to "nonzero".
#7 (Bruce Merry, January 20, 2009)
- Minor wording improvements on issues 4 and 5.
#6 (Acorn Pooley, January 13, 2009)
- Modify completion requirement so textures with only mipmap level 0 can
be EGLImage source siblings. Add issues 2-5.
#5 (Jon Leech, October 8, 2008)
- Updated status (approved as part of OpenKODE 1.0)
#4 (Jon Leech, April 7, 2007)
- Assigned enumerant values
- Added OpenKODE 1.0 Provisional disclaimer
#3 (December 14, 2006)
- Changed requirement to egl 1.2 to include EGLClientBuffer type.
- formatting to keep within 80 columns
- added error condition descriptions for <dpy> and <ctx>
- changed error condition for EGL_GL_TEXTURE_ZOFFSET_KHR too big to
be EGL_BAD_PARAMETER
#2 (November 27, 2006)
- Changed OES token to KHR