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