xref: /aosp_15_r20/external/skia/src/gpu/graphite/task/CopyTask.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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