cosmetic changes;
authorMichal Krol <mjkrol@gmail.org>
Wed, 13 Apr 2005 13:06:57 +0000 (13:06 +0000)
committerMichal Krol <mjkrol@gmail.org>
Wed, 13 Apr 2005 13:06:57 +0000 (13:06 +0000)
add __fixed_input and __fixed_output qualifiers for built-in variables;

src/mesa/shader/slang/library/slang_fragment_builtin.gc
src/mesa/shader/slang/library/slang_fragment_builtin_gc.h [new file with mode: 0644]
src/mesa/shader/slang/library/slang_vertex_builtin.gc
src/mesa/shader/slang/library/slang_vertex_builtin_gc.h [new file with mode: 0644]

index ec282924ecdaeacc03283b3ee3a5642d27ac97f5..b4c5aa3ec2a1773f792f593259dac4e42768ae38 100755 (executable)
@@ -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\92s 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\92s 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.
 // 
 // 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\92t 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:
 // 
-// \95 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.
 // 
-// \95 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.
 // 
-// \95 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 \93Lod\94 are allowed only in a vertex shader. For the \93Lod\94 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 (\93Proj\94) 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 (\93Proj\94) 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 (\93Proj\94) 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 (\93Proj\94) 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 \931D\94 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 (file)
index 0000000..85f74bd
--- /dev/null
@@ -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"
index cb0436238697413b8ed58be2b02e0151159ede0c..850fd2bb85a21c51e523440217fa6b2c1b880d65 100755 (executable)
@@ -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\92t 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 \93c\94 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 \93c\94, 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:
 // 
-// \95 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.
 // 
-// \95 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.
 // 
-// \95 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\92s
+// 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 \93Lod\94 are allowed only in a vertex shader. For the \93Lod\94 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 (\93Proj\94) 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 (\93Proj\94) 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 (\93Proj\94) 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 (\93Proj\94) 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 \931D\94 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 (file)
index 0000000..7462261
--- /dev/null
@@ -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"