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_task_CopyTask_DEFINED 9 #define skgpu_graphite_task_CopyTask_DEFINED 10 11 #include "src/gpu/graphite/task/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 // The srcBuffer for this Task is always a transfer buffer which is owned by the 24 // UploadBufferManager. Thus we don't have to take a ref to it as the UploadBufferManager will 25 // handle its refs and passing them to the Recording. 26 static sk_sp<CopyBufferToBufferTask> Make(const Buffer* srcBuffer, 27 size_t srcOffset, 28 sk_sp<Buffer> dstBuffer, 29 size_t dstOffset, 30 size_t size); 31 32 ~CopyBufferToBufferTask() override; 33 34 Status prepareResources(ResourceProvider*, 35 ScratchResourceManager*, 36 const RuntimeEffectDictionary*) override; 37 38 Status addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 39 40 private: 41 CopyBufferToBufferTask(const Buffer* srcBuffer, 42 size_t srcOffset, 43 sk_sp<Buffer> dstBuffer, 44 size_t dstOffset, 45 size_t size); 46 47 const Buffer* fSrcBuffer; 48 size_t fSrcOffset; 49 sk_sp<Buffer> fDstBuffer; 50 size_t fDstOffset; 51 size_t fSize; 52 }; 53 54 class CopyTextureToBufferTask final : public Task { 55 public: 56 static sk_sp<CopyTextureToBufferTask> Make(sk_sp<TextureProxy>, 57 SkIRect srcRect, 58 sk_sp<Buffer>, 59 size_t bufferOffset, 60 size_t bufferRowBytes); 61 62 ~CopyTextureToBufferTask() override; 63 64 Status prepareResources(ResourceProvider*, 65 ScratchResourceManager*, 66 const RuntimeEffectDictionary*) override; 67 68 Status addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 69 70 private: 71 CopyTextureToBufferTask(sk_sp<TextureProxy>, 72 SkIRect srcRect, 73 sk_sp<Buffer>, 74 size_t bufferOffset, 75 size_t bufferRowBytes); 76 77 sk_sp<TextureProxy> fTextureProxy; 78 SkIRect fSrcRect; 79 sk_sp<Buffer> fBuffer; 80 size_t fBufferOffset; 81 size_t fBufferRowBytes; 82 }; 83 84 class CopyTextureToTextureTask final : public Task { 85 public: 86 static sk_sp<CopyTextureToTextureTask> Make(sk_sp<TextureProxy> srcProxy, 87 SkIRect srcRect, 88 sk_sp<TextureProxy> dstProxy, 89 SkIPoint dstPoint, 90 int dstLevel = 0); 91 92 ~CopyTextureToTextureTask() override; 93 94 Status prepareResources(ResourceProvider*, 95 ScratchResourceManager*, 96 const RuntimeEffectDictionary*) override; 97 98 Status addCommands(Context*, CommandBuffer*, ReplayTargetData) override; 99 100 private: 101 CopyTextureToTextureTask(sk_sp<TextureProxy> srcProxy, 102 SkIRect srcRect, 103 sk_sp<TextureProxy> dstProxy, 104 SkIPoint dstPoint, 105 int dstLevel); 106 107 sk_sp<TextureProxy> fSrcProxy; 108 SkIRect fSrcRect; 109 sk_sp<TextureProxy> fDstProxy; 110 SkIPoint fDstPoint; 111 int fDstLevel; 112 }; 113 114 } // namespace skgpu::graphite 115 116 #endif // skgpu_graphite_task_CopyTask_DEFINED 117