From e70604ea8b5216621e50f7063edf7d56ee95498d Mon Sep 17 00:00:00 2001 From: Timothy Liang Date: Thu, 19 Jul 2018 09:49:46 -0400 Subject: created stub for metal gpu command buffer Bug: skia: Change-Id: I11ffb1126ea4665c456c2b74e98d9e9021a5aca2 Reviewed-on: https://skia-review.googlesource.com/141080 Commit-Queue: Timothy Liang Reviewed-by: Greg Daniel --- src/gpu/mtl/GrMtlGpu.h | 8 +--- src/gpu/mtl/GrMtlGpu.mm | 13 ++++++ src/gpu/mtl/GrMtlGpuCommandBuffer.h | 93 +++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 src/gpu/mtl/GrMtlGpuCommandBuffer.h (limited to 'src') diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h index 8a68b763eb..1c25dedbac 100644 --- a/src/gpu/mtl/GrMtlGpu.h +++ b/src/gpu/mtl/GrMtlGpu.h @@ -65,13 +65,9 @@ public: 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 0295659b36..892e4bc5a1 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 @@ GrMtlGpu::GrMtlGpu(GrContext* context, const GrContextOptions& options, 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 0000000000..8f1fd20d62 --- /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 + -- cgit v1.2.3