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