| Index: src/gpu/gl/GrGLInterface.cpp | 
| diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp | 
| index 7cb6239a855473044b58ad9a0420941ef8662162..c0ff716d190c6e825f31e60111442eafedcfe0ca 100644 | 
| --- a/src/gpu/gl/GrGLInterface.cpp | 
| +++ b/src/gpu/gl/GrGLInterface.cpp | 
| @@ -116,14 +116,18 @@ GrGLInterface* GrGLInterface::NewClone(const GrGLInterface* interface) { | 
| return clone; | 
| } | 
|  | 
| +#define RETURN_FALSE_INTERFACE                             \ | 
| +    GrDebugCrash("GrGLInterface::validate() failed.");     \ | 
| +    return false;                                          \ | 
| + | 
| bool GrGLInterface::validate() const { | 
|  | 
| if (kNone_GrGLStandard == fStandard) { | 
| -        return false; | 
| +        RETURN_FALSE_INTERFACE | 
| } | 
|  | 
| if (!fExtensions.isInitialized()) { | 
| -        return false; | 
| +        RETURN_FALSE_INTERFACE | 
| } | 
|  | 
| // functions that are always required | 
| @@ -219,7 +223,7 @@ bool GrGLInterface::validate() const { | 
| NULL == fFunctions.fGenFramebuffers || | 
| NULL == fFunctions.fGenRenderbuffers || | 
| NULL == fFunctions.fRenderbufferStorage) { | 
| -        return false; | 
| +        RETURN_FALSE_INTERFACE | 
| } | 
|  | 
| GrGLVersion glVer = GrGLGetVersion(this); | 
| @@ -242,7 +246,7 @@ bool GrGLInterface::validate() const { | 
| if (NULL == fFunctions.fStencilFuncSeparate || | 
| NULL == fFunctions.fStencilMaskSeparate || | 
| NULL == fFunctions.fStencilOpSeparate) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } else if (kGL_GrGLStandard == fStandard) { | 
|  | 
| @@ -250,15 +254,15 @@ bool GrGLInterface::validate() const { | 
| if (NULL == fFunctions.fStencilFuncSeparate || | 
| NULL == fFunctions.fStencilMaskSeparate || | 
| NULL == fFunctions.fStencilOpSeparate) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (glVer >= GR_GL_VER(3,0) && NULL == fFunctions.fBindFragDataLocation) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| if (glVer >= GR_GL_VER(2,0) || fExtensions.has("GL_ARB_draw_buffers")) { | 
| if (NULL == fFunctions.fDrawBuffers) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| @@ -270,7 +274,7 @@ bool GrGLInterface::validate() const { | 
| NULL == fFunctions.fGetQueryiv || | 
| NULL == fFunctions.fGetQueryObjectiv || | 
| NULL == fFunctions.fGetQueryObjectuiv) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (glVer >= GR_GL_VER(3,3) || | 
| @@ -278,12 +282,12 @@ bool GrGLInterface::validate() const { | 
| fExtensions.has("GL_EXT_timer_query")) { | 
| if (NULL == fFunctions.fGetQueryObjecti64v || | 
| NULL == fFunctions.fGetQueryObjectui64v) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (glVer >= GR_GL_VER(3,3) || fExtensions.has("GL_ARB_timer_query")) { | 
| if (NULL == fFunctions.fQueryCounter) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (!isCoreProfile) { | 
| @@ -292,7 +296,7 @@ bool GrGLInterface::validate() const { | 
| NULL == fFunctions.fMatrixMode || | 
| NULL == fFunctions.fTexGenfv || | 
| NULL == fFunctions.fTexGeni) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (fExtensions.has("GL_NV_path_rendering")) { | 
| @@ -345,7 +349,7 @@ bool GrGLInterface::validate() const { | 
| NULL == fFunctions.fIsPointInStrokePath || | 
| NULL == fFunctions.fGetPathLength || | 
| NULL == fFunctions.fPointAlongPath) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } | 
| @@ -355,7 +359,7 @@ bool GrGLInterface::validate() const { | 
| (glVer >= GR_GL_VER(1,3)) || | 
| fExtensions.has("GL_ARB_texture_compression")) { | 
| if (NULL == fFunctions.fCompressedTexImage2D) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| @@ -364,7 +368,7 @@ bool GrGLInterface::validate() const { | 
| (NULL == fFunctions.fGetTexLevelParameteriv || | 
| NULL == fFunctions.fDrawBuffer || | 
| NULL == fFunctions.fReadBuffer)) { | 
| -        return false; | 
| +        RETURN_FALSE_INTERFACE | 
| } | 
|  | 
| // GL_EXT_texture_storage is part of desktop 4.2 | 
| @@ -374,12 +378,12 @@ bool GrGLInterface::validate() const { | 
| fExtensions.has("GL_ARB_texture_storage") || | 
| fExtensions.has("GL_EXT_texture_storage")) { | 
| if (NULL == fFunctions.fTexStorage2D) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } else if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_texture_storage")) { | 
| if (NULL == fFunctions.fTexStorage2D) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| @@ -387,7 +391,7 @@ bool GrGLInterface::validate() const { | 
| // FIXME: Remove this once Chromium is updated to provide this function | 
| #if 0 | 
| if (NULL == fFunctions.fDiscardFramebuffer) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| #endif | 
| } | 
| @@ -398,36 +402,36 @@ bool GrGLInterface::validate() const { | 
| if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_ARB_framebuffer_object")) { | 
| if (NULL == fFunctions.fRenderbufferStorageMultisample || | 
| NULL == fFunctions.fBlitFramebuffer) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } else { | 
| if (fExtensions.has("GL_EXT_framebuffer_blit") && | 
| NULL == fFunctions.fBlitFramebuffer) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| if (fExtensions.has("GL_EXT_framebuffer_multisample") && | 
| NULL == fFunctions.fRenderbufferStorageMultisample) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } else { | 
| if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_CHROMIUM_framebuffer_multisample")) { | 
| if (NULL == fFunctions.fRenderbufferStorageMultisample || | 
| NULL == fFunctions.fBlitFramebuffer) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (fExtensions.has("GL_APPLE_framebuffer_multisample")) { | 
| if (NULL == fFunctions.fRenderbufferStorageMultisampleES2APPLE || | 
| NULL == fFunctions.fResolveMultisampleFramebuffer) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| if (fExtensions.has("GL_IMG_multisampled_render_to_texture") || | 
| fExtensions.has("GL_EXT_multisampled_render_to_texture")) { | 
| if (NULL == fFunctions.fRenderbufferStorageMultisampleES2EXT || | 
| NULL == fFunctions.fFramebufferTexture2DMultisample) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } | 
| @@ -438,7 +442,7 @@ bool GrGLInterface::validate() const { | 
| if (kGL_GrGLStandard == fStandard || fExtensions.has("GL_OES_mapbuffer")) { | 
| if (NULL == fFunctions.fMapBuffer || | 
| NULL == fFunctions.fUnmapBuffer) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| @@ -446,14 +450,14 @@ bool GrGLInterface::validate() const { | 
| if (kGL_GrGLStandard == fStandard && | 
| (glVer >= GR_GL_VER(3,3) || fExtensions.has("GL_ARB_blend_func_extended"))) { | 
| if (NULL == fFunctions.fBindFragDataLocationIndexed) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| // glGetStringi was added in version 3.0 of both desktop and ES. | 
| if (glVer >= GR_GL_VER(3, 0)) { | 
| if (NULL == fFunctions.fGetStringi) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
|  | 
| @@ -462,7 +466,7 @@ bool GrGLInterface::validate() const { | 
| if (NULL == fFunctions.fBindVertexArray || | 
| NULL == fFunctions.fDeleteVertexArrays || | 
| NULL == fFunctions.fGenVertexArrays) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } else { | 
| @@ -470,7 +474,7 @@ bool GrGLInterface::validate() const { | 
| if (NULL == fFunctions.fBindVertexArray || | 
| NULL == fFunctions.fDeleteVertexArrays || | 
| NULL == fFunctions.fGenVertexArrays) { | 
| -                return false; | 
| +                RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| } | 
| @@ -480,7 +484,7 @@ bool GrGLInterface::validate() const { | 
| if (NULL == fFunctions.fInsertEventMarker || | 
| NULL == fFunctions.fPushGroupMarker || | 
| NULL == fFunctions.fPopGroupMarker) { | 
| -            return false; | 
| +            RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| #endif | 
|  |