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

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

Issue 367643004: Implement NVPR on GLES (Closed) Base URL: https://skia.googlesource.com/skia.git@02-path-program-fragment
Patch Set: Created 6 years, 6 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
Index: src/gpu/gl/GrGLShaderBuilder.cpp
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index 764d482389a122415d10f340b0404bd7e39d3947..6d5bec571afe8f349a719b4f10a80cfd286a480e 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -252,11 +252,11 @@ bool GrGLShaderBuilder::genProgram(const GrEffectStage* colorStages[],
GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
GrGLUniformManager* uniformManager,
const GrGLProgramDesc& desc)
- : fDesc(desc)
- , fGpu(gpu)
+ : fFSInputs(kVarsPerBlock)
, fUniformManager(SkRef(uniformManager))
+ , fDesc(desc)
+ , fGpu(gpu)
, fFSFeaturesAddedMask(0)
- , fFSInputs(kVarsPerBlock)
, fFSOutputs(kMaxFSOutputs)
, fUniforms(kVarsPerBlock)
, fSetupFragPosition(false)
@@ -508,6 +508,7 @@ const char* GrGLShaderBuilder::fragmentPosition() {
"gl_FragCoord",
GrGLShaderVar::kDefault_Precision,
GrGLShaderVar::kUpperLeft_Origin);
+ fUniformManager->appendFragmentInput();
fSetupFragPosition = true;
}
return "gl_FragCoord";
@@ -675,9 +676,7 @@ bool GrGLShaderBuilder::finish() {
}
this->bindProgramLocations(fOutput.fProgramID);
- if (fUniformManager->isUsingBindUniform()) {
- fUniformManager->getUniformLocations(fOutput.fProgramID, fUniforms);
- }
+ fUniformManager->bindProgramResourceLocations(fOutput.fProgramID, fUniforms);
GL_CALL(LinkProgram(fOutput.fProgramID));
@@ -710,9 +709,7 @@ bool GrGLShaderBuilder::finish() {
}
}
- if (!fUniformManager->isUsingBindUniform()) {
- fUniformManager->getUniformLocations(fOutput.fProgramID, fUniforms);
- }
+ fUniformManager->resolveProgramResourceLocations(fOutput.fProgramID, fUniforms, fFSInputs);
for (int i = 0; i < shadersToDelete.count(); ++i) {
GL_CALL(DeleteShader(shadersToDelete[i]));
@@ -921,10 +918,10 @@ bool GrGLFullShaderBuilder::addEffectAttribute(int attributeIndex,
return true;
}
-void GrGLFullShaderBuilder::addVarying(GrSLType type,
- const char* name,
- const char** vsOutName,
- const char** fsInName) {
+GrGLUniformManager::FragmentInputHandle GrGLFullShaderBuilder::addVarying(GrSLType type,
+ const char* name,
+ const char** vsOutName,
+ const char** fsInName) {
fVSOutputs.push_back();
fVSOutputs.back().setType(type);
fVSOutputs.back().setTypeModifier(GrGLShaderVar::kVaryingOut_TypeModifier);
@@ -954,10 +951,18 @@ void GrGLFullShaderBuilder::addVarying(GrSLType type,
{
fsName = fVSOutputs.back().accessName();
}
- this->fsInputAppend().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, *fsName);
+ this->fFSInputs.push_back().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, *fsName);
+ GrGLUniformManager::FragmentInputHandle h =
+ GrGLUniformManager::FragmentInputHandle::CreateFromFragmentInputIndex(fFSInputs.count() - 1);
+
+ SkDEBUGCODE(GrGLUniformManager::FragmentInputHandle h2 =)
+ fUniformManager->appendFragmentInput();
+ SkASSERT(h == h2);
+
if (fsInName) {
*fsInName = fsName->c_str();
}
+ return h;
}
const SkString* GrGLFullShaderBuilder::getEffectAttributeName(int attributeIndex) const {

Powered by Google App Engine
This is Rietveld 408576698