Implemented basic GLSL ES 3.0 texture intrinsics.
TRAC #22954
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2273 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/Initialize.cpp b/src/compiler/Initialize.cpp
index ea2ce73..3e5f264 100644
--- a/src/compiler/Initialize.cpp
+++ b/src/compiler/Initialize.cpp
@@ -363,6 +363,43 @@
return s;
}
+static TString BuiltInFunctionsCommonTexture3_0()
+{
+ TString s;
+
+ //
+ // Texture Functions for GLSL ES 3.0
+ //
+ s.append(TString("vec4 texture(sampler2D sampler, vec2 coord);"));
+ s.append(TString("vec4 texture(samplerCube sampler, vec3 coord);"));
+ s.append(TString("vec4 textureProj(sampler2D sampler, vec3 coord);"));
+ s.append(TString("vec4 textureProj(sampler2D sampler, vec4 coord);"));
+
+ return s;
+}
+
+static TString BuiltInFunctionsFragmentGradient3_0()
+{
+ TString s;
+
+ s.append(TString("float dFdx(float p);"));
+ s.append(TString("vec2 dFdx(vec2 p);"));
+ s.append(TString("vec3 dFdx(vec3 p);"));
+ s.append(TString("vec4 dFdx(vec4 p);"));
+
+ s.append(TString("float dFdy(float p);"));
+ s.append(TString("vec2 dFdy(vec2 p);"));
+ s.append(TString("vec3 dFdy(vec3 p);"));
+ s.append(TString("vec4 dFdy(vec4 p);"));
+
+ s.append(TString("float fwidth(float p);"));
+ s.append(TString("vec2 fwidth(vec2 p);"));
+ s.append(TString("vec3 fwidth(vec3 p);"));
+ s.append(TString("vec4 fwidth(vec4 p);"));
+
+ return s;
+}
+
//============================================================================
//
// Prototypes for built-in functions seen by vertex shaders only.
@@ -517,6 +554,8 @@
commonBuiltIns.push_back(BuiltInFunctionsCommon());
essl1BuiltIns.push_back(BuiltInFunctionsCommonTexture1_0(resources));
essl1BuiltIns.push_back(BuiltInFunctionsFragmentTexture1_0(resources));
+ essl3BuiltIns.push_back(BuiltInFunctionsCommonTexture3_0());
+ essl3BuiltIns.push_back(BuiltInFunctionsFragmentGradient3_0());
commonBuiltIns.push_back(StandardUniforms());
break;
@@ -525,6 +564,7 @@
commonBuiltIns.push_back(BuiltInFunctionsCommon());
essl1BuiltIns.push_back(BuiltInFunctionsCommonTexture1_0(resources));
essl1BuiltIns.push_back(BuiltInFunctionsVertexTexture1_0());
+ essl3BuiltIns.push_back(BuiltInFunctionsCommonTexture3_0());
commonBuiltIns.push_back(StandardUniforms());
break;
@@ -634,13 +674,17 @@
break;
case SH_FRAGMENT_SHADER:
if (resources.OES_standard_derivatives) {
- symbolTable.relateToOperator(COMMON_BUILTINS, "dFdx", EOpDFdx);
- symbolTable.relateToOperator(COMMON_BUILTINS, "dFdy", EOpDFdy);
- symbolTable.relateToOperator(COMMON_BUILTINS, "fwidth", EOpFwidth);
+ symbolTable.relateToOperator(ESSL1_BUILTINS, "dFdx", EOpDFdx);
+ symbolTable.relateToOperator(ESSL1_BUILTINS, "dFdy", EOpDFdy);
+ symbolTable.relateToOperator(ESSL1_BUILTINS, "fwidth", EOpFwidth);
- symbolTable.relateToExtension(COMMON_BUILTINS, "dFdx", "GL_OES_standard_derivatives");
- symbolTable.relateToExtension(COMMON_BUILTINS, "dFdy", "GL_OES_standard_derivatives");
- symbolTable.relateToExtension(COMMON_BUILTINS, "fwidth", "GL_OES_standard_derivatives");
+ symbolTable.relateToExtension(ESSL1_BUILTINS, "dFdx", "GL_OES_standard_derivatives");
+ symbolTable.relateToExtension(ESSL1_BUILTINS, "dFdy", "GL_OES_standard_derivatives");
+ symbolTable.relateToExtension(ESSL1_BUILTINS, "fwidth", "GL_OES_standard_derivatives");
+
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "dFdx", EOpDFdx);
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "dFdy", EOpDFdy);
+ symbolTable.relateToOperator(ESSL3_BUILTINS, "fwidth", EOpFwidth);
}
break;
default: break;