| Index: src/core/SkShadowShader.cpp
 | 
| diff --git a/src/core/SkShadowShader.cpp b/src/core/SkShadowShader.cpp
 | 
| index 5fc992acc14dd790ab86e43e6a761ecc7b7db8bc..804258321a80f9ab0bd20b7ffa995878ab079b17 100644
 | 
| --- a/src/core/SkShadowShader.cpp
 | 
| +++ b/src/core/SkShadowShader.cpp
 | 
| @@ -592,39 +592,7 @@ sk_sp<SkFlattenable> SkShadowShaderImpl::CreateProc(SkReadBuffer& buf) {
 | 
|      bool hasLocalMatrix = buf.readBool();
 | 
|      SkAssertResult(!hasLocalMatrix);
 | 
|  
 | 
| -    int numLights = buf.readInt();
 | 
| -
 | 
| -    SkLights::Builder builder;
 | 
| -
 | 
| -    for (int l = 0; l < numLights; ++l) {
 | 
| -        bool isAmbient = buf.readBool();
 | 
| -
 | 
| -        SkColor3f color;
 | 
| -        if (!buf.readScalarArray(&color.fX, 3)) {
 | 
| -            return nullptr;
 | 
| -        }
 | 
| -
 | 
| -        if (isAmbient) {
 | 
| -            builder.add(SkLights::Light(color));
 | 
| -        } else {
 | 
| -            SkVector3 dir;
 | 
| -            if (!buf.readScalarArray(&dir.fX, 3)) {
 | 
| -                return nullptr;
 | 
| -            }
 | 
| -
 | 
| -            sk_sp<SkImage> depthMap;
 | 
| -            if (!(depthMap = sk_ref_sp<SkImage>(buf.readImage()))) {
 | 
| -                return nullptr;
 | 
| -            }
 | 
| -
 | 
| -            SkLights::Light light = SkLights::Light(color, dir);
 | 
| -            light.setShadowMap(depthMap);
 | 
| -
 | 
| -            builder.add(light);
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    sk_sp<SkLights> lights(builder.finish());
 | 
| +    sk_sp<SkLights> lights = SkLights::MakeFromBuffer(buf);
 | 
|  
 | 
|      int diffuseWidth = buf.readInt();
 | 
|      int diffuseHeight = buf.readInt();
 | 
| @@ -641,21 +609,7 @@ sk_sp<SkFlattenable> SkShadowShaderImpl::CreateProc(SkReadBuffer& buf) {
 | 
|  void SkShadowShaderImpl::flatten(SkWriteBuffer& buf) const {
 | 
|      this->INHERITED::flatten(buf);
 | 
|  
 | 
| -    buf.writeInt(fLights->numLights());
 | 
| -
 | 
| -    for (int l = 0; l < fLights->numLights(); ++l) {
 | 
| -        const SkLights::Light& light = fLights->light(l);
 | 
| -
 | 
| -        bool isAmbient = SkLights::Light::kAmbient_LightType == light.type();
 | 
| -
 | 
| -        buf.writeBool(isAmbient);
 | 
| -        buf.writeScalarArray(&light.color().fX, 3);
 | 
| -        if (!isAmbient) {
 | 
| -            buf.writeScalarArray(&light.dir().fX, 3);
 | 
| -        }
 | 
| -
 | 
| -        buf.writeImage(light.getShadowMap());
 | 
| -    }
 | 
| +    fLights->flatten(buf);
 | 
|  
 | 
|      buf.writeInt(fDiffuseWidth);
 | 
|      buf.writeInt(fDiffuseHeight);
 | 
| 
 |