Glop SkiaShader support

Change-Id: I894a0b62701bd02367ab970813e4c332147351a2
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 91e0f89..bdc5c5c2 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -39,7 +39,7 @@
     LOG_ALWAYS_FATAL_IF((mStageFlags & (requiredFlags)) != (requiredFlags), \
             "not prepared for current stage")
 
-static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {;
+static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {
     TextureVertex::setUV(quadVertex++, uvs.left, uvs.top);
     TextureVertex::setUV(quadVertex++, uvs.right, uvs.top);
     TextureVertex::setUV(quadVertex++, uvs.left, uvs.bottom);
@@ -49,6 +49,7 @@
 GlopBuilder::GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop)
         : mRenderState(renderState)
         , mCaches(caches)
+        , mShader(nullptr)
         , mOutGlop(outGlop) {
     mStageFlags = kInitialStage;
 }
@@ -192,12 +193,7 @@
             }
         }
     }
-
-    if (shader) {
-        SkiaShader::describe(&mCaches, mDescription, mCaches.extensions(), *shader);
-        // TODO: store shader data
-        LOG_ALWAYS_FATAL("shaders not yet supported");
-    }
+    mShader = shader; // shader resolved in ::build()
 
     if (colorFilter) {
         SkColor color;
@@ -394,6 +390,11 @@
 void GlopBuilder::build() {
     REQUIRE_STAGES(kAllStages);
 
+    // serialize shader info into ShaderData
+    GLuint textureUnit = mOutGlop->fill.texture ? 1 : 0;
+    SkiaShader::store(mCaches, mShader, mOutGlop->transform.modelView,
+            &textureUnit, &mDescription, &(mOutGlop->fill.skiaShaderData));
+
     mOutGlop->fill.program = mCaches.programCache.get(mDescription);
     mOutGlop->transform.canvas.mapRect(mOutGlop->bounds);