PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
Buffer.h
Go to the documentation of this file.
1
10
11#ifndef PBAT_GPU_COMMON_BUFFER_H
12#define PBAT_GPU_COMMON_BUFFER_H
13
14#include "PhysicsBasedAnimationToolkitExport.h"
15#include "pbat/gpu/Aliases.h"
16
17#include <cstddef>
18
19namespace pbat::gpu::common {
20
24class Buffer
25{
26 public:
30 enum class EType { uint8, uint16, uint32, uint64, int8, int16, int32, int64, float32, float64 };
31 static auto constexpr kMaxDims = 4;
32
33 template <class T>
34 using Data =
35 Eigen::Ref<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> const>;
43 PBAT_API Buffer(GpuIndex dims, GpuIndex n, EType type);
44 Buffer(const Buffer& other) = delete;
45 Buffer& operator=(const Buffer& other) = delete;
50 PBAT_API Buffer(Buffer&& other) noexcept;
56 PBAT_API Buffer& operator=(Buffer&& other) noexcept;
61 PBAT_API Buffer(Data<std::uint8_t> const& data);
66 PBAT_API Buffer(Data<std::uint16_t> const& data);
71 PBAT_API Buffer(Data<std::uint32_t> const& data);
76 PBAT_API Buffer(Data<std::uint64_t> const& data);
81 PBAT_API Buffer(Data<std::int8_t> const& data);
86 PBAT_API Buffer(Data<std::int16_t> const& data);
91 PBAT_API Buffer(Data<std::int32_t> const& data);
96 PBAT_API Buffer(Data<std::int64_t> const& data);
101 PBAT_API Buffer(Data<float> const& data);
106 PBAT_API Buffer(Data<double> const& data);
112 PBAT_API Buffer& operator=(Data<std::uint8_t> const& data);
118 PBAT_API Buffer& operator=(Data<std::uint16_t> const& data);
124 PBAT_API Buffer& operator=(Data<std::uint32_t> const& data);
130 PBAT_API Buffer& operator=(Data<std::uint64_t> const& data);
136 PBAT_API Buffer& operator=(Data<std::int8_t> const& data);
142 PBAT_API Buffer& operator=(Data<std::int16_t> const& data);
148 PBAT_API Buffer& operator=(Data<std::int32_t> const& data);
154 PBAT_API Buffer& operator=(Data<std::int64_t> const& data);
160 PBAT_API Buffer& operator=(Data<float> const& data);
166 PBAT_API Buffer& operator=(Data<double> const& data);
171 [[maybe_unused]] GpuIndex Dims() const { return mDims; }
176 PBAT_API EType Type() const;
181 PBAT_API std::size_t Size() const;
186 PBAT_API void Resize(GpuIndex n);
192 PBAT_API void Resize(GpuIndex dims, GpuIndex n);
197 PBAT_API void* Impl();
202 PBAT_API void const* Impl() const;
203
204 PBAT_API ~Buffer();
205
206 private:
207 void Deallocate();
208
209 GpuIndex mDims;
210 std::string mType;
211 void* mImpl;
212};
213
214} // namespace pbat::gpu::common
215
216#endif // PBAT_GPU_COMMON_BUFFER_H
1- or 2-dimensional GPU buffer of numeric types
Definition Buffer.h:25
static auto constexpr kMaxDims
Maximum number of dimensions.
Definition Buffer.h:31
PBAT_API Buffer(Data< std::int8_t > const &data)
Construct a new Buffer object from input data.
PBAT_API std::size_t Size() const
Get the number of elements per dimension in the buffer (i.e. columns)
Definition Buffer.cu:129
PBAT_API Buffer(Data< std::uint16_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer(Data< double > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer(Data< std::uint64_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer(Data< std::int32_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer(Data< std::int16_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer & operator=(Data< std::int64_t > const &data)
Copy assignment operator.
PBAT_API EType Type() const
Get the type of the buffer elements.
Definition Buffer.cu:104
PBAT_API void * Impl()
Get handle to the buffer implementation.
Definition Buffer.cu:217
PBAT_API Buffer & operator=(Data< std::uint64_t > const &data)
Copy assignment operator.
PBAT_API Buffer & operator=(Data< std::int32_t > const &data)
Copy assignment operator.
PBAT_API void Resize(GpuIndex n)
Resize the buffer to n elements per dimension.
Definition Buffer.cu:156
PBAT_API Buffer(GpuIndex dims, GpuIndex n, EType type)
Construct a new Buffer object of dims rows, n columns, and element type type.
Definition Buffer.cu:19
PBAT_API Buffer(Data< std::uint8_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer & operator=(Data< std::uint16_t > const &data)
Copy assignment operator.
PBAT_API Buffer(Data< std::uint32_t > const &data)
Construct a new Buffer object from input data.
EType
Type of the buffer elements.
Definition Buffer.h:30
PBAT_API Buffer(Data< std::int64_t > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer & operator=(Data< std::uint8_t > const &data)
Copy assignment operator.
GpuIndex Dims() const
Get the number of dimensions (i.e. rows) of the buffer.
Definition Buffer.h:171
PBAT_API Buffer(Data< float > const &data)
Construct a new Buffer object from input data.
PBAT_API Buffer & operator=(Data< float > const &data)
Copy assignment operator.
PBAT_API Buffer & operator=(Data< std::int8_t > const &data)
Copy assignment operator.
PBAT_API Buffer & operator=(Data< std::uint32_t > const &data)
Copy assignment operator.
Eigen::Ref< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > const > Data
Input data type.
Definition Buffer.h:34
PBAT_API Buffer & operator=(Data< double > const &data)
Copy assignment operator.
PBAT_API Buffer & operator=(Data< std::int16_t > const &data)
Copy assignment operator.
Type aliases for GPU code.
Public API to core GPU utilities.
Definition Buffer.cu:17
std::int32_t GpuIndex
Index type for GPU code.
Definition Aliases.h:20