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