Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(569)

Unified Diff: src/gpu/gl/GrGLShaderBuilder.cpp

Issue 25048002: Express (GLSL expression, possibly known value) pairs as a class (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rebase Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/gpu/gl/GrGLSL_impl.h ('K') | « src/gpu/gl/GrGLShaderBuilder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLShaderBuilder.cpp
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index f4ffb4dd2ce2f071743c9c3d08b3edb7abaa4d56..e48295c91eafc489b0da5ff01e2eae7ec648f6cc 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -116,8 +116,6 @@ GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
, fFSInputs(kVarsPerBlock)
, fFSOutputs(kMaxFSOutputs)
, fSetupFragPosition(false)
- , fKnownColorValue(kNone_GrSLConstantVec)
- , fKnownCoverageValue(kNone_GrSLConstantVec)
, fHasCustomColorOutput(false)
, fHasSecondaryOutput(false)
, fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFragPosKey) {
@@ -180,10 +178,10 @@ GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
break;
}
case GrGLProgramDesc::kTransBlack_ColorInput:
- fKnownColorValue = kZeros_GrSLConstantVec;
+ fInputColor = GrGLSLExpr<4>(0);
break;
case GrGLProgramDesc::kSolidWhite_ColorInput:
- fKnownColorValue = kOnes_GrSLConstantVec;
+ fInputColor = GrGLSLExpr<4>(1);
break;
default:
GrCrash("Unknown color type.");
@@ -207,10 +205,10 @@ GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
break;
}
case GrGLProgramDesc::kTransBlack_ColorInput:
- fKnownCoverageValue = kZeros_GrSLConstantVec;
+ fInputCoverage = GrGLSLExpr<4>(0);
break;
case GrGLProgramDesc::kSolidWhite_ColorInput:
- fKnownCoverageValue = kOnes_GrSLConstantVec;
+ fInputCoverage = GrGLSLExpr<4>(1);
break;
default:
GrCrash("Unknown coverage type.");
@@ -344,7 +342,7 @@ void GrGLShaderBuilder::fsAppendTextureLookupAndModulate(
GrSLType varyingType) {
SkString lookup;
this->appendTextureLookup(&lookup, sampler, coordName, varyingType);
- GrGLSLModulatef<4>(&fFSCode, modulation, lookup.c_str());
+ fFSCode.append((GrGLSLExpr<4>(modulation) * GrGLSLExpr<4>(lookup)).c_str());
}
GrBackendEffectFactory::EffectKey GrGLShaderBuilder::KeyForTextureAccess(
@@ -561,14 +559,13 @@ void GrGLShaderBuilder::emitEffects(
const GrEffectStage* effectStages[],
const GrBackendEffectFactory::EffectKey effectKeys[],
int effectCnt,
- SkString* fsInOutColor,
- GrSLConstantVec* fsInOutColorKnownValue,
+ GrGLSLExpr<4>* fsInOutColor,
SkTArray<GrGLUniformManager::UniformHandle, true>* effectSamplerHandles[],
GrGLEffect* glEffects[]) {
bool effectEmitted = false;
- SkString inColor = *fsInOutColor;
- SkString outColor;
+ GrGLSLExpr<4> inColor = *fsInOutColor;
+ GrGLSLExpr<4> outColor;
for (int e = 0; e < effectCnt; ++e) {
SkASSERT(NULL != effectStages[e] && NULL != effectStages[e]->getEffect());
@@ -602,15 +599,19 @@ void GrGLShaderBuilder::emitEffects(
glEffects[e] = effect->getFactory().createGLInstance(drawEffect);
- if (kZeros_GrSLConstantVec == *fsInOutColorKnownValue) {
+ if (inColor.isZeros()) {
+ SkString inColorName;
// Effects have no way to communicate zeros, they treat an empty string as ones.
- this->nameVariable(&inColor, '\0', "input");
- this->fsCodeAppendf("\tvec4 %s = %s;\n", inColor.c_str(), GrGLSLZerosVecf(4));
+ this->nameVariable(&inColorName, '\0', "input");
+ this->fsCodeAppendf("\tvec4 %s = %s;\n", inColorName.c_str(), inColor.c_str());
+ inColor = inColorName;
}
// create var to hold stage result
- this->nameVariable(&outColor, '\0', "output");
- this->fsCodeAppendf("\tvec4 %s;\n", outColor.c_str());
+ SkString outColorName;
+ this->nameVariable(&outColorName, '\0', "output");
+ this->fsCodeAppendf("\tvec4 %s;\n", outColorName.c_str());
+ outColor = outColorName;
// Enclose custom code in a block to avoid namespace conflicts
SkString openBrace;
@@ -624,7 +625,7 @@ void GrGLShaderBuilder::emitEffects(
drawEffect,
effectKeys[e],
outColor.c_str(),
- inColor.isEmpty() ? NULL : inColor.c_str(),
+ inColor.isOnes() ? NULL : inColor.c_str(),
textureSamplers);
if (NULL != fVertexBuilder.get()) {
@@ -633,7 +634,6 @@ void GrGLShaderBuilder::emitEffects(
this->fsCodeAppend("\t}\n");
inColor = outColor;
- *fsInOutColorKnownValue = kNone_GrSLConstantVec;
effectEmitted = true;
}
« src/gpu/gl/GrGLSL_impl.h ('K') | « src/gpu/gl/GrGLShaderBuilder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698