| Index: src/gpu/gl/GrGLCaps.cpp | 
| diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp | 
| index 85a72600d071505a21e6522ef7730abdda36740a..2a97137f1293a0502087b1bfc84791b0f728818a 100644 | 
| --- a/src/gpu/gl/GrGLCaps.cpp | 
| +++ b/src/gpu/gl/GrGLCaps.cpp | 
| @@ -12,13 +12,7 @@ | 
| #include "SkTSearch.h" | 
| #include "SkTSort.h" | 
|  | 
| -GrGLCaps::GrGLCaps() { | 
| -    this->reset(); | 
| -} | 
| - | 
| -void GrGLCaps::reset() { | 
| -    INHERITED::reset(); | 
| - | 
| +GrGLCaps::GrGLCaps(const GrGLContextInfo& ctxInfo, const GrGLInterface* glInterface) { | 
| fVerifiedColorConfigs.reset(); | 
| fStencilFormats.reset(); | 
| fStencilVerifiedColorConfigs.reset(); | 
| @@ -51,59 +45,12 @@ void GrGLCaps::reset() { | 
|  | 
| fReadPixelsSupportedCache.reset(); | 
|  | 
| -    fShaderCaps.reset(SkNEW(GrGLSLCaps)); | 
| - | 
| -} | 
| - | 
| -GrGLCaps::GrGLCaps(const GrGLCaps& caps) : GrCaps() { | 
| -    *this = caps; | 
| -} | 
| +    this->init(ctxInfo, glInterface); | 
|  | 
| -GrGLCaps& GrGLCaps::operator= (const GrGLCaps& caps) { | 
| -    INHERITED::operator=(caps); | 
| -    fVerifiedColorConfigs = caps.fVerifiedColorConfigs; | 
| -    fStencilFormats = caps.fStencilFormats; | 
| -    fStencilVerifiedColorConfigs = caps.fStencilVerifiedColorConfigs; | 
| -    fLATCAlias = caps.fLATCAlias; | 
| -    fMaxFragmentUniformVectors = caps.fMaxFragmentUniformVectors; | 
| -    fMaxVertexAttributes = caps.fMaxVertexAttributes; | 
| -    fMaxFragmentTextureUnits = caps.fMaxFragmentTextureUnits; | 
| -    fMSFBOType = caps.fMSFBOType; | 
| -    fInvalidateFBType = caps.fInvalidateFBType; | 
| -    fMapBufferType = caps.fMapBufferType; | 
| -    fRGBA8RenderbufferSupport = caps.fRGBA8RenderbufferSupport; | 
| -    fBGRAIsInternalFormat = caps.fBGRAIsInternalFormat; | 
| -    fTextureSwizzleSupport = caps.fTextureSwizzleSupport; | 
| -    fUnpackRowLengthSupport = caps.fUnpackRowLengthSupport; | 
| -    fUnpackFlipYSupport = caps.fUnpackFlipYSupport; | 
| -    fPackRowLengthSupport = caps.fPackRowLengthSupport; | 
| -    fPackFlipYSupport = caps.fPackFlipYSupport; | 
| -    fTextureUsageSupport = caps.fTextureUsageSupport; | 
| -    fTexStorageSupport = caps.fTexStorageSupport; | 
| -    fTextureRedSupport = caps.fTextureRedSupport; | 
| -    fImagingSupport = caps.fImagingSupport; | 
| -    fTwoFormatLimit = caps.fTwoFormatLimit; | 
| -    fFragCoordsConventionSupport = caps.fFragCoordsConventionSupport; | 
| -    fVertexArrayObjectSupport = caps.fVertexArrayObjectSupport; | 
| -    fES2CompatibilitySupport = caps.fES2CompatibilitySupport; | 
| -    fMultisampleDisableSupport = caps.fMultisampleDisableSupport; | 
| -    fUseNonVBOVertexAndIndexDynamicData = caps.fUseNonVBOVertexAndIndexDynamicData; | 
| -    fIsCoreProfile = caps.fIsCoreProfile; | 
| -    fFullClearIsFree = caps.fFullClearIsFree; | 
| - | 
| -    *(reinterpret_cast<GrGLSLCaps*>(fShaderCaps.get())) = | 
| -                                          *(reinterpret_cast<GrGLSLCaps*>(caps.fShaderCaps.get())); | 
| - | 
| -    return *this; | 
| +    fShaderCaps.reset(SkNEW_ARGS(GrGLSLCaps, (ctxInfo, glInterface, *this))); | 
| } | 
|  | 
| -bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { | 
| - | 
| -    this->reset(); | 
| -    if (!ctxInfo.isInitialized()) { | 
| -        return false; | 
| -    } | 
| - | 
| +void GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { | 
| GrGLStandard standard = ctxInfo.standard(); | 
| GrGLVersion version = ctxInfo.version(); | 
|  | 
| @@ -375,10 +322,6 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { | 
|  | 
| this->initConfigTexturableTable(ctxInfo, gli); | 
| this->initConfigRenderableTable(ctxInfo); | 
| - | 
| -    reinterpret_cast<GrGLSLCaps*>(fShaderCaps.get())->init(ctxInfo, gli, *this); | 
| - | 
| -    return true; | 
| } | 
|  | 
| void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) { | 
| @@ -948,46 +891,21 @@ SkString GrGLCaps::dump() const { | 
|  | 
| //////////////////////////////////////////////////////////////////////////////////////////// | 
|  | 
| -GrGLSLCaps::GrGLSLCaps() { | 
| -    this->reset(); | 
| -} | 
| - | 
| - | 
| -void GrGLSLCaps::reset() { | 
| -    INHERITED::reset(); | 
| - | 
| +GrGLSLCaps::GrGLSLCaps(const GrGLContextInfo& ctxInfo, | 
| +                       const GrGLInterface* gli, | 
| +                       const GrGLCaps& glCaps) { | 
| fDropsTileOnZeroDivide = false; | 
| fFBFetchSupport = false; | 
| fFBFetchNeedsCustomOutput = false; | 
| fAdvBlendEqInteraction = kNotSupported_AdvBlendEqInteraction; | 
| fFBFetchColorName = NULL; | 
| fFBFetchExtensionString = NULL; | 
| +    this->init(ctxInfo, gli, glCaps); | 
| } | 
|  | 
| -GrGLSLCaps::GrGLSLCaps(const GrGLSLCaps& caps) : GrShaderCaps() { | 
| -    *this = caps; | 
| -} | 
| - | 
| -GrGLSLCaps& GrGLSLCaps::operator= (const GrGLSLCaps& caps) { | 
| -    INHERITED::operator=(caps); | 
| -    fDropsTileOnZeroDivide = caps.fDropsTileOnZeroDivide; | 
| -    fFBFetchSupport = caps.fFBFetchSupport; | 
| -    fFBFetchNeedsCustomOutput = caps.fFBFetchNeedsCustomOutput; | 
| -    fAdvBlendEqInteraction = caps.fAdvBlendEqInteraction; | 
| -    fFBFetchColorName = caps.fFBFetchColorName; | 
| -    fFBFetchExtensionString = caps.fFBFetchExtensionString; | 
| - | 
| -    return *this; | 
| -} | 
| - | 
| -bool GrGLSLCaps::init(const GrGLContextInfo& ctxInfo, | 
| +void GrGLSLCaps::init(const GrGLContextInfo& ctxInfo, | 
| const GrGLInterface* gli, | 
| const GrGLCaps& glCaps) { | 
| -    this->reset(); | 
| -    if (!ctxInfo.isInitialized()) { | 
| -        return false; | 
| -    } | 
| - | 
| GrGLStandard standard = ctxInfo.standard(); | 
| GrGLVersion version = ctxInfo.version(); | 
|  | 
| @@ -1081,8 +999,6 @@ bool GrGLSLCaps::init(const GrGLContextInfo& ctxInfo, | 
| } | 
|  | 
| this->initShaderPrecisionTable(ctxInfo, gli); | 
| - | 
| -    return true; | 
| } | 
|  | 
| SkString GrGLSLCaps::dump() const { | 
|  |