aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar egdaniel <egdaniel@google.com>2014-09-02 08:02:38 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-02 08:02:38 -0700
commit6db9128efb3b720252b6094dc2640796b66456aa (patch)
treed4fb291b4c28fc9f6b70ec411a5dfe8a05b319bf /src
parented82c4e822dff3405b0a6ba9c9d054825cb03b13 (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.cpp2
-rw-r--r--src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp5
-rw-r--r--src/gpu/gl/builders/GrGLFragmentShaderBuilder.h3
-rw-r--r--src/gpu/gl/builders/GrGLProgramBuilder.cpp5
-rw-r--r--src/gpu/gl/builders/GrGLProgramBuilder.h3
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