MUDA
Loading...
Searching...
No Matches
buffer_3d_view.h
1#pragma once
2#include <cuda.h>
3#include <cuda_runtime.h>
4#include <cuda_runtime_api.h>
5#include <cinttypes>
6#include <muda/type_traits/type_modifier.h>
7#include <muda/viewer/dense/dense_3d.h>
8#include <muda/tools/extent.h>
9#include <muda/buffer/buffer_info_accessor.h>
10#include <muda/view/view_base.h>
11namespace muda
12{
13template <bool IsConst, typename T>
14class Buffer3DViewT : public ViewBase<IsConst>
15{
16 using Base = ViewBase<IsConst>;
17
18 template <bool OtherIsConst, typename U>
19 friend class Buffer3DViewT;
20
21 public:
22 static_assert(!std::is_const_v<T>, "Ty must be non-const");
27
28 using CViewer = CDense3D<T>;
29 using Viewer = Dense3D<T>;
30 using ThisViewer = std::conditional_t<IsConst, CViewer, Viewer>;
31
32 private:
33 friend class BufferLaunch;
35
36 template <typename U>
37 using auto_const_t = typename Base::template auto_const_t<U>;
38
39 protected:
40 auto_const_t<T>* m_data = nullptr;
41 size_t m_pitch_bytes = ~0;
42 size_t m_pitch_bytes_area = ~0;
43 size_t m_origin_width = ~0;
44 size_t m_origin_height = ~0;
45
46 Offset3D m_offset;
47 Extent3D m_extent;
48
49 public:
50 MUDA_GENERIC Buffer3DViewT() MUDA_NOEXCEPT = default;
51
52 MUDA_GENERIC Buffer3DViewT(const Buffer3DViewT&) MUDA_NOEXCEPT = default;
53
54 template <bool OtherIsConst>
55 MUDA_GENERIC Buffer3DViewT(const Buffer3DViewT<OtherIsConst, T>& other) MUDA_NOEXCEPT;
56
57 MUDA_GENERIC
58 Buffer3DViewT(auto_const_t<T>* data,
59 size_t pitch_bytes,
60 size_t pitch_bytes_area,
61 size_t origin_width,
62 size_t origin_height,
63 const Offset3D& offset,
64 const Extent3D& extent) MUDA_NOEXCEPT;
65
66 MUDA_GENERIC Buffer3DViewT(T* data,
67 size_t pitch_bytes,
68 size_t pitch_bytes_area,
69 const Offset3D& offset,
70 const Extent3D& extent) MUDA_NOEXCEPT;
71
72
73 MUDA_GENERIC ConstView as_const() const MUDA_NOEXCEPT;
74
75 MUDA_GENERIC auto_const_t<T>* data(size_t x, size_t y, size_t z) const MUDA_NOEXCEPT;
76
77 MUDA_GENERIC auto_const_t<T>* data(size_t flatten_i) const MUDA_NOEXCEPT;
78
79 MUDA_GENERIC auto_const_t<T>* origin_data() const MUDA_NOEXCEPT;
80
81 MUDA_GENERIC ThisView subview(Offset3D offset, Extent3D extent = {}) const MUDA_NOEXCEPT;
82
83 MUDA_GENERIC ThisViewer viewer() const MUDA_NOEXCEPT;
84
85 MUDA_GENERIC Extent3D extent() const MUDA_NOEXCEPT;
86
87 MUDA_GENERIC Offset3D offset() const MUDA_NOEXCEPT;
88
89 MUDA_GENERIC size_t pitch_bytes() const MUDA_NOEXCEPT;
90
91 MUDA_GENERIC size_t pitch_bytes_area() const MUDA_NOEXCEPT;
92
93 MUDA_GENERIC size_t total_size() const MUDA_NOEXCEPT;
94
95 MUDA_GENERIC CViewer cviewer() const MUDA_NOEXCEPT;
96
97 MUDA_HOST void fill(const T& v) const MUDA_REQUIRES(!IsConst);
98
99 MUDA_HOST void copy_from(const Buffer3DViewT<true, T>& other) const
100 MUDA_REQUIRES(!IsConst);
101
102 MUDA_HOST void copy_from(const T* host) const MUDA_REQUIRES(!IsConst);
103
104 MUDA_HOST void copy_to(T* host) const;
105
106 private:
107 MUDA_GENERIC cudaPitchedPtr cuda_pitched_ptr() const MUDA_NOEXCEPT;
108};
109
110template <typename T>
112
113template <typename T>
115
116template <typename T>
118{
119 using type = CBuffer3DView<T>;
120};
121
122template <typename T>
124{
125 using type = Buffer3DView<T>;
126};
127} // namespace muda
128
129#include "details/buffer_3d_view.inl"
Definition buffer_3d_view.h:15
Definition buffer_launch.h:13
Definition dense_3d.h:20
Definition extent.h:40
Definition extent.h:103
Definition view_base.h:8
Definition buffer_info_accessor.h:6
Definition type_modifier.h:22
Definition type_modifier.h:28