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()
// Prototypes for built-in functions seen by fragment shaders only.
//
//============================================================================
static TString BuiltInFunctionsFragment()
static TString BuiltInFunctionsFragment(const TBuiltInResource& resources)
{
TString s;
......@@ -389,20 +389,22 @@ static TString BuiltInFunctionsFragment()
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("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);"));
if (resources.OES_standard_derivatives) {
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);"));
}
s.append(TString("\n"));
return s;
......@@ -491,7 +493,7 @@ void TBuiltIns::initialize(EShLanguage language, EShSpec spec, const TBuiltInRes
case EShLangFragment:
builtInStrings.push_back(DefaultPrecisionFragment());
builtInStrings.push_back(BuiltInFunctionsCommon());
builtInStrings.push_back(BuiltInFunctionsFragment());
builtInStrings.push_back(BuiltInFunctionsFragment(resources));
builtInStrings.push_back(StandardUniforms());
break;
......@@ -595,9 +597,11 @@ void IdentifyBuiltIns(EShLanguage language, EShSpec spec, const TBuiltInResource
case EShLangVertex:
break;
case EShLangFragment:
//symbolTable.relateToOperator("dFdx", EOpDPdx); // OES_standard_derivatives extension
//symbolTable.relateToOperator("dFdy", EOpDPdy); // OES_standard_derivatives extension
//symbolTable.relateToOperator("fwidth", EOpFwidth); // OES_standard_derivatives extension
if (resources.OES_standard_derivatives) {
symbolTable.relateToOperator("dFdx", EOpDFdx);
symbolTable.relateToOperator("dFdy", EOpDFdy);
symbolTable.relateToOperator("fwidth", EOpFwidth);
}
break;
default: break;
}
......
......@@ -374,6 +374,10 @@ bool TOutputGLSL::visitUnary(Visit visit, TIntermUnary* node)
case EOpLength: writeTriplet(visit, "length(", 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 EOpAll: writeTriplet(visit, "all(", NULL, ")"); break;
......
......@@ -933,9 +933,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node)
case EOpFract: outputTriplet(visit, "frac(", "", ")"); break;
case EOpLength: outputTriplet(visit, "length(", "", ")"); break;
case EOpNormalize: outputTriplet(visit, "normalize(", "", ")"); break;
// case EOpDPdx: outputTriplet(visit, "ddx(", "", ")"); break;
// case EOpDPdy: outputTriplet(visit, "ddy(", "", ")"); break;
// case EOpFwidth: outputTriplet(visit, "fwidth(", "", ")"); break;
case EOpDFdx: outputTriplet(visit, "ddx(", "", ")"); break;
case EOpDFdy: outputTriplet(visit, "ddy(", "", ")"); break;
case EOpFwidth: outputTriplet(visit, "fwidth(", "", ")"); break;
case EOpAny: outputTriplet(visit, "any(", "", ")"); break;
case EOpAll: outputTriplet(visit, "all(", "", ")"); break;
default: UNREACHABLE();
......
......@@ -129,9 +129,9 @@ enum TOperator {
EOpReflect,
EOpRefract,
//EOpDPdx, // Fragment only, OES_standard_derivatives extension
//EOpDPdy, // Fragment only, OES_standard_derivatives extension
//EOpFwidth, // Fragment only, OES_standard_derivatives extension
EOpDFdx, // Fragment only, OES_standard_derivatives extension
EOpDFdy, // Fragment only, OES_standard_derivatives extension
EOpFwidth, // Fragment only, OES_standard_derivatives extension
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