• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    EXT_copy_image
4
5Name Strings
6
7    GL_EXT_copy_image
8
9Contact
10
11    Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com)
12
13Contributors
14
15    Ian Stewart, NVIDIA
16    Graham Connor, Imagination
17    Ben Bowman, Imagination
18    Jonathan Putsman, Imagination
19    And the contributors to ARB_copy_image
20
21Notice
22
23    Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at
24        http://www.khronos.org/registry/speccopyright.html
25
26Status
27
28    Complete.
29
30Version
31
32    Last Modified Date: March 26, 2014
33    Revision: 5
34
35Number
36
37    OpenGL ES Extension #175
38
39Dependencies
40
41    OpenGL ES 3.0 is required.
42
43    This extension is written against the OpenGL ES 3.0 specification.
44
45    This extension interacts with EXT_texture_view.
46
47    This extension interacts with EXT_texture_buffer.
48
49    This extension interacts with EXT_texture_cube_map_array.
50
51    This extension interacts with EXT_texture_compression_s3tc.
52
53    This extension interacts with EXT_texture_compression_rgtc.
54
55    This extension interacts with EXT_texture_compression_bptc.
56
57    This extension interacts with KHR_texture_compression_astc_ldr.
58
59    This extension interacts with KHR_texture_compression_astc_hdr.
60
61    This extension interacts with OES_texture_compression_astc.
62
63Overview
64
65    This extension enables efficient image data transfer between image
66    objects (i.e. textures and renderbuffers) without the need to bind
67    the objects or otherwise configure the rendering pipeline.
68
69    This is accomplised by adding a new entry-point CopyImageSubData,
70    which takes a named source and destination.
71
72    CopyImageSubData does not perform general-purpose conversions
73    such as scaling, resizing, blending, color-space, or format
74    conversions. It should be considered to operate in a manner
75    similar to a CPU memcpy, but using the GPU for the copy.
76
77    CopyImageSubData supports copies between images with different
78    internal formats, if the formats are compatible as described in
79    this extension.
80
81    CopyImageSubData also supports copying between compressed and
82    uncompressed images if the compressed block / uncompressed texel
83    sizes are the same.
84
85New Procedures and Functions
86
87    void CopyImageSubDataEXT(
88        uint srcName, enum srcTarget, int srcLevel,
89        int srcX, int srcY, int srcZ,
90        uint dstName, enum dstTarget, int dstLevel,
91        int dstX, int dstY, int dstZ,
92        sizei srcWidth, sizei srcHeight, sizei srcDepth);
93
94New Tokens
95
96    None
97
98Additions to Chapter 4 of the OpenGL ES 3.0 Specification (Per-Fragment
99Operations and the Framebuffer)
100
101    Append to section 4.3.3 (Copying Pixels):
102
103    The function
104
105        void CopyImageSubDataEXT(
106            uint srcName, enum srcTarget, int srcLevel,
107            int srcX, int srcY, int srcZ,
108            uint dstName, enum dstTarget, int dstLevel,
109            int dstX, int dstY, int dstZ,
110            sizei srcWidth, sizei srcHeight, sizei srcDepth);
111
112    may be used to copy a region of texel data between two image
113    objects.  An image object may be either a texture or a
114    renderbuffer.
115
116    CopyImageSubData does not perform general-purpose conversions
117    such as scaling, resizing, blending, color-space, or format
118    conversions. It should be considered to operate in a manner
119    similar to a CPU memcpy. CopyImageSubData can copy between
120    images with different internal formats, provided
121    the formats are compatible.
122
123    CopyImageSubData also allows copying between certain
124    types of compressed and uncompressed internal formats as detailed
125    in Table 4.X.1. This copy does not perform on-the-fly compression
126    or decompression. When copying from an uncompressed internal format
127    to a compressed internal format, each texel of uncompressed data
128    becomes a single block of compressed data. When copying from a
129    compressed internal format to an uncompressed internal format,
130    a block of compressed data becomes a single texel of uncompressed
131    data. The texel size of the uncompressed format must be the same
132    size the block size of the compressed formats. Thus it is permitted
133    to copy between a 128-bit uncompressed format and a compressed
134    format which uses 8-bit 4x4 blocks, or between a 64-bit uncompressed
135    format and a compressed format which uses 4-bit 4x4 blocks.
136    INVALID_OPERATION is generated if the texel size of
137    the uncompressed image is not equal to the block size of the
138    compressed image.
139
140    The source object is identified by <srcName> and <srcTarget>.
141    Similarly the destination object is identified by <dstName> and
142    <dstTarget>.  The interpretation of the name depends on the value
143    of the corresponding target parameter.  If the target parameter is
144    RENDERBUFFER, the name is interpreted as the name of a
145    renderbuffer object.  If the target parameter is a texture target,
146    the name is interpreted as a texture object.  All
147    texture targets are accepted, with the exception of TEXTURE_BUFFER_EXT
148    and the cubemap face selectors described in table 3.17.
149    INVALID_ENUM is generated if either target is not RENDERBUFFER
150    or a valid texture target, or is TEXTURE_BUFFER, or is one
151    of the cubemap face selectors described in table 3.21, or if the
152    target does not match the type of the object. INVALID_OPERATION
153    is generated if either object is a texture and the texture is
154    not complete (as defined in section 3.8.13), if the source and
155    destination internal formats are not compatible (see below),
156    or if the number of samples do not match.
157    INVALID_VALUE is generated if either name does not correspond to a
158    valid renderbuffer or texture object according to the corresponding
159    target parameter.
160
161    <srcLevel> and <dstLevel> identify the source and destination
162    level of detail.  For textures, this must be a valid level of
163    detail in the texture object.  For renderbuffers, this value must
164    be zero. INVALID_VALUE is generated if the specified level is not
165    a valid level for the image.
166
167    <srcX>, <srcY>, and <srcZ> specify the lower left texel
168    coordinates of a <srcWidth>-wide by <srcHeight>-high by
169    <srcDepth>-deep rectangular subregion of the source texel array.
170    Similarly, <dstX>, <dstY> and <dstZ> specify the coordinates of a
171    subregion of the destination texel array.  The source and destination
172    subregions must be contained entirely within the specified level of the
173    corresponding image objects.
174    The dimensions are always specified in texels, even for compressed
175    texture formats. But it should be noted that if only one of the
176    source and destination textures is compressed then the number of
177    texels touched in the compressed image will be a factor of the
178    block size larger than in the uncompressed image.
179    INVALID_VALUE is generated if the
180    dimensions of the either subregion exceeds the boundaries of the
181    corresponding image object, or if the image format is compressed
182    and the dimensions of the subregion fail to meet the alignment
183    constraints of the format.
184
185    If the source and destination images are identical, and the source
186    and destination rectangles overlap, the result of the operation is
187    undefined.
188
189    Slices of a TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY_EXT,
190    TEXTURE_3D and faces of TEXTURE_CUBE_MAP are all compatible provided
191    they share a compatible internal format, and multiple slices or faces
192    may be copied between these objects with a single call by specifying the
193    starting slice with <srcZ> and <dstZ>, and the number of slices to
194    be copied with <srcDepth>.  Cubemap textures always have six faces
195    which are selected by a zero-based face index, according to the
196    order specified in table 3.21.
197
198    For the purposes of CopyImageSubData, two internal formats
199    are considered compatible if any of the following conditions are
200    met:
201     * the formats are the same,
202     * the formats are both listed in the same entry of Table 4.X.2, or
203     * one format is compressed and the other is uncompressed and
204       Table 4.X.1 lists the two formats in the same row.
205    If the formats are not compatible INVALID_OPERATION is generated.
206
207    ------------------------------------------------------------------------------
208    | Texel / | Uncompressed         |                                           |
209    | Block   | internal format      | Compressed internal format                |
210    | size    |                      |                                           |
211    ------------------------------------------------------------------------------
212    | 128-bit | RGBA32UI,            | COMPRESSED_RGBA_S3TC_DXT3_EXT,            |
213    |         | RGBA32I,             | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,      |
214    |         | RGBA32F              | COMPRESSED_RGBA_S3TC_DXT5_EXT,            |
215    |         |                      | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,      |
216    |         |                      | COMPRESSED_RG_RGTC2,                      |
217    |         |                      | COMPRESSED_SIGNED_RG_RGTC2,               |
218    |         |                      | COMPRESSED_RGBA_BPTC_UNORM,               |
219    |         |                      | COMPRESSED_SRGB_ALPHA_BPTC_UNORM,         |
220    |         |                      | COMPRESSED_RGB_BPTC_SIGNED_FLOAT,         |
221    |         |                      | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT,       |
222    |         |                      | COMPRESSED_RGBA8_ETC2_EAC,                |
223    |         |                      | COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,         |
224    |         |                      | COMPRESSED_RG11_EAC,                      |
225    |         |                      | COMPRESSED_SIGNED_RG11_EAC,               |
226    |         |                      | COMPRESSED_RGBA_ASTC_4x4_KHR,             |
227    |         |                      | COMPRESSED_RGBA_ASTC_5x4_KHR,             |
228    |         |                      | COMPRESSED_RGBA_ASTC_5x5_KHR,             |
229    |         |                      | COMPRESSED_RGBA_ASTC_6x5_KHR,             |
230    |         |                      | COMPRESSED_RGBA_ASTC_6x6_KHR,             |
231    |         |                      | COMPRESSED_RGBA_ASTC_8x5_KHR,             |
232    |         |                      | COMPRESSED_RGBA_ASTC_8x6_KHR,             |
233    |         |                      | COMPRESSED_RGBA_ASTC_8x8_KHR,             |
234    |         |                      | COMPRESSED_RGBA_ASTC_10x5_KHR,            |
235    |         |                      | COMPRESSED_RGBA_ASTC_10x6_KHR,            |
236    |         |                      | COMPRESSED_RGBA_ASTC_10x8_KHR,            |
237    |         |                      | COMPRESSED_RGBA_ASTC_10x10_KHR,           |
238    |         |                      | COMPRESSED_RGBA_ASTC_12x10_KHR,           |
239    |         |                      | COMPRESSED_RGBA_ASTC_12x12_KHR,           |
240    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,     |
241    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,     |
242    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,     |
243    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,     |
244    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,     |
245    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,     |
246    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,     |
247    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,     |
248    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,    |
249    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,    |
250    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,    |
251    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,   |
252    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,   |
253    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,   |
254    |         |                      | COMPRESSED_RGBA_ASTC_3x3x3_OES,           |
255    |         |                      | COMPRESSED_RGBA_ASTC_4x3x3_OES,           |
256    |         |                      | COMPRESSED_RGBA_ASTC_4x4x3_OES,           |
257    |         |                      | COMPRESSED_RGBA_ASTC_4x4x4_OES,           |
258    |         |                      | COMPRESSED_RGBA_ASTC_5x4x4_OES,           |
259    |         |                      | COMPRESSED_RGBA_ASTC_5x5x4_OES,           |
260    |         |                      | COMPRESSED_RGBA_ASTC_5x5x5_OES,           |
261    |         |                      | COMPRESSED_RGBA_ASTC_6x5x5_OES,           |
262    |         |                      | COMPRESSED_RGBA_ASTC_6x6x5_OES,           |
263    |         |                      | COMPRESSED_RGBA_ASTC_6x6x6_OES,           |
264    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES,   |
265    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES,   |
266    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES,   |
267    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES,   |
268    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES,   |
269    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES,   |
270    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES,   |
271    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES,   |
272    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES,   |
273    |         |                      | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES    |
274    ------------------------------------------------------------------------------
275    | 64-bit  | RGBA16F, RG32F,      | COMPRESSED_RGB_S3TC_DXT1_EXT,             |
276    |         | RGBA16UI, RG32UI,    | COMPRESSED_SRGB_S3TC_DXT1_EXT,            |
277    |         | RGBA16I, RG32I,      | COMPRESSED_RGBA_S3TC_DXT1_EXT,            |
278    |         |                      | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,      |
279    |         |                      | COMPRESSED_RED_RGTC1,                     |
280    |         |                      | COMPRESSED_SIGNED_RED_RGTC1,              |
281    |         |                      | COMPRESSED_RGB8_ETC2,                     |
282    |         |                      | COMPRESSED_SRGB8_ETC2,                    |
283    |         |                      | COMPRESSED_R11_EAC,                       |
284    |         |                      | COMPRESSED_SIGNED_R11_EAC,                |
285    |         |                      | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, |
286    |         |                      | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 |
287    ------------------------------------------------------------------------------
288
289        Table 4.X.1: Compatible internal formats for copying between
290        compressed and uncompressed internal formats with CopyImageSubDataEXT.
291        Formats in the same row can be copied between each other.
292
293    --------------------------------------------------------------------------
294    | Class                      | Internal formats                          |
295    --------------------------------------------------------------------------
296    | VIEW_CLASS_128_BITS        | RGBA32F, RGBA32UI, RGBA32I                |
297    --------------------------------------------------------------------------
298    | VIEW_CLASS_96_BITS         | RGB32F, RGB32UI, RGB32I                   |
299    --------------------------------------------------------------------------
300    | VIEW_CLASS_64_BITS         | RGBA16F, RG32F, RGBA16UI, RG32UI,         |
301    |                            | RGBA16I, RG32I                            |
302    --------------------------------------------------------------------------
303    | VIEW_CLASS_48_BITS         | RGB16F, RGB16UI, RGB16I                   |
304    --------------------------------------------------------------------------
305    | VIEW_CLASS_32_BITS         | RG16F, R11F_G11F_B10F, R32F,              |
306    |                            | RGB10_A2UI, RGBA8UI, RG16UI, R32UI,       |
307    |                            | RGBA8I, RG16I, R32I, RGB10_A2, RGBA8,     |
308    |                            | RGBA8_SNORM, SRGB8_ALPHA8, RGB9_E5        |
309    -------------------------------------------------------------------------
310    | VIEW_CLASS_24_BITS         | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I    |
311    --------------------------------------------------------------------------
312    | VIEW_CLASS_16_BITS         | R16F, RG8UI, R16UI, RG8I, R16I, RG8,      |
313    |                            | RG8_SNORM                                 |
314    --------------------------------------------------------------------------
315    | VIEW_CLASS_8_BITS          | R8UI, R8I, R8, R8_SNORM                   |
316    --------------------------------------------------------------------------
317    | VIEW_CLASS_RGTC1_RED       | COMPRESSED_RED_RGTC1_EXT,                 |
318    |                            | COMPRESSED_SIGNED_RED_RGTC1_EXT           |
319    --------------------------------------------------------------------------
320    | VIEW_CLASS_RGTC2_RG        | COMPRESSED_RG_RGTC2_EXT,                  |
321    |                            | COMPRESSED_SIGNED_RG_RGTC2_EXT            |
322    --------------------------------------------------------------------------
323    | VIEW_CLASS_BPTC_UNORM      | COMPRESSED_RGBA_BPTC_UNORM_EXT,           |
324    |                            | COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT      |
325    --------------------------------------------------------------------------
326    | VIEW_CLASS_BPTC_FLOAT      | COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,     |
327    |                            | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT    |
328    --------------------------------------------------------------------------
329    | VIEW_CLASS_S3TC_DXT1_RGB   | COMPRESSED_RGB_S3TC_DXT1_EXT,             |
330    |                            | COMPRESSED_SRGB_S3TC_DXT1_EXT             |
331    --------------------------------------------------------------------------
332    | VIEW_CLASS_S3TC_DXT1_RGBA  | COMPRESSED_RGBA_S3TC_DXT1_EXT,            |
333    |                            | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT       |
334    --------------------------------------------------------------------------
335    | VIEW_CLASS_S3TC_DXT3_RGBA  | COMPRESSED_RGBA_S3TC_DXT3_EXT,            |
336    |                            | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT       |
337    --------------------------------------------------------------------------
338    | VIEW_CLASS_S3TC_DXT5_RGBA  | COMPRESSED_RGBA_S3TC_DXT5_EXT,            |
339    |                            | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT       |
340    --------------------------------------------------------------------------
341    | VIEW_CLASS_EAC_R11         | COMPRESSED_R11_EAC,                       |
342    |                            | COMPRESSED_SIGNED_R11_EAC                 |
343    --------------------------------------------------------------------------
344    | VIEW_CLASS_EAC_RG11        | COMPRESSED_RG11_EAC,                      |
345    |                            | COMPRESSED_SIGNED_RG11_EAC                |
346    --------------------------------------------------------------------------
347    | VIEW_CLASS_ETC2_RGB        | COMPRESSED_RGB8_ETC2,                     |
348    |                            | COMPRESSED_SRGB8_ETC2                     |
349    --------------------------------------------------------------------------
350    | VIEW_CLASS_ETC2_RGBA       | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, |
351    |                            | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 |
352    --------------------------------------------------------------------------
353    | VIEW_CLASS_ETC2_EAC_RGBA   | COMPRESSED_RGBA8_ETC2_EAC,                |
354    |                            | COMPRESSED_SRGB8_ALPHA8_ETC2_EAC          |
355    --------------------------------------------------------------------------
356    | VIEW_CLASS_ASTC_4x4_RGBA   | COMPRESSED_RGBA_ASTC_4x4_KHR,             |
357    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR      |
358    --------------------------------------------------------------------------
359    | VIEW_CLASS_ASTC_5x4_RGBA   | COMPRESSED_RGBA_ASTC_5x4_KHR,             |
360    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR      |
361    --------------------------------------------------------------------------
362    | VIEW_CLASS_ASTC_5x5_RGBA   | COMPRESSED_RGBA_ASTC_5x5_KHR,             |
363    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR      |
364    --------------------------------------------------------------------------
365    | VIEW_CLASS_ASTC_6x5_RGBA   | COMPRESSED_RGBA_ASTC_6x5_KHR,             |
366    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR      |
367    --------------------------------------------------------------------------
368    | VIEW_CLASS_ASTC_6x6_RGBA   | COMPRESSED_RGBA_ASTC_6x6_KHR,             |
369    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR      |
370    --------------------------------------------------------------------------
371    | VIEW_CLASS_ASTC_8x5_RGBA   | COMPRESSED_RGBA_ASTC_8x5_KHR,             |
372    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR      |
373    --------------------------------------------------------------------------
374    | VIEW_CLASS_ASTC_8x6_RGBA   | COMPRESSED_RGBA_ASTC_8x6_KHR,             |
375    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR      |
376    --------------------------------------------------------------------------
377    | VIEW_CLASS_ASTC_8x8_RGBA   | COMPRESSED_RGBA_ASTC_8x8_KHR,             |
378    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR      |
379    --------------------------------------------------------------------------
380    | VIEW_CLASS_ASTC_10x5_RGBA  | COMPRESSED_RGBA_ASTC_10x5_KHR,            |
381    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR     |
382    --------------------------------------------------------------------------
383    | VIEW_CLASS_ASTC_10x6_RGBA  | COMPRESSED_RGBA_ASTC_10x6_KHR,            |
384    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR     |
385    --------------------------------------------------------------------------
386    | VIEW_CLASS_ASTC_10x8_RGBA  | COMPRESSED_RGBA_ASTC_10x8_KHR,            |
387    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR     |
388    --------------------------------------------------------------------------
389    | VIEW_CLASS_ASTC_10x10_RGBA | COMPRESSED_RGBA_ASTC_10x10_KHR,           |
390    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR    |
391    --------------------------------------------------------------------------
392    | VIEW_CLASS_ASTC_12x10_RGBA | COMPRESSED_RGBA_ASTC_12x10_KHR,           |
393    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR    |
394    --------------------------------------------------------------------------
395    | VIEW_CLASS_ASTC_12x12_RGBA | COMPRESSED_RGBA_ASTC_12x12_KHR,           |
396    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR    |
397    --------------------------------------------------------------------------
398    | VIEW_CLASS_ASTC_3x3x3_RGBA | COMPRESSED_RGBA_ASTC_3x3x3_OES,           |
399    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES    |
400    --------------------------------------------------------------------------
401    | VIEW_CLASS_ASTC_4x3x3_RGBA | COMPRESSED_RGBA_ASTC_4x3x3_OES,           |
402    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES    |
403    --------------------------------------------------------------------------
404    | VIEW_CLASS_ASTC_4x4x3_RGBA | COMPRESSED_RGBA_ASTC_4x4x3_OES,           |
405    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES    |
406    --------------------------------------------------------------------------
407    | VIEW_CLASS_ASTC_4x4x4_RGBA | COMPRESSED_RGBA_ASTC_4x4x4_OES,           |
408    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES    |
409    --------------------------------------------------------------------------
410    | VIEW_CLASS_ASTC_5x4x4_RGBA | COMPRESSED_RGBA_ASTC_5x4x4_OES,           |
411    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES    |
412    --------------------------------------------------------------------------
413    | VIEW_CLASS_ASTC_5x5x4_RGBA | COMPRESSED_RGBA_ASTC_5x5x4_OES,           |
414    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES    |
415    --------------------------------------------------------------------------
416    | VIEW_CLASS_ASTC_5x5x5_RGBA | COMPRESSED_RGBA_ASTC_5x5x5_OES,           |
417    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES    |
418    --------------------------------------------------------------------------
419    | VIEW_CLASS_ASTC_6x5x5_RGBA | COMPRESSED_RGBA_ASTC_6x5x5_OES,           |
420    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES    |
421    --------------------------------------------------------------------------
422    | VIEW_CLASS_ASTC_6x6x5_RGBA | COMPRESSED_RGBA_ASTC_6x6x5_OES,           |
423    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES    |
424    --------------------------------------------------------------------------
425    | VIEW_CLASS_ASTC_6x6x6_RGBA | COMPRESSED_RGBA_ASTC_6x6x6_OES,           |
426    |                            | COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES    |
427    --------------------------------------------------------------------------
428
429        Table 4.X.2: Compatible internal formats for CopyImageSubDataEXT.
430        Formats in the same entry may be copied between each other.
431        [[Note that if texture_view is supported, this table should
432        be replaced with a reference to Table 3.X.2 from that extension.]]
433
434    If the internal format does not exactly match the internal format of the
435    original texture, the contents of the memory are reinterpreted in the same
436    manner as for image bindings described in section 3.8.X (Texture Image
437    Loads and Stores).
438
439Dependencies on EXT_texture_view:
440
441    As written, this extension incorporates some of the "view class"
442    terminology that is introduced by EXT_texture_view.  However this is
443    only enough to define the equivalence classes and does not actually
444    imply the texture view capability.
445
446    If EXT_texture_view is supported, Table 4.X.2 should be replaced with
447    a reference to Table 3.X.2 from that extension instead.
448
449Dependencies on EXT_texture_buffer
450
451    If EXT_texture_buffer is not supported, then remove all references
452    to TEXTURE_BUFFER_EXT.
453
454Dependencies on EXT_texture_cube_map_array
455
456    If EXT_texture_cube_map_array is not supported, then remove all references
457    to TEXTURE_CUBE_MAP_ARRAY_EXT.
458
459Dependencies on EXT_texture_compression_s3tc
460
461    If EXT_texture_compression_s3tc is not supported, remove any
462    references to S3TC compressed texture formats.
463
464Dependencies on EXT_texture_compression_rgtc
465
466    If EXT_texture_compression_rgtc is not supported, remove any
467    references to the RGTC compressed texture formats.
468
469Dependencies on EXT_texture_compression_bptc
470
471    If EXT_texture_compression_bptc is not supported, remove any
472    references to the PBTC compressed texture formats.
473
474Dependencies on KHR_texture_compression_astc_ldr
475
476    If KHR_texture_compression_astc_ldr is not supported, remove any
477    references to the ASTC LDR compressed texture formats.
478
479Dependencies on KHR_texture_compression_astc_hdr
480
481    If KHR_texture_compression_astc_hdr is not supported, remove any
482    references to the ASTC HDR compressed texture formats.
483
484Dependencies on OES_texture_compression_astc
485
486    If OES_texture_compression_astc is not supported, remove any
487    references to the ASTC 3D compressed texture formats.
488
489Errors
490
491    CopyImageSubDataEXT may fail with any of the following errors:
492
493    INVALID_ENUM is generated
494     * if either <srcTarget> or <dstTarget>
495      - is not RENDERBUFFER or a valid non-proxy texture target
496      - is TEXTURE_BUFFER, or
497      - is one of the cubemap face selectors described in table 3.17,
498     * if the target does not match the type of the object.
499
500    INVALID_OPERATION is generated
501     * if either object is a texture and the texture is not complete,
502     * if the source and destination formats are not compatible,
503     * if the source and destination number of samples do not match,
504     * if one image is compressed and the other is uncompressed and the
505       block size of compressed image is not equal to the texel size
506       of the compressed image.
507
508    INVALID_VALUE is generated
509     * if either <srcName> or <dstName> does not correspond to a valid
510       renderbuffer or texture object according to the corresponding
511       target parameter, or
512     * if the specified level is not a valid level for the image, or
513     * if the dimensions of the either subregion exceeds the boundaries
514       of the corresponding image object, or
515     * if the image format is compressed and the dimensions of the
516       subregion fail to meet the alignment constraints of the format.
517
518Sample Code
519
520    TBD
521
522Issues
523
524    Note: these issues apply specifically to the definition of
525    EXT_copy_image, which is based on the OpenGL ARB_copy_image extension
526    as updated by OpenGL 4.4. Resolved issues from ARB_copy_image have
527    been removed but remain largely applicable to this extension. That
528    extension can be found in the OpenGL Registry.
529
530    (1) What functionality was removed from ARB_copy_image?
531
532      - removed mention of proxy textures, TEXTURE_1D_ARRAY target
533      - removed mention of RGBA16, RGBA16_SNORM texture formats
534      - removed compatibility profile interactions and negative borders
535
536    (2) What functionality was changed or added relative to ARB_copy_image?
537
538      - added compatibility class definition to avoid texture_view dependency
539      - added ability to copy to/from ETC2/EAC formats and uncompressed formats
540      - added ability to copy between ETC2/EAC formats that are compatible
541      - added ability to copy to/from ASTC formats and uncompressed formats
542      - added ability to copy between ASTC formats that are compatible
543
544    (3) Is copying from/to images with ETC2/EAC compressed texture formats
545        defined?
546
547    RESOLVED: Yes. This extension adds support for copying between ETC2/EAC
548    compressed texture formats that belong to the same view class. It also
549    adds the ability to copy between uncompressed texture formats and
550    compressed ETC2/EAC texture formats and in a similar fashion the other
551    compressed formats.  This was requirement was not added to GL 4.x,
552    because at the time GL 4.x HW did not natively support ETC2/EAC compressed
553    textures, and thus it was expected that they may be uncompressed or
554    transcoded. It is expected that this may be a very useful capability
555    for mobile parts and so this capability is included here.  For GL 4.x
556    hardware that wishes to expose this capability, it will need to
557    transparently handle these copies as if the compressed formats where
558    natively supported.
559
560    (4) Is copying from/to images with ASTC compressed texture formats
561        defined?
562
563    RESOLVED. Yes, as in issue 3.  Any of the ASTC LHR, HDR, or 3D formats
564    that are supported may be copied within their compatibility class.
565
566    (5) What is the behavior when the source and destination images are the
567        same?
568
569    RESOLVED: This was also not stated in GL 4.4, ARB_copy_image or
570    NV_copy_image. This was clarified to be undefined behaviour in Bug 11355.
571    We follow that resolution here.
572
573    (6) Should the R16, RG16, RGB16, and RGBA16 (and _SNORM) texture formats
574        be supported?
575
576    RESOLVED.  No. OpenGL ES 3.0 does not support these formats. They were
577    considered for late addition to OpenGL ES 3.1 in Bug 11366, but didn't
578    make the cut. In the absence of another extension to add them, they
579    are not supported here either.
580
581Revision History
582
583    Rev.    Date       Author    Changes
584    ----  ----------   --------  -----------------------------------------
585     5    03/26/2014   dkoch     Update contributors.
586     4    03/10/2014   Jon Leech Change suffix to EXT.
587     3    02/12/2013   dkoch     Resolved issue 6.
588     2    12/18/2013   dkoch     Finish the compressed texture interactions.
589                                 Adding support for ETC2/EAC and ASTC textures.
590                                 Eliminate the dependency on EXT_texture_view.
591                                 Add language for source and destination overlap.
592                                 Resolved issues 3,4,5. Added issue 6.
593     1    12/02/2013   dkoch     Initial revision based on ARB_copy_image rev 4.
594