diff options
| author | Michal Krol <mjkrol@gmail.org> | 2005-04-13 13:06:57 +0000 | 
|---|---|---|
| committer | Michal Krol <mjkrol@gmail.org> | 2005-04-13 13:06:57 +0000 | 
| commit | 2f951683be5766b7b9537cbb691f662cd1f49b16 (patch) | |
| tree | e616ea3ea4145e4de0cfc0cc37ee260a703f02be /src/mesa/shader | |
| parent | 5a382001224df9aad6137c825fbfc2d058b220b1 (diff) | |
cosmetic changes;
add __fixed_input and __fixed_output qualifiers for built-in variables;
Diffstat (limited to 'src/mesa/shader')
4 files changed, 663 insertions, 35 deletions
| diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc index ec282924ec..b4c5aa3ec2 100755 --- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc +++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc @@ -29,7 +29,7 @@  //   // Writing to gl_FragDepth will establish the depth value for the fragment being processed. If  // depth buffering is enabled, and a shader does not write gl_FragDepth, then the fixed function -// value for depth will be used as the fragment’s depth value. If a shader statically assigns +// value for depth will be used as the fragment's depth value. If a shader statically assigns  // a value to gl_FragDepth, and there is an execution path through the shader that does not set  // gl_FragDepth, then the value of the fragment's depth may be undefined for executions of the  // shader that take that path. That is, if a shader statically contains a write gl_FragDepth, then @@ -56,7 +56,7 @@  // and it holds the window relative coordinates x, y, z, and 1/w values for the fragment. This  // value is the result of the fixed functionality that interpolates primitives after vertex  // processing to generate fragments. The z component is the depth value that would be used for -// the fragment’s depth if a shader contained no writes to gl_FragDepth. This is useful for +// the fragment's depth if a shader contained no writes to gl_FragDepth. This is useful for  // invariance if a shader conditionally computes gl_FragDepth but otherwise wants the fixed  // functionality fragment depth.  //  @@ -68,11 +68,11 @@  // as follows:  //  -vec4 gl_FragCoord; -bool gl_FrontFacing; -vec4 gl_FragColor; -vec4 gl_FragData[gl_MaxDrawBuffers]; -float gl_FragDepth; +__fixed_input vec4 gl_FragCoord; +__fixed_input bool gl_FrontFacing; +__fixed_output vec4 gl_FragColor; +__fixed_output vec4 gl_FragData[gl_MaxDrawBuffers]; +__fixed_output float gl_FragDepth;  //   // However, they do not behave like variables with no qualifier; their behavior is as described @@ -80,7 +80,7 @@ float gl_FragDepth;  //   //  -// Unlike user-defined varying variables, the built-in varying variables don’t have a strict +// Unlike user-defined varying variables, the built-in varying variables don't have a strict  // one-to-one correspondence between the vertex language and the fragment language. Two sets are  // provided, one for each language. Their relationship is described below.  //  @@ -116,14 +116,14 @@ varying float gl_FogFragCoord;  //   // The built-in functions basically fall into three categories:  //  -// • They expose some necessary hardware functionality in a convenient way such as accessing +// * They expose some necessary hardware functionality in a convenient way such as accessing  //   a texture map. There is no way in the language for these functions to be emulated by a shader.  //  -// • They represent a trivial operation (clamp, mix, etc.) that is very simple for the user +// * They represent a trivial operation (clamp, mix, etc.) that is very simple for the user  //   to write, but they are very common and may have direct hardware support. It is a very hard  //   problem for the compiler to map expressions to complex assembler instructions.  //  -// • They represent an operation graphics hardware is likely to accelerate at some point. The +// * They represent an operation graphics hardware is likely to accelerate at some point. The  //   trigonometry functions fall into this category.  //   // Many of the functions are similar to the same named ones in common C libraries, but they support @@ -162,13 +162,13 @@ varying float gl_FogFragCoord;  // running in a fragment shader, the LOD computed by the implementation is used to do the texture  // lookup. If it is mip-mapped and running on the vertex shader, then the base texture is used.  //  -// The built-ins suffixed with “Lod” are allowed only in a vertex shader. For the “Lod” functions, +// The built-ins suffixed with "Lod" are allowed only in a vertex shader. For the "Lod" functions,  // lod is directly used as the level of detail.  //   //   // Use the texture coordinate coord to do a texture lookup in the 1D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate coord.s is divided by +// to sampler. For the projective ("Proj") versions, the texture coordinate coord.s is divided by  // the last component of coord.  //   // XXX @@ -184,7 +184,7 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {  //   // Use the texture coordinate coord to do a texture lookup in the 2D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate (coord.s, coord.t) is +// to sampler. For the projective ("Proj") versions, the texture coordinate (coord.s, coord.t) is  // divided by the last component of coord. The third component of coord is ignored for the vec4  // coord variant.  //  @@ -201,7 +201,7 @@ vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {  //   // Use the texture coordinate coord to do a texture lookup in the 3D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate is divided by coord.q. +// to sampler. For the projective ("Proj") versions, the texture coordinate is divided by coord.q.  //   // XXX  vec4 texture3D (sampler3D sampler, vec3 coord, float bias) { @@ -226,9 +226,9 @@ vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {  // Use texture coordinate coord to do a depth comparison lookup on the depth texture bound  // to sampler, as described in section 3.8.14 of version 1.4 of the OpenGL specification. The 3rd  // component of coord (coord.p) is used as the R value. The texture bound to sampler must be a -// depth texture, or results are undefined. For the projective (“Proj”) version of each built-in, +// depth texture, or results are undefined. For the projective ("Proj") version of each built-in,  // the texture coordinate is divide by coord.q, giving a depth value R of coord.p/coord.q. The -// second component of coord is ignored for the “1D” variants. +// second component of coord is ignored for the "1D" variants.  //   // XXX  vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) { diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h new file mode 100644 index 0000000000..85f74bda8e --- /dev/null +++ b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h @@ -0,0 +1,366 @@ +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"__fixed_input vec4 gl_FragCoord;\n" +"__fixed_input bool gl_FrontFacing;\n" +"__fixed_output vec4 gl_FragColor;\n" +"__fixed_output vec4 gl_FragData[gl_MaxDrawBuffers];\n" +"__fixed_output float gl_FragDepth;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"varying vec4 gl_Color;\n" +"varying vec4 gl_SecondaryColor;\n" +"varying vec4 gl_TexCoord[];\n" +"varying float gl_FogFragCoord;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture1D (sampler1D sampler, float coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias) {\n" +"    return texture1D (sampler, coord.s / coord.t, bias);\n" +"}\n" +"vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {\n" +"    return texture1D (sampler, coord.s / coord.q, bias);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture2D (sampler2D sampler, vec2 coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias) {\n" +"    return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), bias);\n" +"}\n" +"vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {\n" +"    return texture2D (sampler, vec2 (coord.s / coord.q, coord.s / coord.q), bias);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture3D (sampler3D sampler, vec3 coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias) {\n" +"    return texture3DProj (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),\n" +"        bias);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias) {\n" +"    return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), bias);\n" +"}\n" +"vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {\n" +"    return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"float dFdx (float p) {\n" +"    return 0.0;\n" +"}\n" +"\n" +"vec2 dFdx (vec2 p) {\n" +"    return vec2 (0.0);\n" +"}\n" +"\n" +"vec3 dFdx (vec3 p) {\n" +"    return vec3 (0.0);\n" +"}\n" +"\n" +"vec4 dFdx (vec4 p) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"float dFdy (float p) {\n" +"    return 0.0;\n" +"}\n" +"\n" +"vec2 dFdy (vec2 p) {\n" +"    return vec2 (0.0);\n" +"}\n" +"\n" +"vec3 dFdy (vec3 p) {\n" +"    return vec3 (0.0);\n" +"}\n" +"\n" +"vec4 dFdy (vec4 p) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"float fwidth (float p) {\n" +"    return abs (dFdx (p)) + abs (dFdy (p));\n" +"}\n" +"vec2 fwidth (vec2 p) {\n" +"    return abs (dFdx (p)) + abs (dFdy (p));\n" +"}\n" +"vec3 fwidth (vec3 p) {\n" +"    return abs (dFdx (p)) + abs (dFdy (p));\n" +"}\n" +"vec4 fwidth (vec4 p) {\n" +"    return abs (dFdx (p)) + abs (dFdy (p));\n" +"}\n" +"\n" diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin.gc b/src/mesa/shader/slang/library/slang_vertex_builtin.gc index cb04362386..850fd2bb85 100755 --- a/src/mesa/shader/slang/library/slang_vertex_builtin.gc +++ b/src/mesa/shader/slang/library/slang_vertex_builtin.gc @@ -36,9 +36,9 @@  // intrinsically declared with the following types:  //  -vec4 gl_Position;                                       // must be written to -float gl_PointSize;                                     // may be written to -vec4 gl_ClipVertex;                                     // may be written to +__fixed_output vec4 gl_Position;                                       // must be written to +__fixed_output float gl_PointSize;                                     // may be written to +__fixed_output vec4 gl_ClipVertex;                                     // may be written to  //   // If gl_PointSize or gl_ClipVertex are not written to, their values are undefined. Any of these @@ -74,7 +74,7 @@ attribute vec4 gl_MultiTexCoord7;  attribute float gl_FogCoord;  //  -// Unlike user-defined varying variables, the built-in varying variables don’t have a strict +// Unlike user-defined varying variables, the built-in varying variables don't have a strict  // one-to-one correspondence between the vertex language and the fragment language. Two sets are  // provided, one for each language. Their relationship is described below.  //  @@ -91,9 +91,9 @@ varying vec4 gl_TexCoord[];                             // at most will be gl_Ma  varying float gl_FogFragCoord;  //  -// For gl_FogFragCoord, the value written will be used as the “c” value on page 160 of the +// For gl_FogFragCoord, the value written will be used as the "c" value on page 160 of the  // OpenGL 1.4 Specification by the fixed functionality pipeline. For example, if the z-coordinate -// of the fragment in eye space is desired as “c”, then that's what the vertex shader should write +// of the fragment in eye space is desired as "c", then that's what the vertex shader should write  // into gl_FogFragCoord.  //   // As with all arrays, indices used to subscript gl_TexCoord must either be an integral constant @@ -110,14 +110,14 @@ varying float gl_FogFragCoord;  //   // The built-in functions basically fall into three categories:  //  -// • They expose some necessary hardware functionality in a convenient way such as accessing +// * They expose some necessary hardware functionality in a convenient way such as accessing  //   a texture map. There is no way in the language for these functions to be emulated by a shader.  //  -// • They represent a trivial operation (clamp, mix, etc.) that is very simple for the user +// * They represent a trivial operation (clamp, mix, etc.) that is very simple for the user  //   to write, but they are very common and may have direct hardware support. It is a very hard  //   problem for the compiler to map expressions to complex assembler instructions.  //  -// • They represent an operation graphics hardware is likely to accelerate at some point. The +// * They represent an operation graphics hardware is likely to accelerate at some point. The  //   trigonometry functions fall into this category.  //   // Many of the functions are similar to the same named ones in common C libraries, but they support @@ -139,7 +139,7 @@ varying float gl_FogFragCoord;  //   // For vertex shaders only. This function will ensure that the incoming vertex value will be -// transformed in a way that produces exactly the same result as would be produced by OpenGL’s +// transformed in a way that produces exactly the same result as would be produced by OpenGL's  // fixed functionality transform. It is intended to be used to compute gl_Position, e.g.,  // gl_Position = ftransform()  // This function should be used, for example, when an application is rendering the same geometry in @@ -176,13 +176,13 @@ vec4 ftransform () {  // running in a fragment shader, the LOD computed by the implementation is used to do the texture  // lookup. If it is mip-mapped and running on the vertex shader, then the base texture is used.  //  -// The built-ins suffixed with “Lod” are allowed only in a vertex shader. For the “Lod” functions, +// The built-ins suffixed with "Lod" are allowed only in a vertex shader. For the "Lod" functions,  // lod is directly used as the level of detail.  //   //   // Use the texture coordinate coord to do a texture lookup in the 1D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate coord.s is divided by +// to sampler. For the projective ("Proj") versions, the texture coordinate coord.s is divided by  // the last component of coord.  //   // XXX @@ -198,7 +198,7 @@ vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {  //   // Use the texture coordinate coord to do a texture lookup in the 2D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate (coord.s, coord.t) is +// to sampler. For the projective ("Proj") versions, the texture coordinate (coord.s, coord.t) is  // divided by the last component of coord. The third component of coord is ignored for the vec4  // coord variant.  //  @@ -215,7 +215,7 @@ vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {  //   // Use the texture coordinate coord to do a texture lookup in the 3D texture currently bound -// to sampler. For the projective (“Proj”) versions, the texture coordinate is divided by coord.q. +// to sampler. For the projective ("Proj") versions, the texture coordinate is divided by coord.q.  //   // XXX  vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) { @@ -240,9 +240,9 @@ vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {  // Use texture coordinate coord to do a depth comparison lookup on the depth texture bound  // to sampler, as described in section 3.8.14 of version 1.4 of the OpenGL specification. The 3rd  // component of coord (coord.p) is used as the R value. The texture bound to sampler must be a -// depth texture, or results are undefined. For the projective (“Proj”) version of each built-in, +// depth texture, or results are undefined. For the projective ("Proj") version of each built-in,  // the texture coordinate is divide by coord.q, giving a depth value R of coord.p/coord.q. The -// second component of coord is ignored for the “1D” variants. +// second component of coord is ignored for the "1D" variants.  //   // XXX  vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) { @@ -252,10 +252,10 @@ vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {  vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {      return vec4 (0.0);  } -vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod) { +vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {      return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);  } -vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod) { +vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {      return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),          lod);  } diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h new file mode 100644 index 0000000000..746226180f --- /dev/null +++ b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h @@ -0,0 +1,262 @@ +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"__fixed_output vec4 gl_Position;\n" +"__fixed_output float gl_PointSize;\n" +"__fixed_output vec4 gl_ClipVertex;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"attribute vec4 gl_Color;\n" +"attribute vec4 gl_SecondaryColor;\n" +"attribute vec3 gl_Normal;\n" +"attribute vec4 gl_Vertex;\n" +"attribute vec4 gl_MultiTexCoord0;\n" +"attribute vec4 gl_MultiTexCoord1;\n" +"attribute vec4 gl_MultiTexCoord2;\n" +"attribute vec4 gl_MultiTexCoord3;\n" +"attribute vec4 gl_MultiTexCoord4;\n" +"attribute vec4 gl_MultiTexCoord5;\n" +"attribute vec4 gl_MultiTexCoord6;\n" +"attribute vec4 gl_MultiTexCoord7;\n" +"attribute float gl_FogCoord;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"varying vec4 gl_FrontColor;\n" +"varying vec4 gl_BackColor;\n" +"varying vec4 gl_FrontSecondaryColor;\n" +"varying vec4 gl_BackSecondaryColor;\n" +"varying vec4 gl_TexCoord[];\n" +"varying float gl_FogFragCoord;\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 ftransform () {\n" +"    return gl_ModelViewProjectionMatrix * gl_Vertex;\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture1DLod (sampler1D sampler, float coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture1DProjLod (sampler1D sampler, vec2 coord, float lod) {\n" +"    return texture1DLod (sampler, coord.s / coord.t, lod);\n" +"}\n" +"vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {\n" +"    return texture1DLod (sampler, coord.s / coord.q, lod);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture2DProjLod (sampler2D sampler, vec3 coord, float lod) {\n" +"    return texture2DLod (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), lod);\n" +"}\n" +"vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {\n" +"    return texture2DLod (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), lod);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 texture3DProjLod (sampler3D sampler, vec4 coord, float lod) {\n" +"    return texture3DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.s / coord.q),\n" +"        lod);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"\n" +"vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"\n" +"vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {\n" +"    return vec4 (0.0);\n" +"}\n" +"vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {\n" +"    return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);\n" +"}\n" +"vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {\n" +"    return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),\n" +"        lod);\n" +"}\n" +"\n" | 
