CompileShader generates INVALID_OPERATION if shader is not the name of a valid shader object generated by CreateShader. Not necessary to test--this behaviour was contradictory and removed in a later version of GL. If an active query object is deleted its name immediately becomes unused, but the underlying object is not deleted until it is no longer active. RGB_INTEGER, RGBA_INTEGER, and BGRA_I pixel formats are added to table 3.5. The error for setting TEXTURE_BASE_LEVEL to a value other than zero is changed from INVALID_ENUM to INVALID_VALUE. I believe Paul's referring to the TEXTURE_RECTANGLE case here, since zero is the only allowable value for that target. If drawbuffer zero is not NONE and the buffer it references has an integer format, the SAMPLE_ALPHA_TO_COVERAGE and SAMPLE_ALPHA_TO_ONE operations are skipped. Functions GetQueryObjecti64v and GetQueryObjectui64v are added. GLSL version 3.30 must be supported. __VERSION__ should substitute 330. GLSL 1.40, 1.50, and 3.30 shaders may be linked together. The "#line x" directive signals line number x. Previously it signalled line number x+1 (presumably this was a spec error in GLSL 1.50). Shaders no longer need to declare "#extension GL_ARB_explicit_attrib_location..." to take advantage of this functionality. Vertex shaders allow location to be specified on input variable declarations. For example: layout(location = 3) in vec4 normal; is equivalent to: glBindAttribLocation(prog, 3, "normal"); A link error will occur if an input variable is declared in multiple vertex shaders with conflicting locations. A link error will occur if an input variable is assigned a location greater than or equal to MAX_VERTEX_ATTRIBS. If an active attribute has a binding explicitly set within the shader text and a different binding assigned by BindAttribLocation, the assignment in the shader text is used. Vertex shaders cannot have output layout qualifiers. Fragment shaders allow location to be specified on output variable declarations. For example: layout(location = 3, index = 1) out vec4 factor; establishes that factor is copied out to fragment color 3 as the second (index one) input to the blend equation. In a fragment shader output location declaration, if index is specified, location must also be specified. In a fragment shader output location declaration, if index is not specified, it defaults to 0. A link error will occur if an output variable is declared in multiple fragment shaders with conflicting locations or index values. If a fragment output variable has a binding explicitly set within the shader text and a different binding assigned by BindFragDataLocationIndexed or BindFragDataLocation, the assignment in the shader text is used. Shaders no longer need to declare "#extension GL_ARB_shader_bit_encoding..." to take advantage of this functionality. Function floatBitsToInt is added. Function intBitsToFloat is added. Functions VertexAttribP{1234}ui and VertexAttribP{1234}uiv are added. When VertexAttribP{1234}ui and VertexAttribP{1234}uiv are used, the type parameter must be INT_2_10_10_10_REV or UNSIGNED_INT_2_10_10_10_REV. The "normalized" parameter of VertexAttribP{1234}ui and VertexAttribP{1234}uiv specify whether input data is normalized. During normalization, the conversion rules specified in equations 2.1 and 2.2 are followed. The types INT_2_10_10_10_REV and UNSIGNED_INT_2_10_10_10_REV may be passed as the type parameter to VertexAttribPointer. If INT_2_10_10_10_REV or UNSIGNED_INT_2_10_10_10_REV is passed to VertexAttribPointer, the size must be either 4 or BGRA. Section 2.8.2 describes the precise format of INT_2_10_10_10_REV and UNSIGNED_INT_2_10_10_10_REV vertex data formats. The function VertexAttribDivisor is added. Instanced elements advance per instance depending on the value of the specified divisor. VertextAttribDivisor generates INVALID_VALUE if index is greater than or equal to MAX_VERTEX_ATTRIBS. VERTEX_ATTRIB_ARRAY_DIVISOR may be passed to GetVertexAttrib* functions. VERTEX_ATTRIB_ARRAY_DIVISOR defaults to 0. Vertex shader texture access (and by extension, geometry shader texture access) may be modified by texture swizzle. Fragment shader texture access may be modified by texture swizzle. TexParameter functions now accept TEXTURE_SWIZZLE_R, TEXTURE_SWIZZLE_G, TEXTURE_SWIZZLE_B, TEXTURE_SWIZZLE_A, or TEXTURE_SWIZZLE_RGBA. GetTexParameter now accepts TEXTURE_SWIZZLE_R, TEXTURE_SWIZZLE_G, TEXTURE_SWIZZLE_B, or TEXTURE_SWIZZLE_A. Functions GenSamplers and DeleteSamplers are added. When a sampler object is bound to a texture unit using BindSampler, its state supersedes that of the texture object bound to that texture unit. If the sampler name zero is bound to a texture unit, the currently bound texture’s sampler state becomes active. A single sampler object may be bound to multiple texture units simultaneously. Section 3.8.2 contains many rules for how sampler objects behave. Effects of Sampler Objects on Texture Completeness If a sampler object and a texture object are simultaneously bound to the same texture unit, then the sampling state for that unit is taken from the sampler object (see section 3.8.2). This can have an effect on the effective completeness of the texture. In particular, if the texture is not mipmap complete and the sampler object specifies a TEXTURE_MIN_FILTER requiring mipmaps, the texture will be considered incomplete for the purposes of that texture unit. However, if the sampler object does not require mipmaps, the texture object will be considered complete. This means that a texture can be considered both complete and incomplete simultaneously if it is bound to two or more texture units along with sampler objects with different states. IsSampler() may be called to determine whether sampler is the name of a sampler object. The current values of a sampler object may be queried using GetSamplerParameter{if}v and GetSamplerParameterI{i ui}v. Piglit's sampler-objects.c tests some pnames, but not all of them. Mesa appears to accept legacy pnames even in core profile. GetSamplerParameter{if}v and GetSamplerParameterI{i ui}v generate INVALID_VALUE if the sampler is not the name of a valid sampler, and INVALID_ENUM if pname is not the name of a valid property. Querying TEXTURE_BORDER_COLOR with GetSamplerParameterIiv or GetSamplerParameterIuiv returns the border color values as signed integers or unsigned integers, respectively; otherwise the values are returned as described in section 6.1.2. The sampler object bound to a texture unit may be queried using GetIntegerv(SAMPLER_BINDING). The function BindFragDataLocationIndexed is added. The function GetFragDataIndex is added. Linking will fail if if the program has an active output assigned to a location greater than or equal to the value of MAX_DUAL_SOURCE_DRAW_BUFFERS and has an active output assigned an index greater than or equal to one. The value of MAX_DUAL_SOURCE_DRAW_BUFFERS must be at least 1. INVALID_OPERATION is generated by drawing functions if any draw buffers greater than or equal to MAX_DUAL_SOURCE_DRAW_BUFFERS have values other than NONE while either blend function requires the second color input for any draw buffer. Multisample fragment operations are performed using alpha values from fragment shader output number 0, index 0. The blending formulas are extended to allow for an additional source color. Query type ANY_SAMPLES_PASSED is added. For occlusion queries with target ANY_SAMPLES_PASSED, if the number of bits is non-zero, the minimum number of bits is 1. The QueryCounter function is added. Timer queries can be used within a BeginQuery/EndQuery block where the target is TIME_ELAPSED and it does not affect the result of that query object. QueryCounter generates INVALID_OPERATION if id is already in use within a BeginQuery/EndQuery block. The current time may be queried by calling GetIntegerv or GetInteger64v with the symbolic constant TIMESTAMP. Query types TIME_ELAPSED and TIMESTAMP are added. For timer queries (target TIME_ELAPSED and TIMESTAMP), if the number of bits is non-zero, the minimum number of bits allowed is 30. RGB10_A2UI is added as a required texture and renderbuffer color format. RGB10_A2UI is added to table 3.12.