diff options
author | egdaniel <egdaniel@google.com> | 2014-09-02 08:02:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-02 08:02:38 -0700 |
commit | 6db9128efb3b720252b6094dc2640796b66456aa (patch) | |
tree | d4fb291b4c28fc9f6b70ec411a5dfe8a05b319bf /src | |
parent | ed82c4e822dff3405b0a6ba9c9d054825cb03b13 (diff) |
Add option to add precision to varyings in shader
Also use highp varying on bezier cubics to fix numerical issues for n10 and n4.
BUG=skia:2860
R=bsalomon@google.com
Author: egdaniel@google.com
Review URL: https://codereview.chromium.org/522303004
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/effects/GrBezierEffect.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp | 5 | ||||
-rw-r--r-- | src/gpu/gl/builders/GrGLFragmentShaderBuilder.h | 3 | ||||
-rw-r--r-- | src/gpu/gl/builders/GrGLProgramBuilder.cpp | 5 | ||||
-rw-r--r-- | src/gpu/gl/builders/GrGLProgramBuilder.h | 3 |
5 files changed, 11 insertions, 7 deletions
diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp index 92a11ef3a4..488af1585f 100644 --- a/src/gpu/effects/GrBezierEffect.cpp +++ b/src/gpu/effects/GrBezierEffect.cpp @@ -342,7 +342,7 @@ void GrGLCubicEffect::emitCode(GrGLFullProgramBuilder* builder, const char *vsName, *fsName; builder->addVarying(kVec4f_GrSLType, "CubicCoeffs", - &vsName, &fsName); + &vsName, &fsName, GrGLShaderVar::kHigh_Precision); GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); const SkString* attr0Name = diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp index d216a18c25..fef3691cd3 100644 --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp @@ -195,8 +195,9 @@ const char* GrGLFragmentShaderBuilder::fragmentPosition() { void GrGLFragmentShaderBuilder::addVarying(GrSLType type, const char* name, - const char** fsInName) { - fInputs.push_back().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, name); + const char** fsInName, + GrGLShaderVar::Precision fsPrecision) { + fInputs.push_back().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, name, fsPrecision); if (fsInName) { *fsInName = name; } diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h index 0f700bd94d..b3e0ab0405 100644 --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h @@ -65,7 +65,8 @@ private: */ void addVarying(GrSLType type, const char* name, - const char** fsInName); + const char** fsInName, + GrGLShaderVar::Precision fsPrecision = GrGLShaderVar::kDefault_Precision); /* * Private functions used by GrGLProgramBuilder for compilation diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp index 41b84d806a..141442d599 100644 --- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp +++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp @@ -343,7 +343,8 @@ void GrGLFullProgramBuilder::emitCodeAfterEffects() { void GrGLFullProgramBuilder::addVarying(GrSLType type, const char* name, const char** vsOutName, - const char** fsInName) { + const char** fsInName, + GrGLShaderVar::Precision fsPrecision) { fVS.addVarying(type, name, vsOutName); SkString* fsInputName = fVS.fOutputs.back().accessName(); @@ -355,7 +356,7 @@ void GrGLFullProgramBuilder::addVarying(GrSLType type, fsInputName = fGS.fOutputs.back().accessName(); } #endif - fFS.addVarying(type, fsInputName->c_str(), fsInName); + fFS.addVarying(type, fsInputName->c_str(), fsInName, fsPrecision); } GrGLFullProgramBuilder::VaryingHandle diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.h b/src/gpu/gl/builders/GrGLProgramBuilder.h index d1af63fc4e..00193efc45 100644 --- a/src/gpu/gl/builders/GrGLProgramBuilder.h +++ b/src/gpu/gl/builders/GrGLProgramBuilder.h @@ -280,7 +280,8 @@ public: void addVarying(GrSLType type, const char* name, const char** vsOutName = NULL, - const char** fsInName = NULL); + const char** fsInName = NULL, + GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault_Precision); /** Add a separable varying input variable to the current program. * A separable varying (fragment shader input) is a varying that can be used also when vertex |