From 2f951683be5766b7b9537cbb691f662cd1f49b16 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Wed, 13 Apr 2005 13:06:57 +0000 Subject: [PATCH] cosmetic changes; add __fixed_input and __fixed_output qualifiers for built-in variables; --- .../slang/library/slang_fragment_builtin.gc | 34 +- .../slang/library/slang_fragment_builtin_gc.h | 366 ++++++++++++++++++ .../slang/library/slang_vertex_builtin.gc | 36 +- .../slang/library/slang_vertex_builtin_gc.h | 262 +++++++++++++ 4 files changed, 663 insertions(+), 35 deletions(-) create mode 100644 src/mesa/shader/slang/library/slang_fragment_builtin_gc.h create mode 100644 src/mesa/shader/slang/library/slang_vertex_builtin_gc.h diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc index ec282924ecd..b4c5aa3ec2a 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 00000000000..85f74bda8e1 --- /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 cb043623869..850fd2bb85a 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 00000000000..746226180f7 --- /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" -- 2.30.2