• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    ARB_sampler_objects
4
5Name Strings
6
7    GL_ARB_sampler_objects
8
9Contact
10
11    Graham Sellers, AMD (graham.sellers 'at' amd.com)
12
13Contributors
14
15    Graham Sellers, AMD
16    Jaakko Konttinen, AMD
17    Jeff Bolz, NVIDIA
18    Daniel Koch, TransGaming
19    Bruce Merry, ARM
20
21Notice
22
23    Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
24        http://www.khronos.org/registry/speccopyright.html
25
26Specification Update Policy
27
28    Khronos-approved extension specifications are updated in response to
29    issues and bugs prioritized by the Khronos OpenGL Working Group. For
30    extensions which have been promoted to a core Specification, fixes will
31    first appear in the latest version of that core Specification, and will
32    eventually be backported to the extension document. This policy is
33    described in more detail at
34        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
35
36Status
37
38    Complete. Approved by the ARB at the 2010/01/22 F2F meeting.
39    Approved by the Khronos Board of Promoters on March 10, 2010.
40
41Version
42
43    Version 13, November 12, 2014
44
45Number
46
47    ARB Extension #81
48
49Dependencies
50
51    This extension is written against the OpenGL 3.2 (Compatibility
52    Profile) specification.
53
54    This extension interacts with EXT_texture_filter_anisotropic.
55
56    OpenGL 1.0 is required.
57
58Overview
59
60    In unextended OpenGL textures are considered to be sets of image
61    data (mip-chains, arrays, cube-map face sets, etc.) and sampling
62    state (sampling mode, mip-mapping state, coordinate wrapping and
63    clamping rules, etc.) combined into a single object. It is typical
64    for an application to use many textures with a limited set of
65    sampling states that are the same between them. In order to use
66    textures in this way, an application must generate and configure
67    many texture names, adding overhead both to applications and to
68    implementations. Furthermore, should an application wish to sample
69    from a texture in more than one way (with and without mip-mapping,
70    for example) it must either modify the state of the texture or
71    create two textures, each with a copy of the same image data. This
72    can introduce runtime and memory costs to the application.
73
74    This extension separates sampler state from texture image data. A
75    new object type is introduced, the sampler (representing generic
76    sampling parameters). The new sampler objects are represented by a
77    new named type encapsulating the sampling parameters of a
78    traditional texture object. Sampler objects may be bound to texture
79    units to supplant the bound texture's sampling state. A single
80    sampler may be bound to more than one texture unit simultaneously,
81    allowing different textures to be accessed with a single set of
82    shared sampling parameters. Also, by binding different sampler
83    objects to texture units to which the same texture has been bound,
84    the same texture image data may be sampled with different sampling
85    parameters.
86
87IP Status
88
89    No known IP claims.
90
91New Procedures and Functions
92
93    void GenSamplers(sizei count, uint *samplers);
94    void DeleteSamplers(sizei count, const uint * samplers);
95    boolean IsSampler(uint sampler);
96    void BindSampler(uint unit, uint sampler);
97    void SamplerParameteri(uint sampler, enum pname, int param);
98    void SamplerParameterf(uint sampler, enum pname, float param);
99    void SamplerParameteriv(uint sampler, enum pname, const int *params);
100    void SamplerParameterfv(uint sampler, enum pname, const float *params);
101    void SamplerParameterIiv(uint sampler, enum pname, const int *params);
102    void SamplerParameterIuiv(uint sampler, enum pname, const uint *params);
103    void GetSamplerParameteriv(uint sampler, enum pname, int *params);
104    void GetSamplerParameterfv(uint sampler, enum pname, float *params);
105    void GetSamplerParameterIiv(uint sampler, enum pname, int *params);
106    void GetSamplerParameterIuiv(uint sampler, enum pname, uint *params);
107
108New Tokens
109
110    Accepted by the <value> parameter of the GetBooleanv, GetIntegerv,
111    GetInteger64v, GetFloatv and GetDoublev functions:
112
113        SAMPLER_BINDING                                 0x8919
114
115Additions to Chapter 2 of the OpenGL 3.2 Specification (Compatibility Profile) (OpenGL Operation)
116
117    None.
118
119Additions to Chapter 3 of the OpenGL 3.2 Specification (Compatibility Profile) (Rasterization)
120
121    Additions to Section 3.8.12 Texture Completeness
122
123    Add subheading "Effects of Sampler Objects on Texture Completeness"
124
125    If a sampler object and a texture object are simultaneously bound to
126    the same texture unit, then the sampling state for that unit is
127    taken from the sampler object (see section 3.9.2, "Sampler
128    Objects"). This can have an effect on the effective completeness of
129    the texture. In particular, if the texture is not mipmap complete
130    and the sampler object specifies a MIN_FILTER requiring mipmaps, the
131    texture will be considered incomplete for the purposes of that
132    texture unit. However, if the sampler object does not require
133    mipmaps, the texture object will be considered complete. This means
134    that a texture can be considered both complete and incomplete
135    simultaneously if it is bound to two or more texture units along
136    with sampler objects with different states.
137
138    Additions to Section 3.9 Texturing
139
140    Modify the prologue to Section 3.9 as follows:
141
142    Renumber Section 3.9.14 "Texture Objects" to Section 3.9.1. renumber
143    subsequent sections
144
145    Replace Section 3.9.1 "Texture Objects"
146
147    3.9.1 Texture Objects
148    ---------------------
149
150    Textures in GL are represented by named objects. The name space for
151    texture objects is the unsigned integers, with zero reserved by the
152    GL to represent the default texture object. The default texture
153    object is bound to each of the TEXTURE_1D, TEXTURE_2D, TEXTURE_3D,
154    TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE,
155    TEXTURE_BUFFER, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, and
156    TEXTURE_2D_MULTISAMPLE_ARRAY targets during context initialization.
157
158    A new texture object is created by binding an unused name to one of
159    these texture targets. The command
160
161        void GenTextures( sizei n, uint *textures );
162
163    returns <n> previously unused texture names in <textures>. These
164    names are marked as used, for the purposes of GenTextures only, but
165    they acquire texture state and a dimensionality only when they are
166    first bound, just as if they were unused. The binding is effected by
167    calling
168
169        void BindTexture( enum target, uint texture );
170
171    with <target> set to the desired texture target and <texture> set to
172    the unused name. The resulting texture object is a new state vector,
173    comprising all the state and with the same initial values listed in
174    section 3.9.13. The new texture object bound to <target> is, and
175    remains a texture of the dimensionality and type specified by
176    <target> until it is deleted.
177
178    BindTexture may also be used to bind an existing texture object to
179    any of these targets. The error INVALID_OPERATION is generated if an
180    attempt is made to bind a texture object of different dimensionality
181    than the specified <target>. If the bind is successful no change is
182    made to the state of the bound texture object, and any previous
183    binding to <target> is broken.
184
185** This error applies only to 3.2 core profile / 3.1 w/o ARB_compatibility /
186** 3.0 deprecated contexts.
187    BindTexture fails and an INVALID_OPERATION error is generated if
188    <texture> is not zero or a name returned from a previous call to
189    GenTextures, or if such a name has since been deleted. While a
190    texture object is bound, GL operations on the target to which it is
191    bound affect the bound object, and queries of the target to which it
192    is bound return state from the bound object. If texture mapping of
193    the dimensionality of the target to which a texture object is bound
194    is enabled, the state of the bound texture object directs the
195    texturing operation.
196
197    Texture objects are deleted by calling
198
199        void DeleteTextures( sizei n, uint *textures );
200
201    <textures> contains <n> names of texture objects to be deleted.
202    After a texture object is deleted, it has no contents or
203    dimensionality, and its name is again unused. If a texture that is
204    currently bound to any of the target bindings of BindTexture is
205    deleted, it is as though BindTexture had been executed with the same
206    target and texture zero. Additionally, special care must be taken
207    when deleting a texture if any of the images of the texture are
208    attached to a framebuffer object. See section 4.4.2 for details.
209
210    Unused names in <textures> are silently ignored, as is the name zero.
211
212    The texture object name space, including the initial one-, two-, and
213    three- dimensional, one- and two-dimensional array, rectangular,
214    buffer, cube map, two-dimensional multisample, and two-dimensional
215    multisample array texture objects, is shared among all texture
216    units. A texture object may be bound to more than one texture unit
217    simultaneously. After a texture object is bound, any GL operations
218    on that target object affect any other texture units to which the
219    same texture object is bound.
220
221    Texture binding is affected by the setting of the state
222    ACTIVE_TEXTURE. If a texture object is deleted, it as if all texture
223    units which are bound to that texture object are rebound to texture
224    object zero.
225
226    Insert new Section 3.9.2 "Sampler Objects", renumber subsequent
227    sections.
228
229    3.9.2 Sampler Objects
230    ---------------------
231
232    The state necessary for texturing can be divided into two categories
233    as described in Section 3.9.13. An OpenGL texture object represents
234    both sets. The first set represents dimensionality and other image
235    parameters, and the second set represents sampling state.
236    Additionally, a sampler object may be created to encapsulate only
237    the second set, or the sampling state, of a texture object.
238
239    A new sampler object is created by binding an unused name to a
240    texture unit. The command
241
242        void GenSamplers( sizei count, uint *samplers );
243
244    returns <count> previously unused sampler object names in
245    <samplers>. The name zero is reserved by the GL to represent no
246    sampler being bound to a sampler unit. The names are marked as used,
247    for the purposes of GenSamplers only, but they acquire state only
248    when they are first used as a parameter to BindSampler,
249    SamplerParameter*, GetSamplerParameter*, or IsSampler. When a
250    sampler object is first used in one of these functions, the
251    resulting sampler object is initialized with a new state vector,
252    comprising all the state and with the same initial values listed in
253    table 6.23.
254
255    When a sampler object is bound to a texture unit, its state
256    supersedes that of the texture object bound to that texture unit. If
257    the sampler name zero is bound to a texture unit, the currently
258    bound texture's sampler state becomes active. A single sampler
259    object may be bound to multiple texture units simultaneously.
260
261    A sampler binding is effected by calling
262
263        void BindSampler( uint unit, uint sampler );
264
265    with <unit> set to the texture unit to which to bind the sampler and
266    <sampler> set to the name of a sampler object returned from a
267    previous call to GenSampler.
268
269    <unit> must be between zero and the value of
270    MAX_TEXTURE_IMAGE_UNITS-1. <sampler> is the name of a sampler object
271    that has previously been reserved by a call to GenSamplers.
272
273    If the bind is successful no change is made to the state of the
274    bound sampler object, and any previous binding to <unit> is broken.
275
276    BindSampler fails and an INVALID_OPERATION error is generated if
277    <sampler> is not zero or a name returned from a previous call to
278    GenSamplers, or if such a name has since been deleted with
279    DeleteSamplers. An INVALID_VALUE error is generated if <unit> is
280    greater than or equal to the value of
281    MAX_COMBINED_TEXTURE_IMAGE_UNITS.
282
283    If state is present in a sampler object bound to a texture unit that
284    would have been rejected by a call to TexParameter for the texture
285    bound to that unit, the behavior of the implementation is as if the
286    texture were incomplete. For example, if TEXTURE_WRAP_S,
287    TEXTURE_WRAP_T or TEXTURE_WRAP_R is set to REPEAT or MIRRORED_REPEAT
288    on the sampler object bound to a texture unit and the texture bound
289    to that unit is a TEXTURE_RECTANGLE, the texture will be considered
290    incomplete.
291
292    The currently bound sampler may be queried by calling GetIntegerv
293    with <pname> set to SAMPLER_BINDING. When a sampler object is
294    unbound from the texture unit (by binding another sampler object, or
295    the sampler object named zero, to that texture unit) the modified
296    state is again replaced with the sampler state associated with the
297    texture object bound to that texture unit.
298
299    The parameters represented by a sampler object are a subset of those
300    described in Section 3.9.6 "Texture Parameters". Each parameter of a
301    sampler object is set by calling
302
303        void SamplerParameter{if}{v}( uint sampler, enum pname, T param );
304        void SamplerParameterI{u ui}v( uint sampler, enum pname, T *params );
305
306    <sampler> is the name of a sampler object previously reserved by a
307    call to GenSamplers. <pname> is the name of a parameter to modify
308    and <param> is the new value of that parameter. An INVALID_OPERATION
309    error is generated if <sampler> is not the name of a sampler object
310    previously returned from a call to GenSamplers. The values accepted
311    in the <pname> parameter are TEXTURE_WRAP_S, TEXTURE_WRAP_T,
312    TEXTURE_WRAP_R, TEXTURE_MIN_FILTER, TEXTURE_MAG_FILTER,
313    TEXTURE_BORDER_COLOR, TEXTURE_MIN_LOD, TEXTURE_MAX_LOD,
314    TEXTURE_LOD_BIAS, TEXTURE_COMPARE_MODE, TEXTURE_COMPARE_FUNC and
315    TEXTURE_MAX_ANISOTROPY_EXT. Texture state listed in table 6.22 but
316    not listed here and in the sampler state in table 6.23 is not part
317    of the sampler state, and remains in the texture object.
318
319    If the values for TEXTURE_BORDER_COLOR are specified with a call to
320    SamplerParameterIiv or SamplerParameterIuiv, the values are
321    unmodified and stored with an internal data type of integer. If
322    specified with SamplerParameteriv, they are converted to
323    floating-point using equation 2.2. Otherwise, the values are
324    unmodified and stored as floating-point.
325
326    An INVALID_ENUM error is generated if <pname> is not the name of a
327    parameter accepted by SamplerParameter*. If the value of <param> is
328    not an acceptable value for the parameter specified in <pname>, an
329    error is generated as specified in the description of TexParameter*.
330
331    Modifying a parameter of a sampler object affects all texture units
332    to which that sampler object is bound. Calling TexParameter has no
333    effect on the sampler object bound to the active texture unit. It
334    will modify the parameters of the texture object bound to that unit.
335
336    Sampler objects are deleted by calling
337
338        void DeleteSamplers( sizei count, const uint *samplers );
339
340    <samplers> contains <count> names of sampler objects to be deleted.
341    After a sampler object is deleted, its name is again unused. If a
342    sampler object that is currently bound to a sampler unit is deleted,
343    it is as though BindSampler is called with <unit> set to the unit
344    the sampler is bound to and <sampler> zero. Unused names in
345    <samplers> are silently ignored, as is the reserved name zero.
346
347Additions to Chapter 4 of the OpenGL 3.2 Specification (Compatibility Profile) (Per-Fragment Operations and the Framebuffer)
348
349    None.
350
351Additions to Chapter 5 of the OpenGL 3.2 Specification (Compatibility Profile) (Special Functions)
352
353    Add a new category of commands not usable in display lists
354    to section 5.4.1:
355
356   "Sampler objects: GenSamplers and DeleteSamplers."
357
358Additions to Chapter 6 of the OpenGL 3.2 Specification (Compatibility Profile) (State and State Requests)
359
360    Insert new section 6.1.5 "Sampler Queries" following existing
361    section 6.1.4 and renumber following sections:
362
363    6.1.5 Sampler Queries
364
365    The command
366
367        boolean IsSampler( uint sampler );
368
369    may be called to determine whether <sampler> is the name of a
370    sampler object IsSampler will return TRUE if <sampler> is the name
371    of a sampler object previously returned from a call to GenSamplers
372    and FALSE otherwise. Zero is not the name of a sampler object. The
373    current values of the parameters of a sampler object may be queried
374    by calling
375
376        void GetSamplerParameter{if}v( uint sampler, enum pname, T *params );
377        void GetSamplerParameterI{i ui}v( uint sampler, enum pname, T *params );
378
379    <sampler> is the name of the sampler object from which to retrieve
380    parameters. <pname> is the name of the parameter whose value to
381    retrieve and <params> is the address of an array into which the
382    current value of the desired parameter will be placed.
383    GetSamplerParameter* accepts the same values for <pname> as
384    SamplerParameter*. An INVALID_OPERATION error is generated if
385    <sampler> is not the name of a sampler object previously returned
386    from a call to GenSamplers. An INVALID_ENUM error is generated if
387    <pname> is not the name of a parameter accepted by
388    GetSamplerParameter*.
389
390    Querying value TEXTURE_BORDER_COLOR with GetSamplerParameterIiv or
391    GetSamplerParameterIuiv returns the border color values as signed
392    integers or unsigned integers, respectively; otherwise the values
393    are returned as described in section 6.1.2. If the border color is
394    queried with a type that does not match the original type with which
395    it was specified, the result is undefined.
396
397
398    In section 6.1.19, append to the paragraph starting "When PushAttrib
399    is called with TEXTURE_BIT set...":
400
401   "... are restored to their pushed values. The bindings and state for
402    sampler objects are not pushed or popped."
403
404Additions to Appendix A of the OpenGL 3.2 Specification (Compatibility Profile) (Invariance)
405
406    None.
407
408Interactions with EXT_texture_filter_anisotropic
409
410    If EXT_texture_filter_anisotropic is not supported, remove all
411    references to TEXTURE_MAX_ANISOTROPY_EXT.
412
413Additions to the AGL/GLX/WGL Specifications
414
415    None.
416
417GLX Protocol
418
419    None.
420
421Errors
422
423    INVALID_OPERATION is generated by BindSampler if <sampler> is not
424    zero or a name returned from a previous call to GenSamplers.
425
426    INVALID_VALUE is generated by BindSampler if <unit> is greater than
427    MAX_TEXTURE_IMAGE_UNITS-1.
428
429    INVALID_OPERATION is generated by SamplerParameter* and
430    GetSamplerParameter* if <sampler> is not a name returned from a
431    previous call to GenSamplers.
432
433New State
434
435    Append to Table 6.20, "Textures (state per texture unit and binding point)"
436
437    +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+
438    | Get Value             | Type      | Get Command       | Initial Value   | Description             | Sec    | Attribute  |
439    +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+
440    | SAMPLER_BINDING       | 48* x Z+  | GetIntegerv       | 0               | Sampler object bound    | 3.9.2  | -          |
441    |                       |           |                   |                 | to active texture unit  |        |            |
442    +-----------------------+-----------+-------------------+-----------------+-------------------------+--------+------------+
443
444    Add new Table 6.23, "Textures (state per sampler object)", renumber subsequent tables.
445
446    +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+
447    | Get Value                 | Type      | Get Command          | Initial Value          | Description                  | Sec    | Attribute  |
448    +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+
449    | TEXTURE_BORDER_COLOR      | n x C     | GetSamplerParameter  | 0,0,0,0                | Border color                 | 3.9    | -          |
450    | TEXTURE_MIN_FILTER        | n x Z6    | GetSamplerParameter  | NEAREST_MIPMAP_LINEAR  | Minification function        | 3.9.9  | -          |
451    | TEXTURE_MAG_FILTER        | n x Z2    | GetSamplerParameter  | LINEAR                 | Magnification function       | 3.9.10 | -          |
452    | TEXTURE_WRAP_S            | n x Z5    | GetSamplerParameter  | REPEAT                 | Texcoord s wrap mode         | 3.9.9  | -          |
453    | TEXTURE_WRAP_T            | n x Z5    | GetSamplerParameter  | REPEAT                 | Texcoord t wrap mode         | 3.9.9  | -          |
454    | TEXTURE_WRAP_R            | n x Z5    | GetSamplerParameter  | REPEAT                 | Texcoord r wrap mode         | 3.9.9  | -          |
455    | TEXTURE_MIN_LOD           | n x R     | GetSamplerParameter  | -1000                  | Minimum level of detail      | 3.9    | -          |
456    | TEXTURE_MAX_LOD           | n x R     | GetSamplerParameter  | 1000                   | Maximum level of detail      | 3.9    | -          |
457    | TEXTURE_LOD_BIAS          | n x R     | GetSamplerParameter  | 0.0                    | Texture level of detail      | 3.9.9  | -          |
458    |                           |           |                      |                        | bias (biastexobj)            |        |            |
459    | TEXTURE_COMPARE_MODE      | n x Z2    | GetSamplerParameter  | NONE                   | Comparison mode              | 3.9.16 | -          |
460    | TEXTURE_COMPARE_FUNC      | n x Z8    | GetSamplerParameter  | LEQUAL                 | Comparison function          | 3.9.16 | -          |
461    | TEXTURE_MAX_ANISOTROPY_EXT| n x R     | GetSamplerParameter  | 1.0                    | Maximum degree of anisotropy | 3.9    | -          |
462    +---------------------------+-----------+----------------------+------------------------+------------------------------+--------+------------+
463
464New Implementation Dependent State
465
466    None.
467
468Issues
469
470    1) Should BindSampler take a <target> parameter?
471
472    DISCUSSION: Currently it does not. Binding a sampler to a texture
473    unit binds it to all targets. Binding a texture to a target of a
474    texture unit continues to determine the target precedence.
475
476    2) What is the set of state associated with a sampler object?
477       Specifically, should TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL be
478       part of the sampler or the texture?
479
480    DISCUSSION: TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL are presently
481    part of the image state (texture) and are thus not included in the
482    sampler object. TEXTURE_WRAP_S, TEXTURE_WRAP_T, TEXTURE_WRAP_R,
483    TEXTURE_MIN_FILTER, TEXTURE_MAG_FILTER, TEXTURE_BORDER_COLOR,
484    TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_LOD_BIAS,
485    TEXTURE_COMPARE_MODE, TEXTURE_COMPARE_FUNC are the states included
486    in the sampler object.
487
488    3) How would one use the same sampler state to access multiple
489       textures?
490
491    DISCUSSION: Generate a sampler object, set its state. Then, bind the
492    same sampler object to multiple texture units (perhaps with
493    different textures bound to them) and use those units as usual.
494
495    4) How would one access the same texture with different samplers?
496
497    DISCUSSION: Generate a sampler object for each intended set of
498    sampling parameters and bind them to different texture units. Bind
499    the same texture to each of those units. That same texture will be
500    sampled according to the parameters contained in the sampler object
501    bound to the respective unit.
502
503    5) Does it matter what order samplers and textures are bound to
504       texture units?
505
506    No. As long as a sampler is bound to a texture unit, it acts as the
507    source of the sampler state for that unit. Textures may be switched
508    in and out without affecting the sampler state. This includes the
509    default texture object.
510
511    6) If a sampler object is bound to multiple texture units and its
512    state is modified, is that state visible to all of those units?
513
514    Yes.
515
516    7) Should sampler objects be made visible to the shading language.
517
518    This is left for a future extension. Separating samplers and texture
519    images in the shader allows for a run-time combinatorial explosion
520    of sampler- texture pairs that would be difficult to count. It is
521    also very clumsy to specify in a way that interacts cleanly with
522    prior versions of OpenGL. This may become more feasible to apply
523    against a future version of OpenGL, but this extension is applicable
524    to any version of OpenGL.
525
526    8) Can sampler objects be shared between contexts?
527
528    Yes. The semantics of sharing a sampler object between contexts is
529    the same as that of sharing texture objects.
530
531    9) What happens when a sampler object bound to a texture unit has a
532       parameter that is incompatible with the texture that is bound to
533       that unit?
534
535    The behavior is as if the texture is incomplete.
536
537    10) When are sampler objects created? When do they start to exist?
538
539    Sampler objects are created when they are first used by any function
540    taking the name of a sampler object as a parameter. Their names must
541    be reserved by a call to GenSamplers. For all intents and purposes,
542    it is as if they start existing when GenSamplers creates their
543    names.
544
545Revision History
546
547    Rev.    Date      Author    Changes
548    ----  ----------  --------- -----------------------------------------
549    13    11/12/2014  Jon Leech Fix spelling of TEXTURE_MAX_ANISOTROPY
550                                (public Bug 1263).
551    12    07/22/2011  Jon Leech Fix valid <unit> values to be based
552                                on MAX_COMBINED_TEXTURE_IMAGE_UNITS
553                                instead of MAX_TEXTURE_IMAGE_UNITS (bug
554                                6406).
555    11    07/07/2010  Jon Leech Do not allow sampler bindings and sampler
556                                object state to be pushed and popped, by
557                                modifying all new state table entries to
558                                have no attribute group and adding a
559                                clarifying statement in section 6.1.20.
560                                Do not allow GenSamplers and
561                                DeleteSamplers in display lists (bug
562                                6056).
563    10    03/29/2010  pbrown    Further fixes in the listed prototypes;
564                                use separate lines for external parsing.
565     9    03/27/2010  pbrown    Fix an incorrect prototype for BindSampler
566                                in the new functions section (bug 6146).
567     8    03/22/2010  Jon Leech Change error for invalid <sampler> names
568                                passed to *SamplerParameter* from
569                                INVALID_VALUE to INVALID_OPERATION for
570                                consistency (bug 6026). Expand Errors
571                                section. Reformat to 80 columns.
572     7    02/10/2010  Jon Leech Add const to SamplerParameter*v 'params'.
573     6    01/26/2010  pbrown    Assign enum for SAMPLER_BINDING.
574     5    01/05/2010  gsellers  Add SamplerParameterI*, GetSamplerParameterI*
575                                (bug 5806).
576                                Fix ambiguity about when sampler objects
577                                are created. Samplers names are reserved
578                                by GenSamplers but actually created
579                                (default state initialized) on first
580                                use. There is no bind-to-create for
581                                sampler objects. (bug 5813).
582                                Add language about effect of sampler
583                                objects on effective texture
584                                completeness (bug 5838). Specify that
585                                illegal sampler states for particular
586                                texture types result in incomplete
587                                textures, rather than undefined
588                                behavior.
589     4    12/11/2009  Jon Leech Reorganization and consistency edits
590                                resulting from 3.3 spec integration.
591                                Remove ARB suffixes.
592     3    11/19/2009  gsellers  Feedback from bmerry.
593     2    11/11/2009  gsellers  Incorporate feedback.
594     1    11/09/2009  gsellers  Initial version based on draft
595                                EXT_separate_sampler_objects.
596