Commit 06098890 by alokp@chromium.org

Allow derivative functions if derivative extension is enabled. I still need to…

Allow derivative functions if derivative extension is enabled. I still need to add validation for "#extension GL_OES_standard_derivatives : enable". BUG=25 Review URL: http://codereview.appspot.com/1965045 git-svn-id: https://angleproject.googlecode.com/svn/trunk@403 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 94a86ad8
...@@ -377,7 +377,7 @@ static TString BuiltInFunctionsVertex() ...@@ -377,7 +377,7 @@ static TString BuiltInFunctionsVertex()
// Prototypes for built-in functions seen by fragment shaders only. // Prototypes for built-in functions seen by fragment shaders only.
// //
//============================================================================ //============================================================================
static TString BuiltInFunctionsFragment() static TString BuiltInFunctionsFragment(const TBuiltInResource& resources)
{ {
TString s; TString s;
...@@ -389,20 +389,22 @@ static TString BuiltInFunctionsFragment() ...@@ -389,20 +389,22 @@ static TString BuiltInFunctionsFragment()
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);")); s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);")); s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
//s.append(TString("float dFdx(float p);")); if (resources.OES_standard_derivatives) {
//s.append(TString("vec2 dFdx(vec2 p);")); s.append(TString("float dFdx(float p);"));
//s.append(TString("vec3 dFdx(vec3 p);")); s.append(TString("vec2 dFdx(vec2 p);"));
//s.append(TString("vec4 dFdx(vec4 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("float dFdy(float p);"));
//s.append(TString("vec2 dFdy(vec2 p);")); s.append(TString("vec2 dFdy(vec2 p);"));
//s.append(TString("vec3 dFdy(vec3 p);")); s.append(TString("vec3 dFdy(vec3 p);"));
//s.append(TString("vec4 dFdy(vec4 p);")); s.append(TString("vec4 dFdy(vec4 p);"));
s.append(TString("float fwidth(float p);")); s.append(TString("float fwidth(float p);"));
s.append(TString("vec2 fwidth(vec2 p);")); s.append(TString("vec2 fwidth(vec2 p);"));
s.append(TString("vec3 fwidth(vec3 p);")); s.append(TString("vec3 fwidth(vec3 p);"));
s.append(TString("vec4 fwidth(vec4 p);")); s.append(TString("vec4 fwidth(vec4 p);"));
}
s.append(TString("\n")); s.append(TString("\n"));
return s; return s;
...@@ -491,7 +493,7 @@ void TBuiltIns::initialize(EShLanguage language, EShSpec spec, const TBuiltInRes ...@@ -491,7 +493,7 @@ void TBuiltIns::initialize(EShLanguage language, EShSpec spec, const TBuiltInRes
case EShLangFragment: case EShLangFragment:
builtInStrings.push_back(DefaultPrecisionFragment()); builtInStrings.push_back(DefaultPrecisionFragment());
builtInStrings.push_back(BuiltInFunctionsCommon()); builtInStrings.push_back(BuiltInFunctionsCommon());
builtInStrings.push_back(BuiltInFunctionsFragment()); builtInStrings.push_back(BuiltInFunctionsFragment(resources));
builtInStrings.push_back(StandardUniforms()); builtInStrings.push_back(StandardUniforms());
break; break;
...@@ -595,9 +597,11 @@ void IdentifyBuiltIns(EShLanguage language, EShSpec spec, const TBuiltInResource ...@@ -595,9 +597,11 @@ void IdentifyBuiltIns(EShLanguage language, EShSpec spec, const TBuiltInResource
case EShLangVertex: case EShLangVertex:
break; break;
case EShLangFragment: case EShLangFragment:
//symbolTable.relateToOperator("dFdx", EOpDPdx); // OES_standard_derivatives extension if (resources.OES_standard_derivatives) {
//symbolTable.relateToOperator("dFdy", EOpDPdy); // OES_standard_derivatives extension symbolTable.relateToOperator("dFdx", EOpDFdx);
//symbolTable.relateToOperator("fwidth", EOpFwidth); // OES_standard_derivatives extension symbolTable.relateToOperator("dFdy", EOpDFdy);
symbolTable.relateToOperator("fwidth", EOpFwidth);
}
break; break;
default: break; default: break;
} }
......
...@@ -374,6 +374,10 @@ bool TOutputGLSL::visitUnary(Visit visit, TIntermUnary* node) ...@@ -374,6 +374,10 @@ bool TOutputGLSL::visitUnary(Visit visit, TIntermUnary* node)
case EOpLength: writeTriplet(visit, "length(", NULL, ")"); break; case EOpLength: writeTriplet(visit, "length(", NULL, ")"); break;
case EOpNormalize: writeTriplet(visit, "normalize(", NULL, ")"); break; case EOpNormalize: writeTriplet(visit, "normalize(", NULL, ")"); break;
case EOpDFdx: writeTriplet(visit, "dFdx(", NULL, ")"); break;
case EOpDFdy: writeTriplet(visit, "dFdy(", NULL, ")"); break;
case EOpFwidth: writeTriplet(visit, "fwidth(", NULL, ")"); break;
case EOpAny: writeTriplet(visit, "any(", NULL, ")"); break; case EOpAny: writeTriplet(visit, "any(", NULL, ")"); break;
case EOpAll: writeTriplet(visit, "all(", NULL, ")"); break; case EOpAll: writeTriplet(visit, "all(", NULL, ")"); break;
......
...@@ -933,9 +933,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node) ...@@ -933,9 +933,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node)
case EOpFract: outputTriplet(visit, "frac(", "", ")"); break; case EOpFract: outputTriplet(visit, "frac(", "", ")"); break;
case EOpLength: outputTriplet(visit, "length(", "", ")"); break; case EOpLength: outputTriplet(visit, "length(", "", ")"); break;
case EOpNormalize: outputTriplet(visit, "normalize(", "", ")"); break; case EOpNormalize: outputTriplet(visit, "normalize(", "", ")"); break;
// case EOpDPdx: outputTriplet(visit, "ddx(", "", ")"); break; case EOpDFdx: outputTriplet(visit, "ddx(", "", ")"); break;
// case EOpDPdy: outputTriplet(visit, "ddy(", "", ")"); break; case EOpDFdy: outputTriplet(visit, "ddy(", "", ")"); break;
// case EOpFwidth: outputTriplet(visit, "fwidth(", "", ")"); break; case EOpFwidth: outputTriplet(visit, "fwidth(", "", ")"); break;
case EOpAny: outputTriplet(visit, "any(", "", ")"); break; case EOpAny: outputTriplet(visit, "any(", "", ")"); break;
case EOpAll: outputTriplet(visit, "all(", "", ")"); break; case EOpAll: outputTriplet(visit, "all(", "", ")"); break;
default: UNREACHABLE(); default: UNREACHABLE();
......
...@@ -129,9 +129,9 @@ enum TOperator { ...@@ -129,9 +129,9 @@ enum TOperator {
EOpReflect, EOpReflect,
EOpRefract, EOpRefract,
//EOpDPdx, // Fragment only, OES_standard_derivatives extension EOpDFdx, // Fragment only, OES_standard_derivatives extension
//EOpDPdy, // Fragment only, OES_standard_derivatives extension EOpDFdy, // Fragment only, OES_standard_derivatives extension
//EOpFwidth, // Fragment only, OES_standard_derivatives extension EOpFwidth, // Fragment only, OES_standard_derivatives extension
EOpMatrixTimesMatrix, EOpMatrixTimesMatrix,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment