1Name 2 3 EXT_texture_cube_map_array 4 5Name Strings 6 7 GL_EXT_texture_cube_map_array 8 9Contact 10 11 Jon Leech (oddhack 'at' sonic.net) 12 Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) 13 14Contributors 15 16 Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) 17 Dominik Witczak, Mobica 18 Graham Connor, Imagination 19 Ben Bowman, Imagination 20 Jonathan Putsman, Imagination 21 Contributors to ARB_texture_cube_map_array 22 23Notice 24 25 Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at 26 http://www.khronos.org/registry/speccopyright.html 27 28 Portions Copyright (c) 2013-2014 NVIDIA Corporation. 29 30Status 31 32 Complete. 33 34Version 35 36 Last Modified Date: March 28, 2014 37 Revision: 11 38 39Number 40 41 OpenGL ES Extension #184 42 43Dependencies 44 45 OpenGL ES 3.1 and OpenGL ES Shading Language 3.10 are required. 46 47 This specification is written against the OpenGL ES 3.1 (March 17, 48 2014) and OpenGL ES 3.10 Shading Language (March 17, 2014) 49 Specifications. 50 51 EXT_geometry_shader is required. 52 53 EXT_texture_border_clamp affects the definition of this extension. 54 55 This extension interacts with OES_shader_image_atomic. 56 57Overview 58 59 OpenGL ES 3.1 supports two-dimensional array textures. An array texture 60 is an ordered set of images with the same size and format. Each image in 61 an array texture has a unique level. This extension expands texture 62 array support to include cube map textures. 63 64 A cube map array texture is a two-dimensional array texture that may 65 contain many cube map layers. Each cube map layer is a unique cube map 66 image set. Images in a cube map array have the same size and format 67 limitations as two-dimensional array textures. A cube map array texture 68 is specified using TexImage3D or TexStorage3D in a similar manner to 69 two-dimensional arrays. Cube map array textures can be bound to a render 70 targets of a frame buffer object just as two-dimensional arrays are, 71 using FramebufferTextureLayer. 72 73 When accessed by a shader, a cube map array texture acts as a single 74 unit. The "s", "t", "r" texture coordinates are treated as a regular 75 cube map texture fetch. The "q" texture is treated as an unnormalized 76 floating-point value identifying the layer of the cube map array 77 texture. Cube map array texture lookups do not filter between layers. 78 79New Procedures and Functions 80 81 None 82 83New Tokens 84 85 Accepted by the <target> parameter of TexParameter{if}, TexParameter{if}v, 86 TexParameterI{i ui}vEXT, BindTexture, GenerateMipmap, TexImage3D, 87 TexSubImage3D, TexStorage3D, GetTexParameter{if}v, 88 GetTexParameter{i ui}vEXT, GetTexLevelParameter{if}v, 89 CompressedTexImage3D, CompressedTexSubImage3D and CopyTexSubImage3D: 90 91 TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 92 93 Accepted by the <pname> parameter of GetBooleanv, 94 GetIntegerv and GetFloatv: 95 96 TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A 97 98 Returned by the <type> parameter of GetActiveUniform, 99 and by the <params> parameter of GetProgramResourceiv 100 when <props> is TYPE: 101 102 SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C 103 SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D 104 INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E 105 UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F 106 IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 107 INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F 108 UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A 109 110Additions to the OpenGL ES 3.1 Specification 111 112 Add to table 7.3 "OpenGL ES Shading Language type tokens..." on p. 86: 113 114 Type Name Token Keyword Buffer 115 --------------------------------------- ---------------------- ------ 116 SAMPLER_CUBE_MAP_ARRAY_EXT samplerCubeArray 117 SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT samplerCubeArrayShadow 118 INT_SAMPLER_CUBE_MAP_ARRAY_EXT isamplerCubeArray 119 UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT usamplerCubeArray 120 IMAGE_CUBE_MAP_ARRAY_EXT imageCubeArray 121 INT_IMAGE_CUBE_MAP_ARRAY_EXT iimageCubeArray 122 UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT uimageCubeArray 123 124 125 Add to the fourth paragraph of chapter 8, "Textures and Samplers", on p. 126 128: 127 128 ... A cube map array is a collection of cube map layers stored as a 129 two-dimensional array texture. When accessing a cube map array, the 130 texture coordinate "s", "t", "r" are applied similarly as cube maps 131 while the last texture coordinate "q" is used as the index of one the 132 cube map slices. 133 134 135 Modify the first paragraph of section 8.1, "Texture Objects" on p. 129: 136 137 ... The default texture object is bound to each of the TEXTURE_2D, 138 TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY_EXT, 139 and TEXTURE_2D_MULTISAMPLE targets ... 140 141 142 Modify the paragraph following IsTexture on p. 131: 143 144 The texture object name space, including the initial two-, and three- 145 dimensional, two-dimensional array, cube map, cube map array, and 146 two-dimensional multisample texture objects, is shared among all texture 147 units. ... 148 149 150 Modify section 8.5, "Texture Image Specification" 151 152 Change the description of TexImage3D in the first paragraph of the 153 section, on p. 147: 154 155 ... <target> must be one of TEXTURE_3D for a three-dimensional texture, 156 TEXTURE_2D_ARRAY for a two-dimensional array texture, or 157 TEXTURE_CUBE_MAP_ARRAY_EXT for a cube map array texture. ... 158 159 160 Change the sixth paragraph on p. 148: 161 162 Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL 163 are supported by texture image specification commands only if <target> 164 is TEXTURE_2D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, or 165 TEXTURE_CUBE_MAP_ARRAY_EXT. Using these formats ... 166 167 168 Add following the first paragraph of section 8.5.3, "Texture Image 169 Structure", on p. 154: 170 171 ... image is indexed with the highest value of <k>. 172 173 When <target> is TEXTURE_CUBE_MAP_ARRAY_EXT. specifying a cube map array 174 texture, <k> refers to a layer-face. The layer is given by 175 176 <layer> = floor(<k> / 6), 177 178 and the face is given by 179 180 <face> = <k> mod 6 181 182 The face number corresponds to the cube map faces as shown in table 9.2. 183 184 If the internal data type ... 185 186 187 Add following the third paragraph on p. 155: 188 189 ... specified sizes can be supported. 190 191 An INVALID_VALUE error is generated if target is 192 TEXTURE_CUBE_MAP_ARRAY_EXT, and <width> and <height> are not equal, or 193 <depth> is not a multiple of six, indicating 6 * <N> layer-faces in the 194 cube map array. 195 196 197 Modify the sixth paragraph on p. 155: 198 199 The maximum allowable width and height of a cube map or cube map array 200 texture must be the same, and must be at least 2^(k-lod) ... 201 202 203 Modify the fourth paragraph on p. 156: 204 205 ... but may not correspond to any actual texel. See figure 8.3. If 206 <target> is TEXTURE_CUBE_MAP_ARRAY_EXT, the texture value is determined 207 by (s, t, r, q) coordinates where "s", "t", "r" is defined to be the 208 same as for TEXTURE_CUBE_MAP and "q" is defined as the index of a 209 specific cube map in the cube map array. 210 211 212 Modify section 3.8.5 "Alternate Texture Image Specification Commands" 213 214 Change the second paragraph on p. 162: 215 216 ... and the <target> arguments of TexSubImage3D and CopyTexSubImage3D 217 must be TEXTURE_3D, TEXTURE_2D_ARRAY, or TEXTURE_CUBE_MAP_ARRAY_EXT. 218 219 220 Change the sixth paragraph on p. 162: 221 222 Arguments <xoffset>, <yoffset>, and <zoffset> of TexSubImage3D and 223 CopyTexSubImage3D specify the lower left texel coordinates of a 224 <width>-wide by <height>-high by <depth>-deep rectangular subregion of the 225 texel array. For cube map array textures, <zoffset> is the first 226 layer-face to update, and <depth> is the number of layer-faces to 227 update. The <depth> argument associated with CopyTexSubImage3D ... 228 229 230 Modify section 8.9 "Texture Parameters" to change the first paragraph of 231 the section, on p. 170: 232 233 <target> is the target, and must be one of TEXTURE_2D, TEXTURE_3D, 234 TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY_EXT, or 235 TEXTURE_2D_MULTISAMPLE. <pname> is ... 236 237 238 Modify section 8.10.2 "Texture Parameter Queries" in the second 239 paragraph of the section, on p. 172: 240 241 <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, 242 TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY_EXT, or TEXTURE_2D_MULTISAMPLE, 243 indicating the currently bound two-dimensional, three-dimensional, 244 two-dimensional array, cube map, cube map array, or two-dimensional 245 multisample texture object, respectively. 246 247 248 Modify section 8.10.3 "Texture Level Parameter Queries" in the second 249 paragraph of the section, on p. 173: 250 251 <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of 252 the cube map face targets from table 8.21, TEXTURE_CUBE_MAP_ARRAY_EXT, or 253 TEXTURE_2D_MULTISAMPLE, indicating the currently bound two- or 254 three-dimensional, two-dimensional array, one of the six distinct 2D 255 images making up the cube map texture object, cube map array, or 256 two-dimensional multisample texture. 257 258 <lod> determines ... 259 260 261 Modify section 8.13.1 "Scale Factor and Level of Detail" to change the 262 first paragraph in the description of equation 8.6, on p. 177: 263 264 ... For a two-dimensional, two-dimensional array, cube map, or cube map 265 array texture, define w(x,y) == 0. 266 267 268 Modify section 8.13.3 "Mipmapping" to change the first clause in the 269 equation for <maxsize> on p. 182 to: 270 271 ... max(w_t,h_t) for 2D, 2D array, cube map, and cube map 272 array textures 273 274 275 Modify section 8.13.4, "Manual Mipmap Generation" to change the 276 description of GenerateMipmap starting with the first paragraph, on p. 277 185: 278 279 ... where <target> is one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, 280 TEXTURE_CUBE_MAP, or TEXTURE_CUBE_MAP_ARRAY_EXT. 281 282 Mipmap generation affects the texture image attached to <target>. 283 284 If <target> is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY_EXT, the texture 285 bound to <target> must be cube complete or cube array complete, 286 respectively, as defined in section 8.17. 287 288 ... 289 290 The contents of the derived arrays are computed by repeated, filtered 291 reduction of the level_base array. For two-dimensional array and cube 292 map array textures, each layer is filtered independently. ... 293 294 Errors 295 296 ... 297 298 An INVALID_OPERATION error is generated if <target> is TEXTURE_CUBE_MAP 299 or TEXTURE_CUBE_MAP_ARRAY_EXT, and the texture bound to <target> is not 300 cube complete or cube array complete respectively. 301 302 ... 303 304 305 Modify section 8.16, "Texture Completeness" 306 307 Add a new paragraph definition before the final paragraph (starting 308 "Using the preceding ...") in the introduction to the section, on p. 309 186: 310 311 A cube map array texture is <cube array complete> if it is complete when 312 treated as a two-dimensional array and cube complete for every cube map 313 slice within the array texture. 314 315 316 Add a new bullet point to the final paragraph of the section, on p. 186: 317 318 Using the preceding definitions, a texture is complete unless any of the 319 following conditions hold true: 320 ... 321 * The texture is a cube map array texture, and is not cube array 322 complete. 323 324 325 Modify section 8.17 "Immutable-Format Texture Images" 326 327 Change the description of TexStorage3D on p. 189: 328 329 The command 330 331 void TexStorage3D(enum target ... 332 333 specifies all the levels of a three-dimensional, two-dimensional array, 334 or cube map array texture. The pseudocode depends on <target>: 335 336 ... 337 338 339 Change the <target>s allowed in the second code example for 340 TexStorage3D, at the top of p. 190: 341 342 <target> TEXTURE_2D_ARRAY or TEXTURE_CUBE_MAP_ARRAY_EXT: 343 344 345 Change the second bullet point in the Errors section on p. 190: 346 347 * <target> is TEXTURE_2D_ARRAY or TEXTURE_CUBE_MAP_ARRAY_EXT and 348 <levels> is greater than floor(log2(max(width,height))) + 1 349 350 351 Modify section 8.18, "Texture State" 352 353 Change the first paragraph of the section, on p. 191: 354 355 ... First, there are the multiple sets of texel arrays ... and six sets 356 of mipmap arrays each for the cube map and cube map array texture 357 targets) and their number. Each array has associated with it a width, 358 height, and depth (three-dimensional, two-dimensional array, and cube 359 map array only), ... 360 361 Change the fourth paragraph of the section, on p. 191: 362 363 Next, there are the five sets of texture properties, corresponding to 364 the two-dimensional, two-dimensional array, three-dimensional, cube 365 map, and cube map array texture targets. Each set consists of ... 366 367 368 Modify section 8.22, "Texture Image Loads and Stores": 369 370 Change starting with the third paragraph of the section, on p. 195: 371 372 If the texture identified by <texture> is a two-dimensional array, 373 three-dimensional, cube map, or cube map array texture, it is possible 374 to bind either the entire texture level or a single layer or face of the 375 texture level. If <layered> is TRUE, the entire level is bound. If 376 <layered> is FALSE, only the single layer identified by <layer> will be 377 bound. When <layered> is FALSE, the single bound layer is treated as a 378 different texture target for image accesses: 379 380 * two-dimensional array, three-dimensional, cube map, and cube map 381 array texture layers are treated as two-dimensional textures 382 383 For cube map textures where <layered> is FALSE, the face is taken by 384 mapping the layer number to a face according to table 8.25. For cube map 385 array textures where <layered> is FALSE, the selected layer number is 386 mapped to a texture layer and cube face using the following equations 387 and mapping <face> to a face according to table 8.25: 388 389 layer = floor(layer_orig / 6) 390 391 face = layer_orig - (layer * 6) 392 393 If the texture identified by <texture> does not have multiple layers or 394 faces ... 395 396 397 Add to table 8.26, "Mapping of image load and store...", on p. 196: 398 399 Texture target face/ 400 i j k layer 401 -------------------------- -- -- -- ----- 402 TEXTURE_CUBE_MAP_ARRAY_EXT x y - z 403 404 405 Split the third paragraph on p. 196, starting "If the texture target", 406 into two paragraphs: 407 408 If the texture target has layers or cube map faces, the layer or face 409 number is taken from the <layer> argument of BindImageTexture if the 410 texture is bound with <layered> set to FALSE, or from the coordinate 411 identified by table 8.26 otherwise. 412 413 For cube map and cube map array textures with <layered> set to TRUE, the 414 coordinate is mapped to a layer and face in the same manner as the 415 <layer> argument of BindImageTexture. 416 417 If the individual texel ... 418 419 420 Add to the bullet list in section 9.2.2, "Attaching Images to 421 Framebuffer Objects", and add a new final paragraph of the introduction 422 to the section on p. 208: 423 424 There are several types of framebuffer-attachable images 425 ... 426 * A single layer-face of a cube map array texture, which is treated as 427 a two-dimensional image. 428 429 Additionally, an entire level of a three-dimensional, cube map, cube map 430 array, two-dimensional array, or ... 431 432 433 Modify section 9.2.8, "Attaching Texture Images to a Framebuffer" to 434 change the description of FramebufferTextureLayer on p. 219: 435 436 The command 437 438 void FramebufferTextureLayer(enum target, enum attachment, 439 uint texture, int level, int layer); 440 441 operates similarly to FramebufferTexture2D, except that it attaches a 442 single layer of a three-dimensional, two-dimensional array, cube map 443 array, or two-dimensional multisample array texture level. 444 445 ... 446 447 <layer> specifies the layer of a two-dimensional image within <texture> 448 except for cube map array textures, where <layer> is translated into an 449 array layer and a cube map face as described in section 8.22 for 450 layer-face numbers passed to BindImageTexture. 451 452 ... 453 454 Errors 455 456 ... 457 458 An INVALID_OPERATION error is generated if <texture> is non-zero and is 459 not the name of a three dimensional, two-dimensional array, or cube map 460 array texture. 461 462 463 Modify section 9.4.1, "Framebuffer Completeness" to replace the bullet 464 point starting "If <image> is a three-dimensional texture" on p. 223: 465 466 * If <image> is a three-dimensional, two-dimensional array or cube map 467 array texture and the attachment is not layered, the selected layer is 468 less than the depth or layer count of the texture. 469 470 * If <image> is a three-dimensional, two-dimensional array or cube map 471 array texture and the attachment is layered, the depth or layer count 472 of the texture is less than or equal to the value of 473 MAX_FRAMEBUFFER_LAYERS_EXT. 474 475 476 Modify the final bullet point in section 9.4.2 "Whole Framebuffer 477 Completeness", as modified by EXT_geometry_shader (starting "If any 478 framebuffer attachment is layered") on p. 224: 479 480 * If any framebuffer attachment is layered, all populated attachments 481 must be layered. Additionally, all populated color attachments must be 482 from textures of the same target (i.e., three-dimensional, cube map, 483 cube map array, two-dimensional array, or two-dimensional multisample 484 array textures). 485 486 { FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT } 487 488 489 Add to the end of section 9.7gs, "Layered Framebuffers": 490 491 When cube map array texture levels are attached to a layered 492 framebuffer, the layer number corresponds to a layer-face. The 493 layer-face is be translated into an array layer and a cube map face as 494 described in section 8.22 for layer-face numbers passed to 495 BindImageTexture. 496 497 498Dependencies on EXT_texture_border_clamp 499 500 If EXT_texture_buffer is not supported, then remove all references 501 to TexParameterI{i ui}vEXT and GetTexParameter{i ui}vEXT. 502 503Dependencies on OES_shader_image_atomic 504 505 When OES_shader_image_atomic is supported, all the imageAtomic* functions 506 are supported on cube array images. 507 508New State 509 510 Add to table 20.8 "Textures (selector, state per texture unit)" 511 512 Initial 513 Get Value Type Get Command Value Description Sec. 514 ---------------------------------- -------- ----------- ---------- ----------------------------- ---- 515 TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 48* x Z+ GetIntegerv 0 texture object bound 8.1 516 to TEXTURE_CUBE_MAP_ARRAY_EXT 517 518Modification to the OpenGL ES Shading Language Specification, Version 3.10 519 520 #extension GL_EXT_texture_cube_map_array: <behavior> 521 522 The above line is needed to control the GLSL features described in 523 this section. 524 525 526 A new preprocessor #define is added to the OpenGL ES Shading Language: 527 528 #define GL_EXT_texture_cube_map_array 1 529 530 531 Modifications to Section 3.7 (Keywords) 532 533 Remove from the list of reserved keywords, and add to the list of 534 keywords on p. 14: 535 536 iimageCubeArray 537 imageCubeArray 538 isamplerCubeArray 539 samplerCubeArray 540 samplerCubeArrayShadow 541 uimageCubeArray 542 usamplerCubeArray 543 544 545 Add to section 4.1 "Basic Types" 546 547 Add to table "Floating Point Sampler Types (opaque)" on p. 20: 548 549 Type Meaning 550 -------------------------- --------------------------------------- 551 samplerCubeArray a handle for accessing a cube map array 552 imageCubeArray texture 553 554 samplerCubeArrayShadow a handle for accessing a cube map array 555 depth texture with comparison 556 557 Add to table "Signed Integer Sampler Types (opaque)" on p. 21: 558 559 Type Meaning 560 ----------------------- ----------------------------------------------- 561 isamplerCubeArray a handle for accessing an integer cube map 562 iimageCubeArray array texture 563 564 Add to table "Unsigned Integer Sampler Types (opaque)" on p. 21: 565 566 Type Meaning 567 ----------------------- ----------------------------------------------- 568 usamplerCubeArray a handle for accessing an unsigned integer 569 uimageCubeArray cube map array texture 570 571 572 Modify the second paragraph of section 4.1.7.2 "Images" on p. 27: 573 574 ... Image accesses should use an image type that matches the target of 575 the texture whose level is bound to the image unit, or for non-layered 576 bindings of 3D or array images should use the image type that matches 577 the dimensionality of the layer of the image (i.e. a layer of 3D, 578 2DArray, Cube, or CubeArray should use image2D). If the ... 579 580 Modify section 4.7.4 "Default Precision Qualifiers" 581 582 Add the following types to the list of types which have no default 583 precision qualifiers at the top of p. 65: 584 585 samplerCubeArray 586 samplerCubeArrayShadow 587 isamplerCubeArray 588 usamplerCubeArray 589 imageCubeArray 590 iimageCubeArray 591 uimageCubeArray 592 593 594 Modify section 7.1.1gs.2, "Geometry Shader Output Variables" to add to 595 the description of gl_Layer: 596 597 gl_Layer takes on a special value when used with an array of cube map 598 textures. Instead of only refering to the layer, it is used to select a 599 cube map face and a layer. Setting gl_Layer to the value (layer*6+face) 600 will render to the face <face> of the cube defined in layer <layer>. The 601 face values are defined in table 8.25 of the OpenGL ES Specification. 602 603 For example, to render to the positive <y> cube map face located in the 604 5th layer of the cube map array, gl_Layer should be set to 5*6 + 2. 605 606 607 Modify section 8.9 "Texture Functions" 608 609 Add to the table of texture query functions in section 8.9.1 610 on p. 120: 611 612 highp ivec3 textureSize(gsamplerCubeArray sampler, int lod) 613 highp ivec3 textureSize(gsamplerCubeArrayShadow sampler, int lod) 614 615 616 Add to the table of texel lookup functions in section 8.9.2 on p. 121: 617 618 gvec4 texture(gsamplerCubeArray sampler, vec4 P [, float bias]) 619 float texture(samplerCubeArrayShadow sampler, vec4 P, 620 float compare) 621 622 Modify the description of the texture functions: 623 624 Use the texture coordinate P to do a texture lookup in the texture 625 currently bound to <sampler>. 626 627 For shadow forms: When <compare> is present, it is used as D_ref and the 628 array layer comes from the last component of P. When compare is not 629 present, the last component of P is used as D_ref and the array layer 630 comes from the second to last component of P. 631 632 For non-shadow forms: the array layer comes from the last component of P. 633 634 Add to the same table on p. 121: 635 636 gvec4 textureLod(gsamplerCubeArray sampler, vec4 P, float lod) 637 638 And add to the same table on p. 124: 639 640 gvec4 textureGrad(gsamplerCubeArray sampler, vec4 P, 641 vec3 dPdx, vec3 dPdy); 642 643 644 Add to the table of texture gather functions in section 8.9.3 on p. 126: 645 646 gvec4 textureGather(gsamplerCubeArray sampler, vec4 P [, int comp]) 647 vec4 textureGather(samplerCubeArrayShadow sampler, vec4 P, 648 float refZ) 649 650 651 Modify section 8.14 "Texture Lookup Functions" to add to the list of 652 IMAGE_INFO placeholder parameter lists on p. 132: 653 654 ... 655 gimageCubeArray image, ivec3 P 656 657 658 Add to the list of image size functions in the table on p. 133: 659 660 highp ivec3 imageSize(readonly writeonly gimageCubeArray image) 661 662Issues 663 664 Note: These issues apply specifically to the definition of the 665 EXT_texture_cube_map_array specification, which is based on the OpenGL 666 extension ARB_texture_cube_map_array as updated in OpenGL 4.x. Resolved 667 issues from ARB_texture_cube_map_array have been removed, but remain 668 largely applicable to this extension. ARB_texture_cube_map_array can be 669 found in the OpenGL Registry. 670 671 (1) What functionality was removed from ARB_texture_cube_map_array? 672 673 - Interactions with features not supported by the underlying 674 ES 3.1 API and Shading Language, including: 675 * one-dimensional and rectangular textures 676 * texture image readback (GetTexImage) 677 678 (2) What functionality was changed and added relative to 679 ARB_texture_cube_map_array? 680 681 - EXT_texture_cube_map_array more closely matches OpenGL 4.4 language, 682 rather than ARB_texture_cube_map_array language. 683 - Interactions were added with OpenGL ES 3.1 and other EXT extension 684 functionality, including minor interactions with 685 EXT_geometry_shader. 686 687 (3) What should the rules on GLSL suffixing be? 688 689 RESOLVED: The new sampler and image types are not reserved keywords in 690 ESSL 3.00, but they are keywords in GLSL 4.40. ESSL 3.10 updates the 691 reserved keyword list to include all keywords used or reserved in GLSL 692 4.40 (but not otherwise used in ES), and thus we can use the image 693 and sampler keywords directly by moving them from the reserved keywords 694 section. See bug 11179. 695 696 (4) Should cube map array textures be supported for both mutable and 697 immutable textures? 698 699 RESOLVED: Yes. Per Daniel Koch's reasoning: although 2D multisample 700 textures are only supported as immutable textures in ES 3.1, they 701 require new entry points and the ES Working Group prefers having a 702 single way of doing things. 703 704 However, the ES WG also considered only supporting texture gather and 705 stencil texturing on immutable textures and decided against it, on the 706 basis that the only difference was a texture format, texture parameter 707 or how the texture was sampled and thus it was a subtle distinction. 708 709 For cube map array textures, a new texture target is midway between just 710 an access method/format and a whole new entry point. However, a cube map 711 array is similar to a 2D texture array that has a layer size that is a 712 multiple of 6. 2D texture array support for mutable textures already 713 exists in ES 3.0 and it would be odd to not have cube map arrays 714 supported on the same set of entry points. 715 716 Conclusion: support cube map arrays for both types of textures. 717 718Revision History 719 720 Rev. Date Author Changes 721 ---- -------- --------- ---------------------------------------------- 722 1 11/11/13 Jon Leech Initial version based on 723 ARB_texture_cube_map_array. 724 2 11/12/13 Jon Leech Add description of texture state for 725 cube map arrays and fix description 726 of binding state for cube map arrays. 727 3 11/20/13 Jon Leech Refer to ES 3.1 instead of 3plus. 728 4 11/21/13 dkoch Add interactions with EXT_texture_border_clamp 729 Update functions taking new tokens, etc. 730 Assume SL keywords will be reserved in ES 3.1. 731 5 12/18/13 dkoch minor editorial changes 732 6 01/09/14 dkoch align page numbers with ES 3.0.2, fix typos. 733 7 02/12/14 dkoch Resolved issue 4. 734 8 03/10/14 Jon Leech Rebase on OpenGL ES 3.1 and change suffix 735 to EXT. 736 9 03/26/14 dkoch Update contributors, clarify no default precision. 737 10 03/26/14 Jon Leech Sync with released ES 3.1 specs. 738 11 03/28/14 dkoch Add interactions with OES_shader_image_atomic. 739 740