• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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