Add a simpler key type for scratch resource keys.

BUG=skia:2889

Review URL: https://codereview.chromium.org/815833004
diff --git a/src/gpu/GrStencilBuffer.cpp b/src/gpu/GrStencilBuffer.cpp
index 5aa56e0..be463a0 100644
--- a/src/gpu/GrStencilBuffer.cpp
+++ b/src/gpu/GrStencilBuffer.cpp
@@ -7,35 +7,13 @@
  */
 
 #include "GrStencilBuffer.h"
+#include "GrResourceKey.h"
 
-#include "GrContext.h"
-#include "GrGpu.h"
-#include "GrResourceCache2.h"
-
-namespace {
-// we should never have more than one stencil buffer with same combo of (width,height,samplecount)
-void gen_cache_id(int width, int height, int sampleCnt, GrCacheID* cacheID) {
-    static const GrCacheID::Domain gStencilBufferDomain = GrResourceKey::ScratchDomain();
-    GrCacheID::Key key;
-    uint32_t* keyData = key.fData32;
-    keyData[0] = width;
-    keyData[1] = height;
-    keyData[2] = sampleCnt;
-    memset(keyData + 3, 0, sizeof(key) - 3 * sizeof(uint32_t));
-    GR_STATIC_ASSERT(sizeof(key) >= 3 * sizeof(uint32_t));
-    cacheID->reset(gStencilBufferDomain, key);
-}
-}
-
-GrResourceKey GrStencilBuffer::ComputeKey(int width,
-                                          int height,
-                                          int sampleCnt) {
-    // All SBs are created internally to attach to RTs so they all use the same domain.
-    static const GrResourceKey::ResourceType gStencilBufferResourceType =
-        GrResourceKey::GenerateResourceType();
-    GrCacheID id;
-    gen_cache_id(width, height, sampleCnt, &id);
-
-    // we don't use any flags for SBs currently.
-    return GrResourceKey(id, gStencilBufferResourceType, 0);
+void GrStencilBuffer::ComputeKey(int width, int height, int sampleCnt, GrScratchKey* key) {
+    static const GrScratchKey::ResourceType kType = GrScratchKey::GenerateResourceType();
+    GrScratchKey::Builder builder(key, kType, 2);
+    SkASSERT(width <= SK_MaxU16);
+    SkASSERT(height <= SK_MaxU16);
+    builder[0] = width | (height << 16);
+    builder[1] = sampleCnt;
 }