blob: 463a2d19c364c6a3b8b770e2cef987362bfa4e12 [file]
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#include <executorch/backends/vulkan/runtime/graph/ops/BlitNode.h>
#include <executorch/backends/vulkan/runtime/graph/ComputeGraph.h>
namespace vkcompute {
BlitNode::BlitNode(
ComputeGraph& graph,
ValueRef src,
ValueRef dst,
// const vkapi::ScalarType& dtype,
const ResizeFunction& resize_fn,
const std::vector<ValueRef>& resize_args)
: ExecuteNode(resize_fn, resize_args, {}, "Blit Node"),
src_(src),
dst_(dst) {
(void)graph;
}
void BlitNode::encode(ComputeGraph* graph) {
auto src_tensor = graph->get_tensor(src_);
auto dst_tensor = graph->get_tensor(dst_);
VK_CHECK_COND(
src_tensor->storage_type() != utils::kBuffer &&
dst_tensor->storage_type() != utils::kBuffer,
"BlitNode: Only texture backed tensors are supported.");
api::Context* const context = graph->context();
vkapi::PipelineBarrier pipeline_barrier{};
std::unique_lock<std::mutex> cmd_lock = context->dispatch_lock();
// Hack to get timing data for non shader op
std::string kernel_name("Blit_");
kernel_name.reserve(32);
kernel_name += vkapi::to_string(src_tensor->dtype());
kernel_name += "_to_";
kernel_name += vkapi::to_string(dst_tensor->dtype());
context->report_shader_dispatch_start(
kernel_name, utils::uvec3(), utils::uvec3(), node_id_);
context->register_blit(
pipeline_barrier,
src_tensor->image(
pipeline_barrier, vkapi::PipelineStage::TRANSFER, vkapi::kRead),
dst_tensor->image(
pipeline_barrier, vkapi::PipelineStage::TRANSFER, vkapi::kWrite));
context->report_shader_dispatch_end();
}
} // namespace vkcompute