• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    OES_texture_buffer
4
5Name Strings
6
7    GL_OES_texture_buffer
8
9Contact
10
11    Jon Leech (oddhack 'at' sonic.net)
12    Daniel Koch, NVIDIA (dkoch 'at' nvidia.com)
13
14Contributors
15
16    Pat Brown, NVIDIA
17    James Helferty, NVIDIA
18    Graham Connor, Imagination
19    Ben Bowman, Imagination
20    Jonathan Putsman, Imagination
21    Piotr Czubak, Intel
22    Marcin Kantoch, Mobica
23    Contributors to ARB_texture_buffer_object
24    Contributors to ARB_texture_buffer_range
25
26Notice
27
28    Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at
29        http://www.khronos.org/registry/speccopyright.html
30
31Specification Update Policy
32
33    Khronos-approved extension specifications are updated in response to
34    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
35    extensions which have been promoted to a core Specification, fixes will
36    first appear in the latest version of that core Specification, and will
37    eventually be backported to the extension document. This policy is
38    described in more detail at
39        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
40
41    Portions Copyright (c) 2013-2014 NVIDIA Corporation.
42
43Status
44
45    Approved by the OpenGL ES Working Group
46    Ratified by the Khronos Board of Promoters on November 7, 2014
47
48Version
49
50    Last Modified Date: July 14, 2014
51    Revision: 2
52
53Number
54
55    OpenGL ES Extension #216
56
57Dependencies
58
59    OpenGL ES 3.1 and OpenGL ES Shading Language 3.10 are required.
60
61    This specification is written against the OpenGL ES 3.1 (March 17,
62    2014) and OpenGL ES 3.10 Shading Language (March 17, 2014)
63    Specifications.
64
65    This extension interacts with OES_shader_image_atomic.
66
67Overview
68
69    This extension provides a new texture type, called a buffer texture.
70    Buffer textures are one-dimensional arrays of texels whose storage comes
71    from an attached buffer object. When a buffer object is bound to a
72    buffer texture, a format is specified, and the data in the buffer object
73    is treated as an array of texels of the specified format.
74
75    The use of a buffer object to provide storage allows the texture data to
76    be specified in a number of different ways: via buffer object loads
77    (BufferData), direct CPU writes (MapBuffer), or framebuffer readbacks to
78    pixel buffer objects (ReadPixels). A buffer object can also be loaded by
79    transform feedback, which captures
80    selected transformed attributes of vertices processed by the GL. Several
81    of these mechanisms do not require an extra data copy, which would be
82    required when using conventional TexImage-like entry points.
83
84    Buffer textures do not support mipmapping, texture lookups with
85    normalized floating-point texture coordinates, and texture filtering of
86    any sort.
87    They can be accessed via single texel fetch operations in programmable
88    shaders, using a new sampler type and texel fetch function, and
89    access can be controlled using the same memory barrier operations
90    as for other texture types.
91
92    Buffer textures are treated as (potentially large) one-dimensional
93    textures; the maximum texture size supported for buffer textures in the
94    initial implementation of this extension is 2^27 texels (note that this
95    extension only guarantees support for buffer textures with 2^16 texels,
96    but we expect most implementations to exceed that substantially). When a
97    buffer object is attached to a buffer texture, a size is not specified;
98    rather, the number of texels in the texture is taken by dividing the size
99    of the buffer object by the size of each texel.
100
101    This extension also allows a sub-range of the buffer's data store to
102    be attached to a texture. This can be used, for example, to allow multiple
103    buffer textures to be backed by independent sub-ranges of the same buffer
104    object, or for different sub-ranges of a single buffer object to be used
105    for different purposes.
106
107New Procedures and Functions
108
109    void TexBufferOES(enum target, enum internalformat, uint buffer);
110
111    void TexBufferRangeOES(enum target, enum internalformat, uint buffer,
112                           intptr offset, sizeiptr size);
113
114New Tokens
115
116    Accepted by the <target> parameter of BindBuffer, BufferData,
117    BufferSubData, MapBufferRange, BindTexture, UnmapBuffer,
118    GetBufferParameteriv, GetBufferPointerv, TexBufferOES, and
119    TexBufferRangeOES:
120
121        TEXTURE_BUFFER_OES                              0x8C2A
122
123    Accepted by the <pname> parameters of GetBooleanv, GetFloatv, and
124    GetIntegerv:
125
126        TEXTURE_BUFFER_BINDING_OES                      0x8C2A
127            (note that this token name is an alias for TEXTURE_BUFFER_OES,
128            and is used for naming consistency with queries for the buffers
129            bound to other buffer binding points).
130        MAX_TEXTURE_BUFFER_SIZE_OES                     0x8C2B
131        TEXTURE_BINDING_BUFFER_OES                      0x8C2C
132        TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES             0x919F
133
134    Returned in the <type> parameter of GetActiveUniform, the <params>
135    parameter of GetActiveUniformsiv, and the <params> parameter of
136    GetProgramResourceiv when the TYPE property is queried on the
137    UNIFORM interface:
138
139        SAMPLER_BUFFER_OES                              0x8DC2
140        INT_SAMPLER_BUFFER_OES                          0x8DD0
141        UNSIGNED_INT_SAMPLER_BUFFER_OES                 0x8DD8
142        IMAGE_BUFFER_OES                                0x9051
143        INT_IMAGE_BUFFER_OES                            0x905C
144        UNSIGNED_INT_IMAGE_BUFFER_OES                   0x9067
145
146    Accepted by the <pname> parameter of GetTexLevelParameter:
147
148        TEXTURE_BUFFER_DATA_STORE_BINDING_OES           0x8C2D
149        TEXTURE_BUFFER_OFFSET_OES                       0x919D
150        TEXTURE_BUFFER_SIZE_OES                         0x919E
151
152Additions to the OpenGL ES 3.1 Specification
153
154    Modify section 6.1 "Creating and Binding Buffer Objects"
155
156    Add to table 6.1 "Buffer object binding targets":
157
158        Target Name         Purpose             Described in section(s)
159        ------------------  ------------------- -----------------------
160        TEXTURE_BUFFER_OES  Texture data buffer 8.8tbo
161
162
163    Modify section 7.3 "Program Objects"
164
165    Add to table 7.3 "OpenGL ES Shading Language type tokens...":
166
167        Type Name Token                         Keyword
168        --------------------------------------- ---------------------------
169        SAMPLER_BUFFER_OES                      samplerBuffer
170        INT_SAMPLER_BUFFER_OES                  isamplerBuffer
171        UNSIGNED_INT_SAMPLER_BUFFER_OES         usamplerBuffer
172        IMAGE_BUFFER_OES                        imageBuffer
173        INT_IMAGE_BUFFER_OES                    iimageBuffer
174        UNSIGNED_INT_IMAGE_BUFFER_OES           uimageBuffer
175
176
177    Modify section 7.11 "Shader Memory Access"
178
179    Change the description of TEXTURE_FETCH_BARRIER_BIT for MemoryBarrier on
180    p. 116:
181
182      * TEXTURE_FETCH_BARRIER_BIT: Texture fetches from shaders, including
183        fetches from buffer object memory via buffer textures, after the
184        barrier will reflect data written by shaders prior to the barrier.
185
186
187    Modify chapter 8 "Textures and Samplers"
188
189    Add to the fourth paragraph of the section, on p. 128:
190
191    ... six faces of the cube. Buffer textures are special one-dimensional
192    textures whose texel arrays are stored in separate buffer objects.
193
194
195    Modify section 8.1 "Texture Objects"
196
197    Change the first paragraph of the section on p. 129:
198
199    ... The default texture object is bound to each of the TEXTURE_2D,
200    TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE,
201    and TEXTURE_BUFFER_OES targets ...
202
203
204    Change the paragaph following the description of IsTexture on p. 131:
205
206    The texture object name space, including the initial two-, and three-
207    dimensional, two-dimensional array, cube map, two-dimensional
208    multisample, and buffer texture objects, is shared among all texture
209    units. ...
210
211
212    Add new section 8.8tbo following section 8.8 "Multisample Textures":
213
214    8.8tbo Buffer Textures
215
216    In addition to the types of textures described in previous sections, one
217    additional type of texture is supported. A <buffer texture> is a
218    one-dimensional texture, consisting of a one-dimensional texel array.
219    Unlike other texture types, the texel array is not stored as part of the
220    texture. Instead, a buffer object is attached to a buffer texture and
221    the texel array is taken from that buffer object's data store. When the
222    contents of a buffer object's data store are modified, those changes are
223    reflected in the contents of any buffer texture to which the buffer
224    object is attached. Buffer textures do not have multiple image levels;
225    only a single data store is available.
226
227    The command
228
229      void TexBufferRangeOES(enum target, enum internalformat, uint buffer,
230                               intptr offset, sizeiptr size);
231
232    attaches the range of the storage for the buffer object named <buffer>
233    for <size> basic machine units, starting at <offset> (also in basic
234    machine units) to the active buffer texture, and specifies an internal
235    format for the texel array found in the range of the attached buffer
236    object. If <buffer> is zero, then any buffer object attached to the
237    buffer texture is detached, the values <offset> and <size> are ignored
238    and the state for <offset> and <size> for the buffer texture are reset
239    to zero. <target> must be TEXTURE_BUFFER_OES. <internalformat> specifies
240    the storage format and must be one of the sized internal formats found
241    in Table texbo.1.
242
243    Errors
244
245    An INVALID_ENUM error is generated if <target> is not
246    TEXTURE_BUFFER_OES.
247
248    An INVALID_ENUM error is generated if <internalformat> is not one of the
249    sized internal formats found in Table texbo.1.
250
251    An INVALID_OPERATION error is generated if <buffer> is non-zero, but is
252    not the name of an existing buffer object.
253
254    An INVALID_VALUE error is generated if <offset> is negative, if <size>
255    is less than or equal to zero, or if <offset> + <size> is greater than
256    the value of BUFFER_SIZE for the buffer bound to <target>.
257
258    An INVALID_VALUE error is generated if <offset> is not an integer
259    multiple of the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES.
260
261
262    The command
263
264      void TexBufferOES(enum target, enum internalformat, uint buffer);
265
266    is equivalent to
267
268      TexBufferRangeOES(target, internalformat, buffer, 0, size);
269
270    with <size> set to the value of BUFFER_SIZE for <buffer>.
271
272    When a range of the storage of a buffer object is attached to a buffer
273    texture, the range of the buffer's data store is taken as the texture's
274    texel array. The number of texels in the buffer texture's texel array is
275    given by
276
277      floor(<size> / (<components> * sizeof(<base_type>)),
278
279    where <components> and <base_type> are the element count and base data
280    type for elements, as specified in Table texbo.1.
281
282    The number of texels in the texel array is then clamped to the value of
283    the implementation-dependent limit MAX_TEXTURE_BUFFER_SIZE_OES. When a
284    buffer texture is accessed in a shader, the results of a texel fetch are
285    undefined if the specified texel coordinate is negative, or greater than
286    or equal to the clamped number of texels in the texel array.
287
288    When a buffer texture is accessed in a shader, an integer is provided to
289    indicate the texel coordinate being accessed. If no buffer object is
290    bound to the buffer texture, the results of the texel access are
291    undefined. Otherwise, the attached buffer object's data store is
292    interpreted as an array of elements of the GL data type corresponding to
293    <internalformat>. Each texel consists of one to four elements that are
294    mapped to texture components (R, G, B, and A). Element <m> of the texel
295    numbered <n> is taken from element <n> * <components> + <m> of the
296    attached buffer object's data store. Elements and texels are both
297    numbered starting with zero. For texture formats with signed or unsigned
298    normalized fixed-point components, the extracted values are converted to
299    floating-point values using equations 2.2 or 2.1 respectively. The
300    components of the texture are then converted to an (R,G,B,A) vector
301    according to Table texbo.1, and returned to the shader as a
302    four-component result vector with components of the appropriate data
303    type for the texture's internal format. The base data type, component
304    count, normalized component information, and mapping of data store
305    elements to texture components is specified in Table texbo.1.
306
307                                                       Component
308    Sized Internal Format Base Type  Components  Norm   0 1 2 3
309    --------------------- ---------  ----------  ----  ---------
310    R8                    ubyte      1           Yes    R 0 0 1
311    R16F                  half       1           No     R 0 0 1
312    R32F                  float      1           No     R 0 0 1
313    R8I                   byte       1           No     R 0 0 1
314    R16I                  short      1           No     R 0 0 1
315    R32I                  int        1           No     R 0 0 1
316    R8UI                  ubyte      1           No     R 0 0 1
317    R16UI                 ushort     1           No     R 0 0 1
318    R32UI                 uint       1           No     R 0 0 1
319    RG8                   ubyte      2           Yes    R G 0 1
320    RG16F                 half       2           No     R G 0 1
321    RG32F                 float      2           No     R G 0 1
322    RG8I                  byte       2           No     R G 0 1
323    RG16I                 short      2           No     R G 0 1
324    RG32I                 int        2           No     R G 0 1
325    RG8UI                 ubyte      2           No     R G 0 1
326    RG16UI                ushort     2           No     R G 0 1
327    RG32UI                uint       2           No     R G 0 1
328    RGB32F                float      3           No     R G B 1
329    RGB32I                int        3           No     R G B 1
330    RGB32UI               uint       3           No     R G B 1
331    RGBA8                 ubyte      4           Yes    R G B A
332    RGBA16F               half       4           No     R G B A
333    RGBA32F               float      4           No     R G B A
334    RGBA8I                byte       4           No     R G B A
335    RGBA16I               short      4           No     R G B A
336    RGBA32I               int        4           No     R G B A
337    RGBA8UI               ubyte      4           No     R G B A
338    RGBA16UI              ushort     4           No     R G B A
339    RGBA32UI              uint       4           No     R G B A
340        Table texbo.1, Internal Formats for Buffer Textures. For each
341        format, the data type of each element is indicated in the "Base
342        Type" column and the element count is in the "Components" column.
343        The "Norm" column indicates whether components should be treated as
344        normalized floating-point values. The "Component 0, 1, 2, and 3"
345        columns indicate the mapping of each element of a texel to texture
346        components.
347
348    In addition to attaching buffer objects to textures, buffer objects can
349    be bound to the buffer object target named TEXTURE_BUFFER_OES, in order
350    to specify, modify, or read the buffer object's data store. The buffer
351    object bound to TEXTURE_BUFFER_OES has no effect on rendering. A buffer
352    object is bound to TEXTURE_BUFFER_OES by calling BindBuffer with
353    <target> set to TEXTURE_BUFFER_OES, as described in chapter 6.
354
355
356    Modify section 8.10.3 "Texture Level Parameter Queries"
357
358    Modify the second and third paragraphs in the description of
359    GetTexLevelParameter*, on p. 173:
360
361    "<target> may be ... TEXTURE_2D_ARRAY, TEXTURE_BUFFER_OES, one of the
362    cube map face ... indicating the ... two-dimensional array texture,
363    buffer texture, one of the six distinct ...
364
365    <lod> determines which level-of-detail's state is returned. If <target>
366    is TEXTURE_BUFFER_OES, <lod> must be zero."
367
368
369    Modify section 8.18 "Texture State"
370
371    Change the first paragraph of the section on p. 191:
372
373    ... Each array has associated with it a width, height (except for buffer
374    textures), and depth ... a boolean describing whether the image is
375    compressed or not, an integer size of a compressed image, and an integer
376    containing the name of a buffer object bound as the data store of the
377    image.
378
379    Each inital texel array is null ... the compressed flag set to FALSE, a
380    zero compressed size, and the bound buffer object name is zero.
381
382    Buffer textures also contain two pointer sized integers containing the
383    offset and range of the buffer object's data store.
384
385
386    Modify section 8.22 "Texture Image Loads and Stores"
387
388    On p. 197 in the errors section for BindImageTexture, replace the
389    last error with the following:
390
391    An INVALID_OPERATION error is generated if <texture> is neither the
392    name of a buffer texture, nor the name of an immutable texture object.
393
394    Add to table 8.26 "Mapping of image load, store..."
395
396        Texture target               face/
397                                   i  j  k  layer
398        -------------------------- -- -- -- -----
399        TEXTURE_BUFFER_OES         x  -  -  -
400
401
402New State
403
404    Add to table 20.8 "Textures (selector, state per texture unit)"
405
406                                                              Initial
407    Get Value                           Type     Get Command  Value       Description                   Sec.
408    ----------------------------------  -------- -----------  ----------  ----------------------------  -----
409    TEXTURE_BINDING_BUFFER_OES          48* x Z+ GetIntegerv  0           Texture object bound          8.1
410                                                                          to TEXTURE_BUFFER_OES
411
412    Add to table 20.10 "Textures (state per texture image)"
413
414                                                                    Initial
415    Get Value                             Type  Get Command          Value   Description                 Sec.
416    ------------------------------------- ----- -------------------- ------- --------------------------- --------
417    TEXTURE_BUFFER_DATA_STORE_BINDING_OES Z+    GetTexLevelParameter 0       Buffer object bound to the  8.8tbo
418                                                                             data store for the active
419                                                                             image unit's buffer texture
420    TEXTURE_BUFFER_OFFSET_OES             n x Z GetTexLevelParameter 0       Offset into buffer's data   8.8tbo
421                                                                             store used for the active
422                                                                             image unit's buffer texture
423    TEXTURE_BUFFER_SIZE_OES               n x Z GetTexLevelParameter 0       Size of the buffer's data   8.8tbo
424                                                                             store used for the active
425                                                                             image unit's buffer texture
426
427    Modify the TEXTURE_INTERNAL_FORMAT entry in table 20.10
428
429                                                                    Initial
430    Get Value                           Type   Get Command          Value   Description                 Sec.
431    ----------------------              ----   -------------------- ------- --------------------------- ------
432    TEXTURE_INTERNAL_FORMAT             E      GetTexLevelParameter RGBA    Internal format[fn1]        8
433                                                                    or R8
434        [fn1] The initial internal format is R8 for texture buffer object
435        images, RGBA for all other texture images.
436
437
438    Add to table 20.50 "Miscellaneous"
439
440                                                           Initial
441    Get Value                           Type   Get Command Value   Description                 Sec.
442    --------------------------          ----   ----------- ------- --------------------------- ----
443    TEXTURE_BUFFER_BINDING_OES          Z+     GetIntegerv 0       Buffer object bound to      6.1
444                                                                   generic buffer texture
445                                                                   binding point
446
447
448New Implementation Dependent State
449
450    Add to table 20.41 "Implementation Dependent Values (cont.)"
451
452                                                           Minimum
453    Get Value                           Type  Get Command  Value    Description            Sec.
454    ----------------------------------- ----  -----------  -------  ---------------------  --------
455    MAX_TEXTURE_BUFFER_SIZE_OES         Z+    GetIntegerv  65536    No. of addressable     8.8tbo
456                                                                    texels for buffer
457                                                                    textures
458    TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES Z+    GetIntegerv  256 (**) Minimum required       8.8tbo
459                                                                    alignment for texture
460                                                                    buffer offsets
461
462    (**) the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES is the largest
463    allowed value.  Smaller values are permitted.
464
465Modifications to the OpenGL ES Shading Language Specification, Version 3.10
466
467    #extension GL_OES_texture_buffer: <behavior>
468
469    The above line is needed to control the GLSL features described in
470    this section.
471
472
473    A new preprocessor #define is added to the OpenGL ES Shading Language:
474
475      #define GL_OES_texture_buffer 1
476
477
478    Add the following keywords to section 3.7 "Keywords" on p. 14 and
479    remove them from the list of reserved keywords on p. 15:
480
481    samplerBuffer
482    isamplerBuffer
483    usamplerBuffer
484    imageBuffer
485    iimageBuffer
486    uimageBuffer
487
488
489    Add to section 4.1 "Basic Types"
490
491    Add to table "Floating Point Sampler Types (opaque)" on p. 20:
492
493    Type                    Meaning
494    ----------------------  ---------------------------------------
495    samplerBuffer           a handle for accessing a buffer texture
496    imageBuffer
497
498    Add to table "Signed Integer Sampler Types (opaque)" on p. 21:
499
500    Type                    Meaning
501    ----------------------- ----------------------------------------
502    isamplerBuffer          a handle for accessing an integer buffer
503    iimageBuffer            texture
504
505    Add to table "Unsigned Integer Sampler Types (opaque)" on p. 21:
506
507    Type                    Meaning
508    ----------------------- ------------------------------------------
509    usamplerBuffer          a handle for accessing an unsigned integer
510    uimageBuffer            buffer texture
511
512
513    Modify section 4.7.4 "Default Precision Qualifiers"
514
515    Add the following types to the list of types which have no default
516    precision qualifiers at the top of p. 65:
517
518    samplerBuffer
519    isamplerBuffer
520    usamplerBuffer
521    imageBuffer
522    iimageBuffer
523    uimageBuffer
524
525
526    Modify section 8.9 "Texture Functions"
527
528    Add at the end of the paragraph starting "In all functions below" on p.
529    119:
530
531    ... performing the texture access operation. No <bias> or <lod>
532    parameters for multisample textures or texture buffers are supported,
533    because mipmaps are not allowed for these types of textures.
534
535
536    Add to the table of Texture Query Functions in section 8.9.1 on p. 120:
537
538      highp int textureSize(gsamplerBuffer sampler)
539
540
541    Add to the table of Texel Lookup Functions in section 8.9.2 on p. 121:
542
543      gvec4 texelFetch(gsamplerBuffer sampler, int P)
544
545
546    Modify section 8.14 "Image Functions":
547
548    Add to the description of the IMAGE_INFO placeholder in the fourth
549    paragraph of the section, on p. 132:
550
551    The "IMAGE_INFO" in the prototypes below is a placeholder ...
552
553        gimage2DArray image, ivec3 coord
554        gimageBuffer image, int P
555
556
557    Add to the table of image functions on p. 133:
558
559        highp int imageSize(readonly writeonly gimageBuffer image)
560
561
562    Change the introduction of section 8.16 "Shader Memory Control
563    Functions":
564
565    Shaders of all types may read and write the contents of textures and
566    buffer objects using image variables. While the order of reads ...
567
568
569Dependencies on OES_shader_image_atomic
570
571    When OES_shader_image_atomic is supported, all the imageAtomic* functions
572    are supported on image buffers.
573
574
575Issues
576
577    Note: These issues apply specifically to the definition of the
578    OES_texture_buffer specification, which is based on the OpenGL
579    extension ARB_texture_buffer_object as updated in OpenGL 4.x. Resolved
580    issues from ARB_texture_buffer_object have been removed (with the
581    exception of issue 6, which is copied from issue 12 of the ARB
582    extension), but remain largely applicable to this extension.
583    ARB_texture_buffer_object can be found in the OpenGL Registry.
584
585    (1) What functionality was removed from ARB_texture_buffer_object?
586
587      - Support for sized buffer formats R16, RG16, and RGBA16, and for
588        MapBuffer and GetBufferSubData is removed since they do not exist
589        in ES 3.0.
590      - Support for ALPHA and LUMINANCE buffer textures is removed since
591        they are legacy formats in ES 3.0, and there are no sized ALPHA or
592        LUMINANCE formats.
593      - GL 4.4 extended support for buffer textures to the
594        GetInternalformativ query <target>, but that command in ES 3.0 is
595        restricted to returning multisampling information, which is
596        irrelevant to buffer textures.
597      - Support for TEXTURE_BUFFER_FORMAT is removed. Use the
598        GetTexLevelParameter* TEXTURE_INTERNAL_FORMAT query instead.
599
600    (2) What functionality was changed and added relative to
601        ARB_texture_buffer_object?
602
603      - OES_texture_buffer more closely matches OpenGL 4.4 language,
604        rather than ARB_texture_buffer_object language.
605        * Support for querying buffer texture state with
606          GetTexLevelParameter* is added
607        * Support for sized R, RG, and RGB formats is added. Per issue (2)
608          of ARB_texture_buffer_object, some formats supported by ES 3.0 but
609          which may present hardware difficulties are not supported,
610          including R*8_SNORM and all RGB formats other than RGB32*.
611      - Interactions were added with OpenGL ES 3.1 and other OES extension
612        functionality, primarily shader memory access as well as texture
613        level parameter queries.
614      - incorporates the ability to bind a sub-range of a buffer from
615        ARB_texture_buffer_range.
616
617    (3) What should the rules on GLSL suffixing be?
618
619    RESOLVED: The new sampler and image types are reserved keywords in
620    ESSL 3.00 so they can be use without prefix/suffixes.
621
622    (4) Do we want the ARB_texture_buffer_range functionality present in GL
623        4.4? This adds useful functionality (backing the buffer texture with
624        a selected part of a buffer object) at low increase in complexity of
625        the spec.
626
627    RESOLVED: Yes, this functionality is included in this extension.
628
629    (5) How is the various buffer texture-related state queried?
630
631        There are three pieces of state that can be queried:
632            (a) the texture object bound to buffer texture binding point for
633                the active texture image unit (TEXTURE_BINDING_BUFFER_OES).
634            (b) the buffer object whose data store was used by that texture
635                object (TEXTURE_BUFFER_DATA_STORE_BINDING_OES).
636            (c) the buffer object bound to the TEXTURE_BUFFER_OES binding
637                point (TEXTURE_BUFFER_BINDING_OES).
638
639        The first and last are queried with GetIntegerv, but the second is
640        queried with GetTexLevelParameter. Note that for (a) and (b), the
641        texture queried is the one bound to TEXTURE_BUFFER_EXT on the active
642        texture image unit.
643
644    (6) Should the R16, RG16 and RGBA16 texture formats be supported?
645
646    RESOLVED.  No. OpenGL ES 3.0 does not support these formats. They were
647    considered for late addition to OpenGL ES 3.1 in Bug 11366, but didn't
648    make the cut. In the absence of another extension to add them, they
649    are not supported here either.
650
651    (7) OpenGL ES 3.1 does not allow images to be created from mutable
652    textures (ie those created with TexImage). How does this affect
653    this extension?
654
655    RESOLVED. Buffer textures would technically be considered mutable
656    since they are not defined by a TexStorage command and it is possible
657    to redefine the buffer storage which backs them. However there is
658    currently no ES API for creating immutable buffers
659    (ARB_buffer_storage does this for GL) and thus we must allow mutable
660    buffers to back buffer textures.
661
662    (8) This extension is called OES_texture_buffer, but the desktop name
663    is {EXT,ARB}_texture_buffer_object. Is the name change intentional?
664
665    RESOLVED. Yes. We want to avoid extensions in ES and GL that have the
666    same name, but not the same functionality (except as a subset).
667
668    OES_texture_buffer includes the functionality of ARB_texture_buffer_object,
669    ARB_texture_buffer_range, and  ARB_texture_buffer_rgb32, along with some
670    changes that were made with how those operate GL 4.4.  It would have been
671    too messy and confusing to try to incorporate all these into the existing
672    EXT_texture_buffer_object spec from GL as interactions with ES.
673
674
675Revision History
676
677    Rev.    Date      Author    Changes
678    ----  ----------  --------- -------------------------------------------------
679     2    07/14/2014  dkoch     Clarify that TEXTURE_BUFFER_DATA_STORE_BINDING_EXT
680                                is queried with GetTexLevelParameter not
681                                GetIntegerv (Bug 12343). Fix types in unsigned
682                                sampler types table (Bug 12356)
683
684     1    06/18/2014  dkoch     Initial OES version based on EXT.
685                                No functional changes.
686