Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
CopyTask.cpp
Go to the documentation of this file.
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
9
15
16namespace skgpu::graphite {
17
19 size_t srcOffset,
20 sk_sp<Buffer> dstBuffer,
21 size_t dstOffset,
22 size_t size) {
23 SkASSERT(srcBuffer);
24 SkASSERT(size <= srcBuffer->size() - srcOffset);
25 SkASSERT(dstBuffer);
26 SkASSERT(size <= dstBuffer->size() - dstOffset);
28 srcOffset,
29 std::move(dstBuffer),
30 dstOffset,
31 size));
32}
33
34CopyBufferToBufferTask::CopyBufferToBufferTask(const Buffer* srcBuffer,
35 size_t srcOffset,
36 sk_sp<Buffer> dstBuffer,
37 size_t dstOffset,
38 size_t size)
39 : fSrcBuffer(srcBuffer)
40 , fSrcOffset(srcOffset)
41 , fDstBuffer(std::move(dstBuffer))
42 , fDstOffset(dstOffset)
43 , fSize(size) {}
44
46
51
53 CommandBuffer* commandBuffer,
55 if (commandBuffer->copyBufferToBuffer(fSrcBuffer, fSrcOffset, fDstBuffer, fDstOffset, fSize)) {
56 return Status::kSuccess;
57 } else {
58 return Status::kFail;
59 }
60}
61
63 SkIRect srcRect,
65 size_t bufferOffset,
66 size_t bufferRowBytes) {
67 return sk_sp<CopyTextureToBufferTask>(new CopyTextureToBufferTask(std::move(textureProxy),
68 srcRect,
69 std::move(buffer),
70 bufferOffset,
71 bufferRowBytes));
72}
73
74CopyTextureToBufferTask::CopyTextureToBufferTask(sk_sp<TextureProxy> textureProxy,
75 SkIRect srcRect,
77 size_t bufferOffset,
78 size_t bufferRowBytes)
79 : fTextureProxy(std::move(textureProxy))
80 , fSrcRect(srcRect)
81 , fBuffer(std::move(buffer))
82 , fBufferOffset(bufferOffset)
83 , fBufferRowBytes(bufferRowBytes) {
84}
85
87
90 if (!fTextureProxy) {
91 SKGPU_LOG_E("No texture proxy specified for CopyTextureToBufferTask");
92 return Status::kFail;
93 }
94 if (!TextureProxy::InstantiateIfNotLazy(resourceProvider, fTextureProxy.get())) {
95 SKGPU_LOG_E("Could not instantiate texture proxy for CopyTextureToBufferTask!");
96 return Status::kFail;
97 }
98 return Status::kSuccess;
99}
100
102 CommandBuffer* commandBuffer,
104 if (commandBuffer->copyTextureToBuffer(fTextureProxy->refTexture(),
105 fSrcRect,
106 std::move(fBuffer),
107 fBufferOffset,
108 fBufferRowBytes)) {
109 // TODO(b/332681367): CopyTextureToBuffer is currently only used for readback operations,
110 // which are a one-time event. Should this just default to returning kDiscard?
111 return Status::kSuccess;
112 } else {
113 return Status::kFail;
114 }
115}
116
117//--------------------------------------------------------------------------------------------------
118
120 SkIRect srcRect,
121 sk_sp<TextureProxy> dstProxy,
122 SkIPoint dstPoint,
123 int dstLevel) {
124 return sk_sp<CopyTextureToTextureTask>(new CopyTextureToTextureTask(std::move(srcProxy),
125 srcRect,
126 std::move(dstProxy),
127 dstPoint,
128 dstLevel));
129}
130
131CopyTextureToTextureTask::CopyTextureToTextureTask(sk_sp<TextureProxy> srcProxy,
132 SkIRect srcRect,
133 sk_sp<TextureProxy> dstProxy,
134 SkIPoint dstPoint,
135 int dstLevel)
136 : fSrcProxy(std::move(srcProxy))
137 , fSrcRect(srcRect)
138 , fDstProxy(std::move(dstProxy))
139 , fDstPoint(dstPoint)
140 , fDstLevel(dstLevel) {}
141
143
146 if (!fSrcProxy) {
147 SKGPU_LOG_E("No src texture proxy specified for CopyTextureToTextureTask");
148 return Status::kFail;
149 }
150 if (!TextureProxy::InstantiateIfNotLazy(resourceProvider, fSrcProxy.get())) {
151 SKGPU_LOG_E("Could not instantiate src texture proxy for CopyTextureToTextureTask!");
152 return Status::kFail;
153 }
154 if (!fDstProxy) {
155 SKGPU_LOG_E("No dst texture proxy specified for CopyTextureToTextureTask");
156 return Status::kFail;
157 }
158 if (!TextureProxy::InstantiateIfNotLazy(resourceProvider, fDstProxy.get())) {
159 SKGPU_LOG_E("Could not instantiate dst texture proxy for CopyTextureToTextureTask!");
160 return Status::kFail;
161 }
162 return Status::kSuccess;
163}
164
166 CommandBuffer* commandBuffer,
168
169 if (commandBuffer->copyTextureToTexture(fSrcProxy->refTexture(),
170 fSrcRect,
171 fDstProxy->refTexture(),
172 fDstPoint,
173 fDstLevel)) {
174 // TODO(b/332681367): The calling context should be able to specify whether or not this copy
175 // is a repeatable operation (e.g. dst readback copy for blending) or one time (e.g. client
176 // asked for a copy of an image or surface).
177 return Status::kSuccess;
178 } else {
179 return Status::kFail;
180 }
181}
182
183} // namespace skgpu::graphite
#define SKGPU_LOG_E(fmt,...)
Definition Log.h:38
#define SkASSERT(cond)
Definition SkAssert.h:116
bool copyTextureToTexture(sk_sp< Texture > src, SkIRect srcRect, sk_sp< Texture > dst, SkIPoint dstPoint, int mipLevel)
bool copyTextureToBuffer(sk_sp< Texture >, SkIRect srcRect, sk_sp< Buffer >, size_t bufferOffset, size_t bufferRowBytes)
bool copyBufferToBuffer(const Buffer *srcBuffer, size_t srcOffset, sk_sp< Buffer > dstBuffer, size_t dstOffset, size_t size)
Status prepareResources(ResourceProvider *, const RuntimeEffectDictionary *) override
Definition CopyTask.cpp:47
static sk_sp< CopyBufferToBufferTask > Make(const Buffer *srcBuffer, size_t srcOffset, sk_sp< Buffer > dstBuffer, size_t dstOffset, size_t size)
Definition CopyTask.cpp:18
Status addCommands(Context *, CommandBuffer *, ReplayTargetData) override
Definition CopyTask.cpp:52
static sk_sp< CopyTextureToBufferTask > Make(sk_sp< TextureProxy >, SkIRect srcRect, sk_sp< Buffer >, size_t bufferOffset, size_t bufferRowBytes)
Definition CopyTask.cpp:62
Status addCommands(Context *, CommandBuffer *, ReplayTargetData) override
Definition CopyTask.cpp:101
Status prepareResources(ResourceProvider *, const RuntimeEffectDictionary *) override
Definition CopyTask.cpp:88
Status prepareResources(ResourceProvider *, const RuntimeEffectDictionary *) override
Definition CopyTask.cpp:144
Status addCommands(Context *, CommandBuffer *, ReplayTargetData) override
Definition CopyTask.cpp:165
static sk_sp< CopyTextureToTextureTask > Make(sk_sp< TextureProxy > srcProxy, SkIRect srcRect, sk_sp< TextureProxy > dstProxy, SkIPoint dstPoint, int dstLevel=0)
Definition CopyTask.cpp:119
static bool InstantiateIfNotLazy(ResourceProvider *, TextureProxy *)
static const uint8_t buffer[]
Definition ref_ptr.h:256