Viewer: Fixes for shader editing in ANGLE

- Include default precision in viewer's highlight shader when needed
- Flush cache when switching backends. Fixes issues between (eg) GL
  and ANGLE where shader caps are different.

Change-Id: I80bc9fb56fdab49fdbe2e858db7398a5471048c6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/212194
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 89f89b2..cd74346 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1049,6 +1049,8 @@
 }
 
 void Viewer::setBackend(sk_app::Window::BackendType backendType) {
+    fPersistentCache.reset();
+    fCachedGLSL.reset();
     fBackendType = backendType;
 
     fWindow->detach();
@@ -2047,8 +2049,14 @@
                 }
                 if (doSave) {
                     // The hovered item (if any) gets a special shader to make it identifiable
-                    SkSL::String highlight = ctx->priv().caps()->shaderCaps()->versionDeclString();
-                    const char* f4Type = params.fGrContextOptions.fCacheSKSL ? "half4" : "vec4";
+                    auto shaderCaps = ctx->priv().caps()->shaderCaps();
+                    bool sksl = params.fGrContextOptions.fCacheSKSL;
+
+                    SkSL::String highlight = shaderCaps->versionDeclString();
+                    if (shaderCaps->usesPrecisionModifiers() && !sksl) {
+                        highlight.append("precision mediump float;\n");
+                    }
+                    const char* f4Type = sksl ? "half4" : "vec4";
                     highlight.appendf("out %s sk_FragColor;\n"
                                       "void main() { sk_FragColor = %s(1, 0, 1, 0.5); }",
                                       f4Type, f4Type);