blob: 90e3df4de814752445836145337f59043444a859 [file]
/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/gpu/ganesh/GrBufferTransferRenderTask.h"
#include "src/gpu/ganesh/GrGpu.h"
#include "src/gpu/ganesh/GrGpuBuffer.h"
#include "src/gpu/ganesh/GrOpFlushState.h"
#include <utility>
sk_sp<GrRenderTask> GrBufferTransferRenderTask::Make(sk_sp<GrGpuBuffer> src,
size_t srcOffset,
sk_sp<GrGpuBuffer> dst,
size_t dstOffset,
size_t size) {
return sk_sp<GrRenderTask>(new GrBufferTransferRenderTask(std::move(src),
srcOffset,
std::move(dst),
dstOffset,
size));
}
GrBufferTransferRenderTask::GrBufferTransferRenderTask(sk_sp<GrGpuBuffer> src,
size_t srcOffset,
sk_sp<GrGpuBuffer> dst,
size_t dstOffset,
size_t size)
: fSrc(std::move(src))
, fDst(std::move(dst))
, fSrcOffset(srcOffset)
, fDstOffset(dstOffset)
, fSize(size) {
this->setFlag(kBlocksReordering_Flag);
}
GrBufferTransferRenderTask::~GrBufferTransferRenderTask() = default;
GrRenderTask::ExecutionResult GrBufferTransferRenderTask::onExecute(GrOpFlushState* flushState) {
bool success = flushState->gpu()->transferFromBufferToBuffer(fSrc,
fSrcOffset,
fDst,
fDstOffset,
fSize);
return ExecutionResult::Ran(success);
}