1#pragma once
2
3#ifdef USE_VULKAN_API
4
5#include <ATen/native/vulkan/ops/Common.h>
6
7namespace at {
8namespace native {
9namespace vulkan {
10namespace ops {
11
12void transfer_cpu_to_vulkan(const Tensor&, vTensor&);
13
14void transfer_vulkan_to_cpu(vTensor&, Tensor&);
15
16void pack_cpu_to_vulkan(const Tensor& src, vTensor& dst);
17
18void pack_vulkan_to_cpu(vTensor& src, Tensor& dst);
19
20Tensor& copy_(Tensor& dst, const Tensor& src);
21
22vTensor to_vulkan(
23 at::Tensor& src,
24 const api::StorageType storage_type = api::StorageType::TEXTURE_3D);
25
26at::Tensor from_vulkan(vTensor& v_src);
27
28//
29// Utility functions for memcpy
30//
31
32template <typename T>
33void memcpy_to_mapping_impl(const Tensor& src, api::MemoryMap& dst_mapping) {
34 T* data_ptr = dst_mapping.template data<T>();
35 memcpy(
36 data_ptr,
37 src.data_ptr<T>(),
38 std::min(src.nbytes(), dst_mapping.nbytes()));
39}
40
41template <typename T>
42void memcpy_from_mapping_impl(api::MemoryMap& src_mapping, Tensor& dst) {
43 T* data_ptr = src_mapping.template data<T>();
44 memcpy(
45 dst.data_ptr<T>(),
46 data_ptr,
47 std::min(src_mapping.nbytes(), dst.nbytes()));
48}
49
50void memcpy_to_mapping(const Tensor& src, api::MemoryMap& dst_mapping);
51
52void memcpy_from_mapping(api::MemoryMap& src_mapping, Tensor& dst);
53
54} // namespace ops
55} // namespace vulkan
56} // namespace native
57} // namespace at
58
59#endif /* USE_VULKAN_API */
60