4#include "kompute/Core.hpp"
5#include "kompute/Memory.hpp"
6#include "logger/Logger.hpp"
36 std::shared_ptr<vk::Device>
device,
54 std::shared_ptr<vk::Device>
device,
175 std::shared_ptr<vk::Buffer> getPrimaryBuffer();
177 Type
type()
override {
return Type::eTensor; }
181 vk::DescriptorBufferInfo mDescriptorBufferInfo;
185 std::shared_ptr<vk::Buffer> mPrimaryBuffer;
186 bool mFreePrimaryBuffer =
false;
187 std::shared_ptr<vk::Buffer> mStagingBuffer;
188 bool mFreeStagingBuffer =
false;
190 void allocateMemoryCreateGPUResources();
191 void createBuffer(std::shared_ptr<vk::Buffer>
buffer,
193 void allocateBindMemory(std::shared_ptr<vk::Buffer>
buffer,
194 std::shared_ptr<vk::DeviceMemory>
memory,
196 void recordCopyBuffer(
const vk::CommandBuffer&
commandBuffer,
198 std::shared_ptr<vk::Buffer>
bufferTo,
201 void recordCopyBufferFromImage(
const vk::CommandBuffer&
commandBuffer,
203 std::shared_ptr<vk::Buffer>
bufferTo,
207 void recordBufferMemoryBarrier(
const vk::CommandBuffer&
commandBuffer,
215 vk::BufferUsageFlags getPrimaryBufferUsageFlags();
216 vk::BufferUsageFlags getStagingBufferUsageFlags();
218 vk::DescriptorBufferInfo constructDescriptorBufferInfo();
231 TensorT(std::shared_ptr<vk::PhysicalDevice> physicalDevice,
232 std::shared_ptr<vk::Device> device,
242 KP_LOG_DEBUG(
"Kompute TensorT constructor with data size {}",
size);
246 std::shared_ptr<vk::PhysicalDevice> physicalDevice,
247 std::shared_ptr<vk::Device> device,
248 const std::vector<T>& data,
253 static_cast<uint32_t
>(data.size()),
258 KP_LOG_DEBUG(
"Kompute TensorT filling constructor with data size {}",
272 ~TensorT() { KP_LOG_DEBUG(
"Kompute TensorT destructor"); }
static constexpr DataTypes dataType()
std::vector< T > vector()
Definition Memory.hpp:282
T * data()
Definition Memory.hpp:265
MemoryTypes
Definition Memory.hpp:28
@ eDevice
Type is device memory, source and destination.
Definition Tensor.hpp:229
TensorT(const TensorT &)=delete
Make TensorT uncopyable.
Type type() override
Definition Tensor.hpp:177
Tensor(const Tensor &)=delete
Make Tensor uncopyable.
void recordStagingMemoryBarrier(const vk::CommandBuffer &commandBuffer, vk::AccessFlagBits srcAccessMask, vk::AccessFlagBits dstAccessMask, vk::PipelineStageFlagBits srcStageMask, vk::PipelineStageFlagBits dstStageMask) override
void recordCopyFromStagingToDevice(const vk::CommandBuffer &commandBuffer) override
Tensor(std::shared_ptr< vk::PhysicalDevice > physicalDevice, std::shared_ptr< vk::Device > device, uint32_t elementTotalCount, uint32_t elementMemorySize, const DataTypes &dataType, const MemoryTypes &memoryType=MemoryTypes::eDevice)
void recordPrimaryMemoryBarrier(const vk::CommandBuffer &commandBuffer, vk::AccessFlagBits srcAccessMask, vk::AccessFlagBits dstAccessMask, vk::PipelineStageFlagBits srcStageMask, vk::PipelineStageFlagBits dstStageMask) override
void recordCopyFrom(const vk::CommandBuffer &commandBuffer, std::shared_ptr< Tensor > copyFromTensor) override
void recordCopyFrom(const vk::CommandBuffer &commandBuffer, std::shared_ptr< Image > copyFromImage) override
Tensor(std::shared_ptr< vk::PhysicalDevice > physicalDevice, std::shared_ptr< vk::Device > device, void *data, uint32_t elementTotalCount, uint32_t elementMemorySize, const DataTypes &dataType, const MemoryTypes &tensorType=MemoryTypes::eDevice)
vk::WriteDescriptorSet constructDescriptorSet(vk::DescriptorSet descriptorSet, uint32_t binding) override
void recordCopyFromDeviceToStaging(const vk::CommandBuffer &commandBuffer) override