Finalize gpu shaders in ProgramBuilding.
authoregdaniel <egdaniel@google.com>
Wed, 10 Feb 2016 17:50:38 +0000 (09:50 -0800)
committerCommit bot <commit-bot@chromium.org>
Wed, 10 Feb 2016 17:50:38 +0000 (09:50 -0800)
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1689703002

Review URL: https://codereview.chromium.org/1689703002

src/gpu/gl/builders/GrGLProgramBuilder.cpp
src/gpu/glsl/GrGLSLProgramBuilder.cpp
src/gpu/glsl/GrGLSLProgramBuilder.h

index 905fcde..b1d5980 100644 (file)
@@ -134,9 +134,10 @@ GrGLProgram* GrGLProgramBuilder::finalize() {
         return nullptr;
     }
 
+    this->finalizeShaders();
+
     // compile shaders and bind attributes / uniforms
     SkTDArray<GrGLuint> shadersToDelete;
-    fVS.finalize(GrGLSLUniformHandler::kVertex_Visibility);
     if (!this->compileAndAttachShaders(fVS, programID, GR_GL_VERTEX_SHADER, &shadersToDelete)) {
         this->cleanupProgram(programID, shadersToDelete);
         return nullptr;
@@ -153,7 +154,6 @@ GrGLProgram* GrGLProgramBuilder::finalize() {
         }
     }
 
-    fFS.finalize(GrGLSLUniformHandler::kFragment_Visibility);
     if (!this->compileAndAttachShaders(fFS, programID, GR_GL_FRAGMENT_SHADER, &shadersToDelete)) {
         this->cleanupProgram(programID, shadersToDelete);
         return nullptr;
index 900b6ee..45570c2 100644 (file)
@@ -10,6 +10,7 @@
 #include "GrPipeline.h"
 #include "glsl/GrGLSLFragmentProcessor.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
+#include "glsl/GrGLSLVarying.h"
 #include "glsl/GrGLSLXferProcessor.h"
 
 const int GrGLSLProgramBuilder::kVarsPerBlock = 8;
@@ -286,3 +287,9 @@ void GrGLSLProgramBuilder::cleanupFragmentProcessors() {
     }
 }
 
+void GrGLSLProgramBuilder::finalizeShaders() {
+    this->varyingHandler()->finalize();
+    fVS.finalize(GrGLSLUniformHandler::kVertex_Visibility);
+    fFS.finalize(GrGLSLUniformHandler::kFragment_Visibility);
+
+}
index a277595..fae8df0 100644 (file)
@@ -98,6 +98,8 @@ protected:
 
     void cleanupFragmentProcessors();
 
+    void finalizeShaders();
+
 private:
     // reset is called by program creator between each processor's emit code.  It increments the
     // stage offset for variable name mangling, and also ensures verfication variables in the