Let DM work without a GPU.

Testing:

/m/s/skia (dm) $ d dm; and env GYP_DEFINES=skia_gpu=0 d dm
ninja: Entering directory `out/Debug'
ninja: no work to do.
(294 GMs, 620 benches) x 4 configs, 245 tests
4507 tasks leftUnsupported vertex-color/texture xfer mode.
Unsupported vertex-color/texture xfer mode.
0 tasks left
416.53user 9.86system 0:47.43elapsed 898%CPU (0avgtext+0avgdata
13353376maxresident)k
0inputs+0outputs (0major+3579906minor)pagefaults 0swaps
ninja: Entering directory `out/Debug'
[909/909] LINK dm
(287 GMs, 612 benches) x 4 configs, 227 tests
0 tasks left
365.24user 7.71system 0:14.55elapsed 2562%CPU (0avgtext+0avgdata
14718912maxresident)k
0inputs+0outputs (0major+3328269minor)pagefaults 0swaps

BUG=skia:
R=bsalomon@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/213093004

git-svn-id: http://skia.googlecode.com/svn/trunk@13960 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/dm/DMGpuSupport.h b/dm/DMGpuSupport.h
new file mode 100644
index 0000000..46896b4
--- /dev/null
+++ b/dm/DMGpuSupport.h
@@ -0,0 +1,60 @@
+#ifndef DMGpuSupport_DEFINED
+#define DMGpuSupport_DEFINED
+
+// Provides Ganesh to DM,
+// or if it's not available, fakes it enough so most code doesn't have to know that.
+
+#include "SkSurface.h"
+
+#if SK_SUPPORT_GPU
+
+// Ganesh is available.  Yippee!
+
+#  include "GrContext.h"
+#  include "GrContextFactory.h"
+
+namespace DM {
+
+static const bool kGPUDisabled = false;
+
+static inline SkSurface* NewGpuSurface(GrContextFactory* grFactory,
+                                       GrContextFactory::GLContextType type,
+                                       SkImageInfo info,
+                                       int samples) {
+    return SkSurface::NewRenderTarget(grFactory->get(type), info, samples);
+}
+
+}  // namespace DM
+
+#else// !SK_SUPPORT_GPU
+
+// Ganesh is not available.  Fake it.
+
+class GrContextFactory {
+public:
+    typedef int GLContextType;
+
+    static const GLContextType kANGLE_GLContextType  = 0,
+                               kDebug_GLContextType  = 0,
+                               kMESA_GLContextType   = 0,
+                               kNVPR_GLContextType   = 0,
+                               kNative_GLContextType = 0,
+                               kNull_GLContextType   = 0;
+};
+
+namespace DM {
+
+static const bool kGPUDisabled = true;
+
+static inline SkSurface* NewGpuSurface(GrContextFactory*,
+                                       GrContextFactory::GLContextType,
+                                       SkImageInfo,
+                                       int) {
+    return NULL;
+}
+
+}  // namespace DM
+
+#endif//SK_SUPPORT_GPU
+
+#endif//DMGpuSupport_DEFINED