blob: ec123a98b313f7467710a6ef4c95171205e2b52e [file] [log] [blame]
Name
EXT_copy_image
Name Strings
GL_EXT_copy_image
Contact
Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com)
Contributors
Ian Stewart, NVIDIA
Graham Connor, Imagination
Ben Bowman, Imagination
Jonathan Putsman, Imagination
And the contributors to ARB_copy_image
Notice
Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Status
Complete.
Version
Last Modified Date: March 26, 2014
Revision: 5
Number
OpenGL ES Extension #175
Dependencies
OpenGL ES 3.0 is required.
This extension is written against the OpenGL ES 3.0 specification.
This extension interacts with EXT_texture_view.
This extension interacts with EXT_texture_buffer.
This extension interacts with EXT_texture_cube_map_array.
This extension interacts with EXT_texture_compression_s3tc.
This extension interacts with EXT_texture_compression_rgtc.
This extension interacts with EXT_texture_compression_bptc.
This extension interacts with KHR_texture_compression_astc_ldr.
This extension interacts with KHR_texture_compression_astc_hdr.
This extension interacts with OES_texture_compression_astc.
Overview
This extension enables efficient image data transfer between image
objects (i.e. textures and renderbuffers) without the need to bind
the objects or otherwise configure the rendering pipeline.
This is accomplised by adding a new entry-point CopyImageSubData,
which takes a named source and destination.
CopyImageSubData does not perform general-purpose conversions
such as scaling, resizing, blending, color-space, or format
conversions. It should be considered to operate in a manner
similar to a CPU memcpy, but using the GPU for the copy.
CopyImageSubData supports copies between images with different
internal formats, if the formats are compatible as described in
this extension.
CopyImageSubData also supports copying between compressed and
uncompressed images if the compressed block / uncompressed texel
sizes are the same.
New Procedures and Functions
void CopyImageSubDataEXT(
uint srcName, enum srcTarget, int srcLevel,
int srcX, int srcY, int srcZ,
uint dstName, enum dstTarget, int dstLevel,
int dstX, int dstY, int dstZ,
sizei srcWidth, sizei srcHeight, sizei srcDepth);
New Tokens
None
Additions to Chapter 4 of the OpenGL ES 3.0 Specification (Per-Fragment
Operations and the Framebuffer)
Append to section 4.3.3 (Copying Pixels):
The function
void CopyImageSubDataEXT(
uint srcName, enum srcTarget, int srcLevel,
int srcX, int srcY, int srcZ,
uint dstName, enum dstTarget, int dstLevel,
int dstX, int dstY, int dstZ,
sizei srcWidth, sizei srcHeight, sizei srcDepth);
may be used to copy a region of texel data between two image
objects. An image object may be either a texture or a
renderbuffer.
CopyImageSubData does not perform general-purpose conversions
such as scaling, resizing, blending, color-space, or format
conversions. It should be considered to operate in a manner
similar to a CPU memcpy. CopyImageSubData can copy between
images with different internal formats, provided
the formats are compatible.
CopyImageSubData also allows copying between certain
types of compressed and uncompressed internal formats as detailed
in Table 4.X.1. This copy does not perform on-the-fly compression
or decompression. When copying from an uncompressed internal format
to a compressed internal format, each texel of uncompressed data
becomes a single block of compressed data. When copying from a
compressed internal format to an uncompressed internal format,
a block of compressed data becomes a single texel of uncompressed
data. The texel size of the uncompressed format must be the same
size the block size of the compressed formats. Thus it is permitted
to copy between a 128-bit uncompressed format and a compressed
format which uses 8-bit 4x4 blocks, or between a 64-bit uncompressed
format and a compressed format which uses 4-bit 4x4 blocks.
INVALID_OPERATION is generated if the texel size of
the uncompressed image is not equal to the block size of the
compressed image.
The source object is identified by <srcName> and <srcTarget>.
Similarly the destination object is identified by <dstName> and
<dstTarget>. The interpretation of the name depends on the value
of the corresponding target parameter. If the target parameter is
RENDERBUFFER, the name is interpreted as the name of a
renderbuffer object. If the target parameter is a texture target,
the name is interpreted as a texture object. All
texture targets are accepted, with the exception of TEXTURE_BUFFER_EXT
and the cubemap face selectors described in table 3.17.
INVALID_ENUM is generated if either target is not RENDERBUFFER
or a valid texture target, or is TEXTURE_BUFFER, or is one
of the cubemap face selectors described in table 3.21, or if the
target does not match the type of the object. INVALID_OPERATION
is generated if either object is a texture and the texture is
not complete (as defined in section 3.8.13), if the source and
destination internal formats are not compatible (see below),
or if the number of samples do not match.
INVALID_VALUE is generated if either name does not correspond to a
valid renderbuffer or texture object according to the corresponding
target parameter.
<srcLevel> and <dstLevel> identify the source and destination
level of detail. For textures, this must be a valid level of
detail in the texture object. For renderbuffers, this value must
be zero. INVALID_VALUE is generated if the specified level is not
a valid level for the image.
<srcX>, <srcY>, and <srcZ> specify the lower left texel
coordinates of a <srcWidth>-wide by <srcHeight>-high by
<srcDepth>-deep rectangular subregion of the source texel array.
Similarly, <dstX>, <dstY> and <dstZ> specify the coordinates of a
subregion of the destination texel array. The source and destination
subregions must be contained entirely within the specified level of the
corresponding image objects.
The dimensions are always specified in texels, even for compressed
texture formats. But it should be noted that if only one of the
source and destination textures is compressed then the number of
texels touched in the compressed image will be a factor of the
block size larger than in the uncompressed image.
INVALID_VALUE is generated if the
dimensions of the either subregion exceeds the boundaries of the
corresponding image object, or if the image format is compressed
and the dimensions of the subregion fail to meet the alignment
constraints of the format.
If the source and destination images are identical, and the source
and destination rectangles overlap, the result of the operation is
undefined.
Slices of a TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY_EXT,
TEXTURE_3D and faces of TEXTURE_CUBE_MAP are all compatible provided
they share a compatible internal format, and multiple slices or faces
may be copied between these objects with a single call by specifying the
starting slice with <srcZ> and <dstZ>, and the number of slices to
be copied with <srcDepth>. Cubemap textures always have six faces
which are selected by a zero-based face index, according to the
order specified in table 3.21.
For the purposes of CopyImageSubData, two internal formats
are considered compatible if any of the following conditions are
met:
* the formats are the same,
* the formats are both listed in the same entry of Table 4.X.2, or
* one format is compressed and the other is uncompressed and
Table 4.X.1 lists the two formats in the same row.
If the formats are not compatible INVALID_OPERATION is generated.
------------------------------------------------------------------------------
| Texel / | Uncompressed | |
| Block | internal format | Compressed internal format |
| size | | |
------------------------------------------------------------------------------
| 128-bit | RGBA32UI, | COMPRESSED_RGBA_S3TC_DXT3_EXT, |
| | RGBA32I, | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, |
| | RGBA32F | COMPRESSED_RGBA_S3TC_DXT5_EXT, |
| | | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, |
| | | COMPRESSED_RG_RGTC2, |
| | | COMPRESSED_SIGNED_RG_RGTC2, |
| | | COMPRESSED_RGBA_BPTC_UNORM, |
| | | COMPRESSED_SRGB_ALPHA_BPTC_UNORM, |
| | | COMPRESSED_RGB_BPTC_SIGNED_FLOAT, |
| | | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT, |
| | | COMPRESSED_RGBA8_ETC2_EAC, |
| | | COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, |
| | | COMPRESSED_RG11_EAC, |
| | | COMPRESSED_SIGNED_RG11_EAC, |
| | | COMPRESSED_RGBA_ASTC_4x4_KHR, |
| | | COMPRESSED_RGBA_ASTC_5x4_KHR, |
| | | COMPRESSED_RGBA_ASTC_5x5_KHR, |
| | | COMPRESSED_RGBA_ASTC_6x5_KHR, |
| | | COMPRESSED_RGBA_ASTC_6x6_KHR, |
| | | COMPRESSED_RGBA_ASTC_8x5_KHR, |
| | | COMPRESSED_RGBA_ASTC_8x6_KHR, |
| | | COMPRESSED_RGBA_ASTC_8x8_KHR, |
| | | COMPRESSED_RGBA_ASTC_10x5_KHR, |
| | | COMPRESSED_RGBA_ASTC_10x6_KHR, |
| | | COMPRESSED_RGBA_ASTC_10x8_KHR, |
| | | COMPRESSED_RGBA_ASTC_10x10_KHR, |
| | | COMPRESSED_RGBA_ASTC_12x10_KHR, |
| | | COMPRESSED_RGBA_ASTC_12x12_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, |
| | | COMPRESSED_RGBA_ASTC_3x3x3_OES, |
| | | COMPRESSED_RGBA_ASTC_4x3x3_OES, |
| | | COMPRESSED_RGBA_ASTC_4x4x3_OES, |
| | | COMPRESSED_RGBA_ASTC_4x4x4_OES, |
| | | COMPRESSED_RGBA_ASTC_5x4x4_OES, |
| | | COMPRESSED_RGBA_ASTC_5x5x4_OES, |
| | | COMPRESSED_RGBA_ASTC_5x5x5_OES, |
| | | COMPRESSED_RGBA_ASTC_6x5x5_OES, |
| | | COMPRESSED_RGBA_ASTC_6x6x5_OES, |
| | | COMPRESSED_RGBA_ASTC_6x6x6_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES, |
| | | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES |
------------------------------------------------------------------------------
| 64-bit | RGBA16F, RG32F, | COMPRESSED_RGB_S3TC_DXT1_EXT, |
| | RGBA16UI, RG32UI, | COMPRESSED_SRGB_S3TC_DXT1_EXT, |
| | RGBA16I, RG32I, | COMPRESSED_RGBA_S3TC_DXT1_EXT, |
| | | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, |
| | | COMPRESSED_RED_RGTC1, |
| | | COMPRESSED_SIGNED_RED_RGTC1, |
| | | COMPRESSED_RGB8_ETC2, |
| | | COMPRESSED_SRGB8_ETC2, |
| | | COMPRESSED_R11_EAC, |
| | | COMPRESSED_SIGNED_R11_EAC, |
| | | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, |
| | | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 |
------------------------------------------------------------------------------
Table 4.X.1: Compatible internal formats for copying between
compressed and uncompressed internal formats with CopyImageSubDataEXT.
Formats in the same row can be copied between each other.
--------------------------------------------------------------------------
| Class | Internal formats |
--------------------------------------------------------------------------
| VIEW_CLASS_128_BITS | RGBA32F, RGBA32UI, RGBA32I |
--------------------------------------------------------------------------
| VIEW_CLASS_96_BITS | RGB32F, RGB32UI, RGB32I |
--------------------------------------------------------------------------
| VIEW_CLASS_64_BITS | RGBA16F, RG32F, RGBA16UI, RG32UI, |
| | RGBA16I, RG32I |
--------------------------------------------------------------------------
| VIEW_CLASS_48_BITS | RGB16F, RGB16UI, RGB16I |
--------------------------------------------------------------------------
| VIEW_CLASS_32_BITS | RG16F, R11F_G11F_B10F, R32F, |
| | RGB10_A2UI, RGBA8UI, RG16UI, R32UI, |
| | RGBA8I, RG16I, R32I, RGB10_A2, RGBA8, |
| | RGBA8_SNORM, SRGB8_ALPHA8, RGB9_E5 |
-------------------------------------------------------------------------
| VIEW_CLASS_24_BITS | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I |
--------------------------------------------------------------------------
| VIEW_CLASS_16_BITS | R16F, RG8UI, R16UI, RG8I, R16I, RG8, |
| | RG8_SNORM |
--------------------------------------------------------------------------
| VIEW_CLASS_8_BITS | R8UI, R8I, R8, R8_SNORM |
--------------------------------------------------------------------------
| VIEW_CLASS_RGTC1_RED | COMPRESSED_RED_RGTC1_EXT, |
| | COMPRESSED_SIGNED_RED_RGTC1_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_RGTC2_RG | COMPRESSED_RG_RGTC2_EXT, |
| | COMPRESSED_SIGNED_RG_RGTC2_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_BPTC_UNORM | COMPRESSED_RGBA_BPTC_UNORM_EXT, |
| | COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_BPTC_FLOAT | COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, |
| | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_S3TC_DXT1_RGB | COMPRESSED_RGB_S3TC_DXT1_EXT, |
| | COMPRESSED_SRGB_S3TC_DXT1_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_S3TC_DXT1_RGBA | COMPRESSED_RGBA_S3TC_DXT1_EXT, |
| | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_S3TC_DXT3_RGBA | COMPRESSED_RGBA_S3TC_DXT3_EXT, |
| | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_S3TC_DXT5_RGBA | COMPRESSED_RGBA_S3TC_DXT5_EXT, |
| | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT |
--------------------------------------------------------------------------
| VIEW_CLASS_EAC_R11 | COMPRESSED_R11_EAC, |
| | COMPRESSED_SIGNED_R11_EAC |
--------------------------------------------------------------------------
| VIEW_CLASS_EAC_RG11 | COMPRESSED_RG11_EAC, |
| | COMPRESSED_SIGNED_RG11_EAC |
--------------------------------------------------------------------------
| VIEW_CLASS_ETC2_RGB | COMPRESSED_RGB8_ETC2, |
| | COMPRESSED_SRGB8_ETC2 |
--------------------------------------------------------------------------
| VIEW_CLASS_ETC2_RGBA | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, |
| | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 |
--------------------------------------------------------------------------
| VIEW_CLASS_ETC2_EAC_RGBA | COMPRESSED_RGBA8_ETC2_EAC, |
| | COMPRESSED_SRGB8_ALPHA8_ETC2_EAC |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_4x4_RGBA | COMPRESSED_RGBA_ASTC_4x4_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_5x4_RGBA | COMPRESSED_RGBA_ASTC_5x4_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_5x5_RGBA | COMPRESSED_RGBA_ASTC_5x5_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_6x5_RGBA | COMPRESSED_RGBA_ASTC_6x5_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_6x6_RGBA | COMPRESSED_RGBA_ASTC_6x6_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_8x5_RGBA | COMPRESSED_RGBA_ASTC_8x5_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_8x6_RGBA | COMPRESSED_RGBA_ASTC_8x6_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_8x8_RGBA | COMPRESSED_RGBA_ASTC_8x8_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_10x5_RGBA | COMPRESSED_RGBA_ASTC_10x5_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_10x6_RGBA | COMPRESSED_RGBA_ASTC_10x6_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_10x8_RGBA | COMPRESSED_RGBA_ASTC_10x8_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_10x10_RGBA | COMPRESSED_RGBA_ASTC_10x10_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_12x10_RGBA | COMPRESSED_RGBA_ASTC_12x10_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_12x12_RGBA | COMPRESSED_RGBA_ASTC_12x12_KHR, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_3x3x3_RGBA | COMPRESSED_RGBA_ASTC_3x3x3_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_4x3x3_RGBA | COMPRESSED_RGBA_ASTC_4x3x3_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_4x4x3_RGBA | COMPRESSED_RGBA_ASTC_4x4x3_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_4x4x4_RGBA | COMPRESSED_RGBA_ASTC_4x4x4_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_5x4x4_RGBA | COMPRESSED_RGBA_ASTC_5x4x4_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_5x5x4_RGBA | COMPRESSED_RGBA_ASTC_5x5x4_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_5x5x5_RGBA | COMPRESSED_RGBA_ASTC_5x5x5_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_6x5x5_RGBA | COMPRESSED_RGBA_ASTC_6x5x5_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_6x6x5_RGBA | COMPRESSED_RGBA_ASTC_6x6x5_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES |
--------------------------------------------------------------------------
| VIEW_CLASS_ASTC_6x6x6_RGBA | COMPRESSED_RGBA_ASTC_6x6x6_OES, |
| | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES |
--------------------------------------------------------------------------
Table 4.X.2: Compatible internal formats for CopyImageSubDataEXT.
Formats in the same entry may be copied between each other.
[[Note that if texture_view is supported, this table should
be replaced with a reference to Table 3.X.2 from that extension.]]
If the internal format does not exactly match the internal format of the
original texture, the contents of the memory are reinterpreted in the same
manner as for image bindings described in section 3.8.X (Texture Image
Loads and Stores).
Dependencies on EXT_texture_view:
As written, this extension incorporates some of the "view class"
terminology that is introduced by EXT_texture_view. However this is
only enough to define the equivalence classes and does not actually
imply the texture view capability.
If EXT_texture_view is supported, Table 4.X.2 should be replaced with
a reference to Table 3.X.2 from that extension instead.
Dependencies on EXT_texture_buffer
If EXT_texture_buffer is not supported, then remove all references
to TEXTURE_BUFFER_EXT.
Dependencies on EXT_texture_cube_map_array
If EXT_texture_cube_map_array is not supported, then remove all references
to TEXTURE_CUBE_MAP_ARRAY_EXT.
Dependencies on EXT_texture_compression_s3tc
If EXT_texture_compression_s3tc is not supported, remove any
references to S3TC compressed texture formats.
Dependencies on EXT_texture_compression_rgtc
If EXT_texture_compression_rgtc is not supported, remove any
references to the RGTC compressed texture formats.
Dependencies on EXT_texture_compression_bptc
If EXT_texture_compression_bptc is not supported, remove any
references to the PBTC compressed texture formats.
Dependencies on KHR_texture_compression_astc_ldr
If KHR_texture_compression_astc_ldr is not supported, remove any
references to the ASTC LDR compressed texture formats.
Dependencies on KHR_texture_compression_astc_hdr
If KHR_texture_compression_astc_hdr is not supported, remove any
references to the ASTC HDR compressed texture formats.
Dependencies on OES_texture_compression_astc
If OES_texture_compression_astc is not supported, remove any
references to the ASTC 3D compressed texture formats.
Errors
CopyImageSubDataEXT may fail with any of the following errors:
INVALID_ENUM is generated
* if either <srcTarget> or <dstTarget>
- is not RENDERBUFFER or a valid non-proxy texture target
- is TEXTURE_BUFFER, or
- is one of the cubemap face selectors described in table 3.17,
* if the target does not match the type of the object.
INVALID_OPERATION is generated
* if either object is a texture and the texture is not complete,
* if the source and destination formats are not compatible,
* if the source and destination number of samples do not match,
* if one image is compressed and the other is uncompressed and the
block size of compressed image is not equal to the texel size
of the compressed image.
INVALID_VALUE is generated
* if either <srcName> or <dstName> does not correspond to a valid
renderbuffer or texture object according to the corresponding
target parameter, or
* if the specified level is not a valid level for the image, or
* if the dimensions of the either subregion exceeds the boundaries
of the corresponding image object, or
* if the image format is compressed and the dimensions of the
subregion fail to meet the alignment constraints of the format.
Sample Code
TBD
Issues
Note: these issues apply specifically to the definition of
EXT_copy_image, which is based on the OpenGL ARB_copy_image extension
as updated by OpenGL 4.4. Resolved issues from ARB_copy_image have
been removed but remain largely applicable to this extension. That
extension can be found in the OpenGL Registry.
(1) What functionality was removed from ARB_copy_image?
- removed mention of proxy textures, TEXTURE_1D_ARRAY target
- removed mention of RGBA16, RGBA16_SNORM texture formats
- removed compatibility profile interactions and negative borders
(2) What functionality was changed or added relative to ARB_copy_image?
- added compatibility class definition to avoid texture_view dependency
- added ability to copy to/from ETC2/EAC formats and uncompressed formats
- added ability to copy between ETC2/EAC formats that are compatible
- added ability to copy to/from ASTC formats and uncompressed formats
- added ability to copy between ASTC formats that are compatible
(3) Is copying from/to images with ETC2/EAC compressed texture formats
defined?
RESOLVED: Yes. This extension adds support for copying between ETC2/EAC
compressed texture formats that belong to the same view class. It also
adds the ability to copy between uncompressed texture formats and
compressed ETC2/EAC texture formats and in a similar fashion the other
compressed formats. This was requirement was not added to GL 4.x,
because at the time GL 4.x HW did not natively support ETC2/EAC compressed
textures, and thus it was expected that they may be uncompressed or
transcoded. It is expected that this may be a very useful capability
for mobile parts and so this capability is included here. For GL 4.x
hardware that wishes to expose this capability, it will need to
transparently handle these copies as if the compressed formats where
natively supported.
(4) Is copying from/to images with ASTC compressed texture formats
defined?
RESOLVED. Yes, as in issue 3. Any of the ASTC LHR, HDR, or 3D formats
that are supported may be copied within their compatibility class.
(5) What is the behavior when the source and destination images are the
same?
RESOLVED: This was also not stated in GL 4.4, ARB_copy_image or
NV_copy_image. This was clarified to be undefined behaviour in Bug 11355.
We follow that resolution here.
(6) Should the R16, RG16, RGB16, and RGBA16 (and _SNORM) texture formats
be supported?
RESOLVED. No. OpenGL ES 3.0 does not support these formats. They were
considered for late addition to OpenGL ES 3.1 in Bug 11366, but didn't
make the cut. In the absence of another extension to add them, they
are not supported here either.
Revision History
Rev. Date Author Changes
---- ---------- -------- -----------------------------------------
5 03/26/2014 dkoch Update contributors.
4 03/10/2014 Jon Leech Change suffix to EXT.
3 02/12/2013 dkoch Resolved issue 6.
2 12/18/2013 dkoch Finish the compressed texture interactions.
Adding support for ETC2/EAC and ASTC textures.
Eliminate the dependency on EXT_texture_view.
Add language for source and destination overlap.
Resolved issues 3,4,5. Added issue 6.
1 12/02/2013 dkoch Initial revision based on ARB_copy_image rev 4.