1 /*
2 * Copyright 2022 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 #include "src/gpu/ganesh/GrBufferTransferRenderTask.h"
8
9 #include "src/gpu/ganesh/GrGpu.h"
10 #include "src/gpu/ganesh/GrGpuBuffer.h"
11 #include "src/gpu/ganesh/GrOpFlushState.h"
12
13 #include <utility>
14
Make(sk_sp<GrGpuBuffer> src,size_t srcOffset,sk_sp<GrGpuBuffer> dst,size_t dstOffset,size_t size)15 sk_sp<GrRenderTask> GrBufferTransferRenderTask::Make(sk_sp<GrGpuBuffer> src,
16 size_t srcOffset,
17 sk_sp<GrGpuBuffer> dst,
18 size_t dstOffset,
19 size_t size) {
20 return sk_sp<GrRenderTask>(new GrBufferTransferRenderTask(std::move(src),
21 srcOffset,
22 std::move(dst),
23 dstOffset,
24 size));
25 }
26
GrBufferTransferRenderTask(sk_sp<GrGpuBuffer> src,size_t srcOffset,sk_sp<GrGpuBuffer> dst,size_t dstOffset,size_t size)27 GrBufferTransferRenderTask::GrBufferTransferRenderTask(sk_sp<GrGpuBuffer> src,
28 size_t srcOffset,
29 sk_sp<GrGpuBuffer> dst,
30 size_t dstOffset,
31 size_t size)
32 : fSrc(std::move(src))
33 , fDst(std::move(dst))
34 , fSrcOffset(srcOffset)
35 , fDstOffset(dstOffset)
36 , fSize(size) {
37 this->setFlag(kBlocksReordering_Flag);
38 }
39
40 GrBufferTransferRenderTask::~GrBufferTransferRenderTask() = default;
41
onExecute(GrOpFlushState * flushState)42 bool GrBufferTransferRenderTask::onExecute(GrOpFlushState* flushState) {
43 return flushState->gpu()->transferFromBufferToBuffer(fSrc,
44 fSrcOffset,
45 fDst,
46 fDstOffset,
47 fSize);
48 }
49