1 /* 2 * Copyright 2021 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef skgpu_graphite_CopyTask_DEFINED 9 #define skgpu_graphite_CopyTask_DEFINED 10 11 #include "src/gpu/graphite/Task.h" 12 13 #include "include/core/SkRect.h" 14 15 namespace skgpu::graphite { 16 17 class Buffer; 18 class Texture; 19 class TextureProxy; 20 21 class CopyBufferToBufferTask final : public Task { 22 public: 23 static sk_sp<CopyBufferToBufferTask> Make(sk_sp<Buffer> srcBuffer, 24 sk_sp<Buffer> dstBuffer); 25 26 static sk_sp<CopyBufferToBufferTask> Make(sk_sp<Buffer> srcBuffer, size_t srcOffset, 27 sk_sp<Buffer> dstBuffer, size_t dstOffset, 28 size_t size); 29 30 ~CopyBufferToBufferTask() override; 31 32 bool prepareResources(ResourceProvider*, const RuntimeEffectDictionary*) override; 33 34 bool addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 35 36 private: 37 CopyBufferToBufferTask(sk_sp<Buffer> srcBuffer, size_t srcOffset, 38 sk_sp<Buffer> dstBuffer, size_t dstOffset, 39 size_t size); 40 41 sk_sp<Buffer> fSrcBuffer; 42 size_t fSrcOffset; 43 sk_sp<Buffer> fDstBuffer; 44 size_t fDstOffset; 45 size_t fSize; 46 }; 47 48 class CopyTextureToBufferTask final : public Task { 49 public: 50 static sk_sp<CopyTextureToBufferTask> Make(sk_sp<TextureProxy>, 51 SkIRect srcRect, 52 sk_sp<Buffer>, 53 size_t bufferOffset, 54 size_t bufferRowBytes); 55 56 ~CopyTextureToBufferTask() override; 57 58 bool prepareResources(ResourceProvider*, const RuntimeEffectDictionary*) override; 59 60 bool addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 61 62 private: 63 CopyTextureToBufferTask(sk_sp<TextureProxy>, 64 SkIRect srcRect, 65 sk_sp<Buffer>, 66 size_t bufferOffset, 67 size_t bufferRowBytes); 68 69 sk_sp<TextureProxy> fTextureProxy; 70 SkIRect fSrcRect; 71 sk_sp<Buffer> fBuffer; 72 size_t fBufferOffset; 73 size_t fBufferRowBytes; 74 }; 75 76 class CopyTextureToTextureTask final : public Task { 77 public: 78 static sk_sp<CopyTextureToTextureTask> Make(sk_sp<TextureProxy> srcProxy, 79 SkIRect srcRect, 80 sk_sp<TextureProxy> dstProxy, 81 SkIPoint dstPoint); 82 83 ~CopyTextureToTextureTask() override; 84 85 bool prepareResources(ResourceProvider*, const RuntimeEffectDictionary*) override; 86 87 bool addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 88 89 private: 90 CopyTextureToTextureTask(sk_sp<TextureProxy> srcProxy, 91 SkIRect srcRect, 92 sk_sp<TextureProxy> dstProxy, 93 SkIPoint dstPoint); 94 95 sk_sp<TextureProxy> fSrcProxy; 96 SkIRect fSrcRect; 97 sk_sp<TextureProxy> fDstProxy; 98 SkIPoint fDstPoint; 99 }; 100 101 } // namespace skgpu::graphite 102 103 #endif // skgpu_graphite_CopyTask_DEFINED 104