• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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