aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrTextureDomain.cpp
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2015-07-22 08:41:51 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-07-22 08:41:51 -0700
commit3fc656006c8bcbdca069b1b0f500f3c7311e5e5a (patch)
tree466498fb0a22f79f4063107a5051d18c8a523723 /src/gpu/effects/GrTextureDomain.cpp
parent4cb300340eb525b2ee2a73d12d81cbfd3b746498 (diff)
Fix tile drop-out on S4 for texture decal mode.
Switch to use highp on interpolants. Also removes some unnecessary formatting. BUG=skia:3381 Review URL: https://codereview.chromium.org/1245703004
Diffstat (limited to 'src/gpu/effects/GrTextureDomain.cpp')
-rw-r--r--src/gpu/effects/GrTextureDomain.cpp55
1 files changed, 30 insertions, 25 deletions
diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp
index 73eb8ff8ef..00067c491c 100644
--- a/src/gpu/effects/GrTextureDomain.cpp
+++ b/src/gpu/effects/GrTextureDomain.cpp
@@ -64,21 +64,21 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLShaderBuilder* builder,
switch (textureDomain.mode()) {
case kIgnore_Mode: {
- builder->codeAppendf("\t%s = ", outColor);
+ builder->codeAppendf("%s = ", outColor);
builder->appendTextureLookupAndModulate(inModulateColor, sampler,
inCoords.c_str());
- builder->codeAppend(";\n");
+ builder->codeAppend(";");
break;
}
case kClamp_Mode: {
SkString clampedCoords;
- clampedCoords.appendf("\tclamp(%s, %s.xy, %s.zw)",
+ clampedCoords.appendf("clamp(%s, %s.xy, %s.zw)",
inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str());
- builder->codeAppendf("\t%s = ", outColor);
+ builder->codeAppendf("%s = ", outColor);
builder->appendTextureLookupAndModulate(inModulateColor, sampler,
clampedCoords.c_str());
- builder->codeAppend(";\n");
+ builder->codeAppend(";");
break;
}
case kDecal_Mode: {
@@ -93,44 +93,49 @@ void GrTextureDomain::GLDomain::sampleTexture(GrGLShaderBuilder* builder,
// may return undefined results". This appears to be an issue with
// the 'any' call since even the simple "result=black; if (any())
// result=white;" code fails to compile.
- builder->codeAppend("\tvec4 outside = vec4(0.0, 0.0, 0.0, 0.0);\n");
- builder->codeAppend("\tvec4 inside = ");
+ builder->codeAppend("vec4 outside = vec4(0.0, 0.0, 0.0, 0.0);");
+ builder->codeAppend("vec4 inside = ");
builder->appendTextureLookupAndModulate(inModulateColor, sampler,
inCoords.c_str());
- builder->codeAppend(";\n");
- builder->codeAppendf("\tfloat x = (%s).x;\n", inCoords.c_str());
- builder->codeAppendf("\tfloat y = (%s).y;\n", inCoords.c_str());
-
- builder->codeAppendf("\tx = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);\n",
- domain, domain, domain);
- builder->codeAppendf("\ty = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);\n",
- domain, domain, domain);
- builder->codeAppend("\tfloat blend = step(1.0, max(x, y));\n");
- builder->codeAppendf("\t%s = mix(inside, outside, blend);\n", outColor);
+ builder->codeAppend(";");
+
+ builder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision,
+ program->ctxInfo().standard()));
+ builder->codeAppendf("float x = (%s).x;", inCoords.c_str());
+ builder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision,
+ program->ctxInfo().standard()));
+ builder->codeAppendf("float y = (%s).y;", inCoords.c_str());
+
+ builder->codeAppendf("x = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);",
+ domain, domain, domain);
+ builder->codeAppendf("y = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);",
+ domain, domain, domain);
+ builder->codeAppend("float blend = step(1.0, max(x, y));");
+ builder->codeAppendf("%s = mix(inside, outside, blend);", outColor);
} else {
- builder->codeAppend("\tbvec4 outside;\n");
- builder->codeAppendf("\toutside.xy = lessThan(%s, %s.xy);\n", inCoords.c_str(),
+ builder->codeAppend("bvec4 outside;\n");
+ builder->codeAppendf("outside.xy = lessThan(%s, %s.xy);", inCoords.c_str(),
domain);
- builder->codeAppendf("\toutside.zw = greaterThan(%s, %s.zw);\n", inCoords.c_str(),
+ builder->codeAppendf("outside.zw = greaterThan(%s, %s.zw);", inCoords.c_str(),
domain);
- builder->codeAppendf("\t%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
+ builder->codeAppendf("%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
outColor);
builder->appendTextureLookupAndModulate(inModulateColor, sampler,
inCoords.c_str());
- builder->codeAppend(";\n");
+ builder->codeAppend(";");
}
break;
}
case kRepeat_Mode: {
SkString clampedCoords;
- clampedCoords.printf("\tmod(%s - %s.xy, %s.zw - %s.xy) + %s.xy",
+ clampedCoords.printf("mod(%s - %s.xy, %s.zw - %s.xy) + %s.xy",
inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str(),
fDomainName.c_str(), fDomainName.c_str());
- builder->codeAppendf("\t%s = ", outColor);
+ builder->codeAppendf("%s = ", outColor);
builder->appendTextureLookupAndModulate(inModulateColor, sampler,
clampedCoords.c_str());
- builder->codeAppend(";\n");
+ builder->codeAppend(";");
break;
}
}