created stub for metal gpu command buffer

Bug: skia:
Change-Id: I11ffb1126ea4665c456c2b74e98d9e9021a5aca2
Reviewed-on: https://skia-review.googlesource.com/141080
Commit-Queue: Timothy Liang <timliang@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/gn/gpu.gni b/gn/gpu.gni
index b47fda9..6cac050 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -628,6 +628,7 @@
   "$_src/gpu/mtl/GrMtlCaps.mm",
   "$_src/gpu/mtl/GrMtlGpu.h",
   "$_src/gpu/mtl/GrMtlGpu.mm",
+  "$_src/gpu/mtl/GrMtlGpuCommandBuffer.h",
   "$_src/gpu/mtl/GrMtlRenderTarget.mm",
   "$_src/gpu/mtl/GrMtlRenderTarget.h",
   "$_src/gpu/mtl/GrMtlTexture.mm",
diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h
index 8a68b76..1c25ded 100644
--- a/src/gpu/mtl/GrMtlGpu.h
+++ b/src/gpu/mtl/GrMtlGpu.h
@@ -65,13 +65,9 @@
     GrGpuRTCommandBuffer* createCommandBuffer(
                                     GrRenderTarget*, GrSurfaceOrigin,
                                     const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-                                    const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override {
-        return nullptr;
-    }
+                                    const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
 
-    GrGpuTextureCommandBuffer* createCommandBuffer(GrTexture*, GrSurfaceOrigin) override {
-        return nullptr;
-    }
+    GrGpuTextureCommandBuffer* createCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
 
     GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
     bool waitFence(GrFence, uint64_t) override { return true; }
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 0295659..892e4bc 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -7,6 +7,7 @@
 
 #include "GrMtlGpu.h"
 
+#include "GrMtlGpuCommandBuffer.h"
 #include "GrMtlTexture.h"
 #include "GrMtlTextureRenderTarget.h"
 #include "GrMtlUtil.h"
@@ -97,6 +98,18 @@
     fCmdBuffer = [fQueue commandBuffer];
 }
 
+GrGpuRTCommandBuffer* GrMtlGpu::createCommandBuffer(
+            GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+            const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
+            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+    return new GrMtlGpuRTCommandBuffer(this, renderTarget, origin, colorInfo, stencilInfo);
+}
+
+GrGpuTextureCommandBuffer* GrMtlGpu::createCommandBuffer(GrTexture* texture,
+                                                         GrSurfaceOrigin origin) {
+    return new GrMtlGpuTextureCommandBuffer(this, texture, origin);
+}
+
 void GrMtlGpu::submitCommandBuffer(SyncQueue sync) {
     SkASSERT(fCmdBuffer);
     [fCmdBuffer commit];
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.h b/src/gpu/mtl/GrMtlGpuCommandBuffer.h
new file mode 100644
index 0000000..8f1fd20
--- /dev/null
+++ b/src/gpu/mtl/GrMtlGpuCommandBuffer.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrMtlGpuCommandBuffer_DEFINED
+#define GrMtlGpuCommandBuffer_DEFINED
+
+#include "GrGpuCommandBuffer.h"
+
+class GrMtlGpu;
+class GrMtlRenderTarget;
+
+class GrMtlGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+public:
+    GrMtlGpuTextureCommandBuffer(GrMtlGpu* gpu, GrTexture* texture, GrSurfaceOrigin origin)
+            : INHERITED(texture, origin)
+            , fGpu(gpu) {
+        // Silence unused var warning
+        (void)fGpu;
+    }
+
+    ~GrMtlGpuTextureCommandBuffer() override {}
+
+    void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect,
+              const SkIPoint& dstPoint) override {}
+
+    void insertEventMarker(const char* msg) override {}
+
+private:
+    void submit() override {}
+
+    GrMtlGpu* fGpu;
+
+    typedef GrGpuTextureCommandBuffer INHERITED;
+};
+
+class GrMtlGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
+public:
+    GrMtlGpuRTCommandBuffer(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+                            const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
+                            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo)
+            : INHERITED(rt, origin)
+            , fGpu(gpu)
+            , fColorLoadAndStoreInfo(colorInfo)
+            , fStencilLoadAndStoreInfo(stencilInfo) {
+        // Silence unused var warning
+        (void)fColorLoadAndStoreInfo;
+        (void)fStencilLoadAndStoreInfo;
+    }
+
+    ~GrMtlGpuRTCommandBuffer() override {}
+
+    void begin() override {}
+    void end() override {}
+
+    void discard() override {}
+
+    void insertEventMarker(const char* msg) override {}
+
+    void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override {}
+
+    void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect,
+              const SkIPoint& dstPoint) override {}
+
+    void submit() override {}
+
+private:
+    GrGpu* gpu() override { return fGpu; }
+
+    void onDraw(const GrPrimitiveProcessor& primProc,
+                const GrPipeline& pipeline,
+                const GrPipeline::FixedDynamicState* fixedDynamicState,
+                const GrPipeline::DynamicStateArrays* dynamicStateArrays,
+                const GrMesh mesh[],
+                int meshCount,
+                const SkRect& bounds) override {}
+
+    void onClear(const GrFixedClip& clip, GrColor color) override {}
+
+    void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override {}
+
+    GrMtlGpu*                                     fGpu;
+    GrGpuRTCommandBuffer::LoadAndStoreInfo        fColorLoadAndStoreInfo;
+    GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
+
+    typedef GrGpuRTCommandBuffer INHERITED;
+};
+
+#endif
+