fm: Make --writeShaders dump fragment, vertex, and key files

Bug: skia:11372
Change-Id: Ib764b8d995655317e8968e57b1ea0528339d430b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/379060
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/tools/gpu/MemoryCache.cpp b/tools/gpu/MemoryCache.cpp
index 65f08b7..242ea4a 100644
--- a/tools/gpu/MemoryCache.cpp
+++ b/tools/gpu/MemoryCache.cpp
@@ -94,17 +94,35 @@
         SkSL::Program::Inputs inputsIgnored[kGrShaderTypeCount];
         SkSL::String shaders[kGrShaderTypeCount];
         const SkData* data = it->second.fData.get();
-        // Even with the SPIR-V switches, it seems like we must use .spv, or malisc tries to
-        // run glslang on the input.
-        const char* ext = GrBackendApi::kOpenGL == api ? "frag" : "spv";
+        const SkString& description = it->second.fDescription;
         SkReadBuffer reader(data->data(), data->size());
         GrPersistentCacheUtils::GetType(&reader); // Shader type tag
         GrPersistentCacheUtils::UnpackCachedShaders(&reader, shaders,
                                                     inputsIgnored, kGrShaderTypeCount);
 
-        SkString filename = SkStringPrintf("%s/%s.%s", path, md5.c_str(), ext);
-        SkFILEWStream file(filename.c_str());
-        file.write(shaders[kFragment_GrShaderType].c_str(), shaders[kFragment_GrShaderType].size());
+        // Even with the SPIR-V switches, it seems like we must use .spv, or malisc tries to
+        // run glslang on the input.
+        {
+            const char* ext = GrBackendApi::kOpenGL == api ? "frag" : "frag.spv";
+            SkString filename = SkStringPrintf("%s/%s.%s", path, md5.c_str(), ext);
+            SkFILEWStream file(filename.c_str());
+            file.write(shaders[kFragment_GrShaderType].c_str(),
+                       shaders[kFragment_GrShaderType].size());
+        }
+        {
+            const char* ext = GrBackendApi::kOpenGL == api ? "vert" : "vert.spv";
+            SkString filename = SkStringPrintf("%s/%s.%s", path, md5.c_str(), ext);
+            SkFILEWStream file(filename.c_str());
+            file.write(shaders[kVertex_GrShaderType].c_str(),
+                       shaders[kVertex_GrShaderType].size());
+        }
+
+        if (!description.isEmpty()) {
+            const char* ext = "key";
+            SkString filename = SkStringPrintf("%s/%s.%s", path, md5.c_str(), ext);
+            SkFILEWStream file(filename.c_str());
+            file.write(description.c_str(), description.size());
+        }
     }
 }