blob: 462863a1058b34c12c4c512ba675cdfb1c45750f [file] [log] [blame]
John Kessenich94a81fb2013-08-31 02:41:30 +00001Current functionality level: ESSL 3.0
John Kessenich9fd55bd2012-12-13 00:05:26 +00002
John Kessenichb603f912013-08-29 00:39:25 +00003Link Validation
John Kessenich05a70632013-09-17 19:26:08 +00004 + provide input config file for setting limits
5 - also consider spitting out measures of complexity
John Kessenichf5ebfb52013-09-20 06:20:21 +00006 + ensure no static references thrown away
John Kessenich9839e242013-09-26 00:45:21 +00007 - generate static use of object even if the only use is to access the length of its array
John Kessenichb603f912013-08-29 00:39:25 +00008 Cross-stage linking
9 - type consistency check of uniform and ins <-> outs, both variables and blocks, stage-specific arrayness matching
10 - location/binding/index check
John Kessenichb603f912013-08-29 00:39:25 +000011 - mixed es/non-es profiles
12 - statically consumed input not produced by previous stage
John Kessenich337dbc72013-09-24 21:18:46 +000013 - give error for sharing a packed block
John Kessenichfb57e7c2013-10-15 21:46:20 +000014 - 1.2: matching initializers for uniforms
John Kessenich8ec55cd2013-11-05 18:07:25 +000015 - 1.3: only statically used built-ins have to be redeclared as flat
John Kessenichfb57e7c2013-10-15 21:46:20 +000016 - 1.5: matching between gl_PerVertex blocks and gl_PerFragment blocks
John Kessenichb603f912013-08-29 00:39:25 +000017 - 1.3: deprecated mixing fixed vertex/fragment stage with programmable fragment/vertex stage.
John Kessenichfb57e7c2013-10-15 21:46:20 +000018 - 4.3: compute shader not combined with any other stages
John Kessenichb603f912013-08-29 00:39:25 +000019 - 4.3: remove cross-version linking restrictions.
20 - 4.3: Allow mismatches in interpolation and auxiliary qualification across stages.
John Kessenich05a70632013-09-17 19:26:08 +000021 - 4.4: A stage contains two different blocks, each with no instance name, where the blocks contain a member with the same name.
John Kessenich8ec55cd2013-11-05 18:07:25 +000022 Intra-stage linking, single shader
John Kessenich12f92212013-11-15 01:34:27 +000023 + recursion for functions
John Kessenich8ec55cd2013-11-05 18:07:25 +000024 - limits checking:
25 - number of texture image units
26 - texel offsets (or compile-time?)
27 - number of input/output compononents
28 - tessellation limits
29 - ...
John Kessenich337dbc72013-09-24 21:18:46 +000030 + exactly one main
John Kessenich8ec55cd2013-11-05 18:07:25 +000031 + ES 3.0: fragment outputs all have locations, if more than one
32 - ES 3.0: location aliasing/overlap (except desktop vertex shader inputs)
33 - Non ES: binding overlap?
John Kessenichfb57e7c2013-10-15 21:46:20 +000034 - Non ES: gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords
John Kessenich8ec55cd2013-11-05 18:07:25 +000035 + Non ES: geometry shader input array sizes and input layout qualifier declaration
John Kessenich5134b9c2013-11-20 21:12:43 +000036 + Non ES: read or write to both gl_ClipVertex and gl_ClipDistance
37 + Non ES: write to only one of gl_FragColor, gl_FragData, or user-declared
John Kessenich12f92212013-11-15 01:34:27 +000038 + 1.50: match between all explicit input array sizes and input primitive
John Kessenich94fdd112013-10-23 19:34:05 +000039 - 1.50: at least one geometry shader says input primitive and at least one says output primitive...
40 - 1.50: at least one geometry shader says max_vertices...
John Kessenich11f9fc72013-11-07 01:06:34 +000041 - 1.50: geometry shaders: max_vertices must be checked against gl_MaxGeometryOutputVertices (maybe at compile time)
42 + 1.50: origin_upper_left and pixel_center_integer have to match
John Kessenich12f92212013-11-15 01:34:27 +000043 - Even the potential for recursion through subroutine uniforms is an error.
John Kessenich05a70632013-09-17 19:26:08 +000044 - 4.4: An interface contains two different blocks, each with no instance name, where the blocks contain a member with the same name.
John Kessenich2ecdd142013-10-01 21:58:43 +000045 - 4.4: component aliasing (except desktop vertex shader inputs)
John Kessenich12f92212013-11-15 01:34:27 +000046 - 4.4: overlapping transform/feedback offsets, offset/stride overflow checks, and stride matching
47 Intra-stage linking, multiple shader (Non-ES)
48 + type consistency check of uniforms, globals, ins, and outs
49 + value checking of global const initializers
50 + value checking of uniform initializers
51 + location match
52 - block matching
53 - component/binding/index/offset match check
54 - compute shader layout(local_size_*) matching
John Kessenich8ec55cd2013-11-05 18:07:25 +000055 + mixed es/non-es profiles are an error
John Kessenich12f92212013-11-15 01:34:27 +000056 - matching redeclarations of interface blocks
John Kessenich8ec55cd2013-11-05 18:07:25 +000057 - 4.3: early_fragment_tests contradictions
58 - 4.3: implicit array sizing is cross shader within a stage
John Kessenich8ec55cd2013-11-05 18:07:25 +000059 - 4.4: If gl_FragCoord is redeclared in any fragment shader in a program, it must be redeclared in all the fragment shaders in that program that have a static use gl_FragCoord
John Kessenichd46b31f2013-08-27 03:59:04 +000060
John Kessenichb603f912013-08-29 00:39:25 +000061Shader Functionality to Implement/Finish
John Kessenicha5830df2013-10-02 05:10:48 +000062 ESSL 2.0 (#version 100)
John Kessenichfb57e7c2013-10-15 21:46:20 +000063 + implement non-inductive loop limitation detection
64 + implement non-inductive array accesses limitation detection
John Kessenich54f6e562013-08-03 00:04:10 +000065 ESSL 3.0
66 - "const" compile-time constant propagation in the front-end has to be complete, for all built-in functions
John Kessenichfb4a0b62013-07-09 23:57:13 +000067 GLSL 1.2
John Kessenicha5830df2013-10-02 05:10:48 +000068 + Handle multiple compilation units per stage
69 + Allow initializers on uniform declarations
John Kessenich0d22e312013-10-30 23:17:34 +000070 + signature matching takes type conversions into account, ambiguity is an error
John Kessenich8ec55cd2013-11-05 18:07:25 +000071 - bug: allow constructors to contain non-dereferenced arrays?
John Kessenichfb4a0b62013-07-09 23:57:13 +000072 GLSL 1.3
John Kessenich8ec55cd2013-11-05 18:07:25 +000073 + flat redeclaration of built-in variables
John Kessenichfb4a0b62013-07-09 23:57:13 +000074 - Preprocessor token pasting (##), ## does macro expansion after pasting not before
John Kessenich8ec55cd2013-11-05 18:07:25 +000075 + non-perspective (linear) interpolation (noperspective)
John Kessenich8f13e132013-10-18 03:56:23 +000076 + add gl_ClipDistance[] to both vertex and fragment shaders
John Kessenich8f13e132013-10-18 03:56:23 +000077 + Deprecated gl_ClipVertex
78 + deprecate almost all built-in state
79 + ftransform() is deprecated
80 + Deprecated built-in vertex inputs (attributes) and some outputs (varyings).
John Kessenichfb4a0b62013-07-09 23:57:13 +000081 GLSL 1.4 (Non-ES)
John Kessenich8f13e132013-10-18 03:56:23 +000082 + track as removed in this release, but present in others:
83 + Use of gl_ClipVertex. Use gl_ClipDistance instead.
84 + Built-in vertex shader inputs.
85 + Built-in uniforms except for depth range parameters
86 + Built-in interface between vertex and fragment: gl_TexCoord, gl_FogFragCoord, and all the color values.
87 + Built-in two-sided coloring.
88 + Fixed functionality for a programmable stage.
89 + ftransform(). Use invariant outputs instead.
John Kessenichfb4a0b62013-07-09 23:57:13 +000090 GLSL 1.5 (Non-ES)
91 - Deprecated gl_MaxVaryingComponents
John Kessenich94fdd112013-10-23 19:34:05 +000092 + Add new minimum maximums for gl_MaxVertexOutputComponents, gl_MaxGeometryInputComponents, gl_MaxGeometryOutputComponents, and gl_MaxFragmentInputComponents,
John Kessenichfb4a0b62013-07-09 23:57:13 +000093 rather than relying on gl_MaxVaryingComponents. Also, corrected gl_MaxVaryingComponents to be 60 instead of 64.
John Kessenich8f13e132013-10-18 03:56:23 +000094 + Added gl_PrimitiveID as an input to fragment shaders.
John Kessenich11f9fc72013-11-07 01:06:34 +000095 + Added gl_FragCoord qualifiers origin_upper_left, and pixel_center_integer to modify the values returned by gl_FragCoord (and have no affect on any other aspect of the pipeline or language).
96 + including redeclaration of gl_FragCoord that adds nothing
John Kessenichfb4a0b62013-07-09 23:57:13 +000097 - Added support for multi-sample textures through sampler2DMS and sampler2DMSArray support in texelFetch() and textureSize().
John Kessenich8f13e132013-10-18 03:56:23 +000098 + Broadened interface blocks from just uniforms to in and out interfaces as well.
99 + Broaden array usage to include vertex shader inputs (vertex in).
John Kessenich94fdd112013-10-23 19:34:05 +0000100 + Added geometry shaders. This includes targeting layers in FBO rendering.
101 + geometry shader layouts: they must be declared, telling the system the primitive input and output types and maximum number of vertices.
102 + Added geometry shader constants.
103 + Broaden structure usage to include geometry inputs and geometry outputs.
John Kessenichfb4a0b62013-07-09 23:57:13 +0000104 GLSL 4.0
John Kessenichd46b31f2013-08-27 03:59:04 +0000105 - tessellation control stage and tessellation evaluation stage. Includes barrier() built-in for synchronization.
106 - Polymorphic functions: Run-time selection of what function gets called, through the new keyword subroutine.
107 - 64bit floating point numbers with the new type keyword double. Built-in functions extended for doubles, and new function matching rules are added to both allow implicit conversions when calling a function and preserve most existing function matching once doubles are included.
108 + More implicit conversions
109 + float to double, and similarly for all floating-point vector and matrix types
110 + int to uint, and similarly for all integer vector types
111 + int to double, and similarly for all vectors of integers and doubles.
112 + uint to double, and similarly for all vectors of integers and doubles.
113 - Cube map array textures and texture functions texture(), textureSize(), textureLod(), and textureGrad().
114 - Sampler arrays can take a variable index now, as long as it's value is uniform for all uses.
115 - Per-sample shading. Including sample input mask gl_SampleMaskIn[] and per-sample interpolation, with explicit interpolation built-ins interpolateAtCentroid(), interpolateAtSample(), and interpolateAtOffset().
116 - New precise qualifier to disallow optimizations that re-order operations or treat different instances of the same operator with different precision.
John Kessenichb603f912013-08-29 00:39:25 +0000117 - Add a fused multiply and add built-in, fma(), in relation to the new precise qualifier. (Because “a * b + c” will require two operations under new rules for precise.)
John Kessenichd46b31f2013-08-27 03:59:04 +0000118 - Added new built-in floating-point functions
119 - frexp() and ldexp()
120 - packUnorm2x16(), packUnorm4x8(),packSnorm4x8(), and packDouble2x32()
121 - unpackUnorm2x16(), unpackUnorm4x8(),unpackSnorm4x8(), and unpackDouble2x32()
122 - Add new built-in integer functions
123 - uaddCarry() andusubBorrow()
124 - umulExtended() andimulExtended()
125 - bitfieldExtract() andbitfieldInsert()
126 - bitfieldReverse()
127 - bitCount(),findLSB(), andfindMSB()
128 - New built-in to query LOD, textureQueryLod().
129 - New overloaded function matching algorithm, handling selection from many valid multiple choices.
John Kessenich21a87702013-10-21 19:25:59 +0000130 + Texture gather functions that return four texels with a single call.
131 + textureGather()
132 + textureGatherOffset()
133 + textureGatherOffsets()
John Kessenich8f13e132013-10-18 03:56:23 +0000134 + Add streams out from geometry shader. Output can be directed to streams through
135 + EmitStreamVertex() and EndStreamPrimitive().
John Kessenichfb4a0b62013-07-09 23:57:13 +0000136 GLSL 4.1
John Kessenichd46b31f2013-08-27 03:59:04 +0000137 - Support for partitioning shaders into multiple programs to provide light-weight mixing of different shader stages.
138 (GL_ARB_separate_shader_objects)
John Kessenichb603f912013-08-29 00:39:25 +0000139 - layout qualifiers
140 - redeclaration of input/output blocks
141 - ...
John Kessenichd46b31f2013-08-27 03:59:04 +0000142 - Add 64-bit floating-point attributes for vertex shader inputs.
John Kessenichab41fe52013-10-24 01:25:40 +0000143 + Support viewport arrays so where the geometry shader selects which viewport array will transform its output.
John Kessenichfb4a0b62013-07-09 23:57:13 +0000144 GLSL 4.2
John Kessenichd46b31f2013-08-27 03:59:04 +0000145 + Move these previously deprecated features to be only in the compatibility profile:
146 + The keyword attribute for vertex shader inputs. (Use in instead.)
147 + The keyword varying for inputs and outputs. (Use in and out instead.)
148 + The original texturing built-in functions. (Use the new forms instead.)
149 + The built-in variables gl_FragColor and gl_FragData. (Use out instead.)
150 + Built-in constants related to these.
151 + Change from ASCII to UTF-8 for the language character set and also allow any characters inside comments (except the byte value 0),
John Kessenichb603f912013-08-29 00:39:25 +0000152 including '\'.
John Kessenichd46b31f2013-08-27 03:59:04 +0000153 + Add line-continuation using '\', as in C++.
154 + ES convergence
155 + Clarify that .xyzwxy.xy is illegal, as it temporarily makes a “vec6”.
156 + Clarify that return statements only accept values (no return of a void function).
157 - Add image types (GL_ARB_shader_image_load_store)
158 + 33 new types, all with “image” in their name, correspond to the non-shadow texture types
159 + addition of memory qualifiers: coherent,volatile, restrict, readonly, and writeonly
160 - can read/write/modify images from a shader, through new built-in functions
161 - qualifiers can act independently on the opaque shader variable and the backing image, so extra qualifiers can be used to separately qualify these
162 + Variables declared in if and else statements are scoped only to the end of those statements, especially for non-compound statements
John Kessenichb603f912013-08-29 00:39:25 +0000163 Note, this is not backward compatible, it may depend on #version.
John Kessenichd46b31f2013-08-27 03:59:04 +0000164 - Allow implicit conversions of return values to the declared type of the function.
John Kessenich8f13e132013-10-18 03:56:23 +0000165 + The const keyword can be used to declare variables within a function body with initializer expressions that are not constant expressions.
John Kessenichd46b31f2013-08-27 03:59:04 +0000166 + Qualifiers on variable declarations no longer have to follow a strict order. The layout qualifier can be used multiple times, and multiple parameter qualifiers can be used.
167 + Parameter qualifiers can include precision and memory qualifiers.
168 - Add a new atomic_uint type to support atomic counters. Also, add built-in functions for manipulating atomic counters.
169 - atomicCounterIncrement, atomicCounterDecrement, and atomicCounter
170 - Add layout qualifier identifiers binding and offset to bind units to sampler and image variable declarations, atomic counters, and uniform blocks.
171 - Add built-in functions to pack/unpack 16 bit floating-point numbers (ARB_shading_language_pack2f).
172 - packHalf2x16 and unpackHalf2x16
173 - packSnorm2x16and unpackSnorm2x16
John Kessenich8ec55cd2013-11-05 18:07:25 +0000174 - Add gl_FragDepth layout qualifiers to communicate what kind of changes will be made to gl_FragDepth (GL_AMD_conservative depth).
John Kessenich8f13e132013-10-18 03:56:23 +0000175 + Add C-style curly brace initializer lists syntax for initializers. Full initialization of aggregates is required when these are used.
John Kessenichd46b31f2013-08-27 03:59:04 +0000176 - Allow .length() to be applied to vectors and matrices, returning the number of components or columns.
177 + Clarify that .length() returns an int type and can be used as a constant integer expression.
John Kessenich8f13e132013-10-18 03:56:23 +0000178 + Allow swizzle operations on scalars.
John Kessenichd46b31f2013-08-27 03:59:04 +0000179 - Positive signed decimal literals, as well as octal and hexadecimal, can set all 32 bits. This includes setting the sign bit to create a negative value.
John Kessenich8f13e132013-10-18 03:56:23 +0000180 - Make GLSL consistent with the API regarding user clipping, by no longer referring to gl_Position when gl_ClipVertex is not written. Rather, user clipping becomes undefined.
John Kessenich61c2d142013-10-03 20:23:57 +0000181 - Clarified that a comma sequence-operator expression cannot be a constant expression. E.g., “(2,3)” is not allowed, semantically,
182 as a valid constant expression 3, even though it is an expression that will evaluate to 3.
John Kessenich21a87702013-10-21 19:25:59 +0000183 + Use vec2 instead of vec3 for coordinate in textureGather*(sampler2DRect,...).
184 + Clarify that textureGatherOffset() can take non-constants for the offsets.
John Kessenichfb4a0b62013-07-09 23:57:13 +0000185 GLSL 4.3
John Kessenich61c2d142013-10-03 20:23:57 +0000186 - Add shader storage buffer objects, as per the ARB_shader_storage_buffer_object extension. This includes
187 - allowing the last member of a storage buffer block to be an array that does not know its size until render time
188 - read/write memory shared with the application and other shader invocations
189 - adding the std430 layout qualifier for shader storage blocks
John Kessenichd46b31f2013-08-27 03:59:04 +0000190 - Allow .length() on all arrays; returning a compile-time constant or not, depending on how the
191 array is sized, as per the ARB_shader_storage_buffer_object extension.
192 - Be clear that implicit array sizing is only within a stage, not cross stage.
John Kessenich61c2d142013-10-03 20:23:57 +0000193 - Array clarifications:
194 - All arrays are inherently homogeneous, except for arrays of the new shader storage buffer objects
195 - Arrays of shader storage buffer objects will be dereferenced when the .length() method is used on an unsized array
196 member, so that must a have valid index.
197 - Arrays of other objects (uniform blocks) containing implicitly sized arrays will have the same implicit size for all
198 elements of the array.
John Kessenich8ec55cd2013-11-05 18:07:25 +0000199 - Arrays of arrays are now supported, as per the GL_ARB_arrays_of_arrays extension.
John Kessenichd46b31f2013-08-27 03:59:04 +0000200 - Compute shaders are now supported, as per the GL_ARB_compute_shader extension.
201 - Added imageSize() built-ins to query the dimensions of an image.
202 - Define robust out-of-bounds access behavior when enabled, as per the GL_ARB_robust_buffer_access_behavior extension.
203 - All choice of depth or stencil texturing, for a packed depth-stencil texture, as per the
204 GL_ARB_stencil_texturing extension.
205 - Allow explicit locations/indexes to be assigned to uniform variables and subroutines, as per the
206 GL_ARB_explicit_uniform_location extension.
207 - Accept ES GLSL shader #version statements, which will request ES functionality for ES GLSL
208 versions 100 and 300, as per the GL_ARB_ES3_compatibility extension.
John Kessenichd46b31f2013-08-27 03:59:04 +0000209 - Clarify and correct scoping rules to what would normally be expected and what was intended.
210 (Function parameters and body nest inside global space. Loop variables and body nest inside
211 loop scope.)
212 - There are no digraphs (trigraphs were already disallowed).
213 - Remove the CPP difference that it is a compile-time error to use #if or #elif on expressions
214 containing undefined macro names. This reverts back to following expected CPP behavior.
John Kessenichb603f912013-08-29 00:39:25 +0000215 - Set both gl_MaxFragmentImageUniformsand gl_MaxCombinedImageUniforms to 8.
John Kessenichd46b31f2013-08-27 03:59:04 +0000216 - Clarify textureSize() for cube map arrays.
217 - For layout qualifiers,
John Kessenich94fdd112013-10-23 19:34:05 +0000218 - make negative output locations a compile-time error, once integer expressions are allowed in layouts
John Kessenichd46b31f2013-08-27 03:59:04 +0000219 - make indexes outside the range [0,1] a compile-time error.
John Kessenichd46b31f2013-08-27 03:59:04 +0000220 - Add textureQueryLevels() built-ins to query the number of mipmap levels, as per the
221 GL_ARB_texture_query_levels extension.
John Kessenichab41fe52013-10-24 01:25:40 +0000222 + Make gl_Layer and gl_ViewportIndex also be inputs to the fragment shader, as per the
John Kessenichd46b31f2013-08-27 03:59:04 +0000223 GL_ARB_fragment_layer_viewport extension.
John Kessenichd46b31f2013-08-27 03:59:04 +0000224 - Add more examples and rules to be more specific about the required behavior of the precise
225 qualifier.
226 - Clarify fragment output variables cannot be double precision.
John Kessenichd46b31f2013-08-27 03:59:04 +0000227 - Allow the new shared keyword to be in layout-qualifier-id, allowing backward compatibility
228 with the shared identifier that was previously used.
229 + Added overlooked texture function float textureOffset (sampler2DArrayShadow sampler, vec4 P, vec2 offset [, float bias] ).
230 + Add missing type in grammar, ATOMIC_UINT, and missing qualifiers COHERENT, VOLATILE, RESTRICT, READONLY, and WRITEONLY.
John Kessenichb603f912013-08-29 00:39:25 +0000231 - do version checking for the above
John Kessenichd46b31f2013-08-27 03:59:04 +0000232 + Add missing initializer lists to grammar.
John Kessenichfb4a0b62013-07-09 23:57:13 +0000233 GLSL 4.4
John Kessenichd46b31f2013-08-27 03:59:04 +0000234 - Incorporate the ARB_enhanced_layouts extension, which adds
235 - compile-time constant expressions for layout qualifier integers
236 - new offset and align layout qualifiers for control over buffer block layouts
237 - add location layout qualifier for input and output blocks and block members
238 - new componentlayout qualifier for finer-grained layout control of input and output variables and blocks
239 - new xfb_buffer, xfb_stride, and xfb_offsetlayout qualifiers to allow the shader to control
240 transform feedback buffering.
241 + Bug 10530: To be consistent with ES, include sample types as valid in a precision statement.
242 Note the defaults are irrelevant, as precision qualifiers are not required or have any meaning.
John Kessenich8ec55cd2013-11-05 18:07:25 +0000243