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