Add an applyNativeWorkarounds context impl hook.

This method can allow the implementation to override the Context's
workarounds. Use this design pattern now that we have access to the
gl::Context everywhere - we don't need to cache a local copy in the
Renderer objects.

This will be used to apply a Shader Program Cache workaround on the
GL level, that will only be used for the GLES back-end on Qualcomm.

BUG=angleproject:2088

Change-Id: I6da25c5c29c3ba01b8820c5234d1b92dd2d2121a
Reviewed-on: https://chromium-review.googlesource.com/549980
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index a3f08aa..a6043d9 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -2810,6 +2810,9 @@
 
 void Context::initWorkarounds()
 {
+    // Apply back-end workarounds.
+    mImplementation->applyNativeWorkarounds(&mWorkarounds);
+
     // Lose the context upon out of memory error if the application is
     // expecting to watch for those events.
     mWorkarounds.loseContextOnOutOfMemory = (mResetStrategy == GL_LOSE_CONTEXT_ON_RESET_EXT);