69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
/**
|
|
* Based on
|
|
* https://github.com/blurrypiano/littleVulkanEngine/blob/main/src/lve_buffer.hpp
|
|
*/
|
|
#pragma once
|
|
|
|
#include "device.hpp"
|
|
|
|
namespace sophia {
|
|
|
|
class Buffer {
|
|
public:
|
|
Buffer(const Buffer&) = delete;
|
|
Buffer& operator=(const Buffer&) = delete;
|
|
|
|
Buffer(Device& device, vk::DeviceSize instanceSize, u32 instanceCount,
|
|
vk::BufferUsageFlags usageFlags,
|
|
vk::MemoryPropertyFlags memoryPropertyFlags,
|
|
vk::DeviceSize minOffsetAlignment = 1);
|
|
~Buffer();
|
|
|
|
vk::Result map(vk::DeviceSize size = VK_WHOLE_SIZE,
|
|
vk::DeviceSize offset = 0);
|
|
void unmap();
|
|
|
|
void writeToBuffer(void* data, vk::DeviceSize size = VK_WHOLE_SIZE,
|
|
vk::DeviceSize offset = 0);
|
|
vk::Result flush(vk::DeviceSize size = VK_WHOLE_SIZE,
|
|
vk::DeviceSize offset = 0);
|
|
vk::DescriptorBufferInfo descriptorInfo(vk::DeviceSize size = VK_WHOLE_SIZE,
|
|
vk::DeviceSize offset = 0);
|
|
vk::Result invalidate(vk::DeviceSize size = VK_WHOLE_SIZE,
|
|
vk::DeviceSize offset = 0);
|
|
|
|
void writeToIndex(void* data, int index);
|
|
vk::Result flushIndex(int index);
|
|
vk::DescriptorBufferInfo descriptorInfoForIndex(int index);
|
|
vk::Result invalidateIndex(int index);
|
|
|
|
vk::Buffer getBuffer() const { return buffer; }
|
|
void* getMappedMemory() const { return mapped; }
|
|
uint32_t getInstanceCount() const { return instanceCount; }
|
|
vk::DeviceSize getInstanceSize() const { return instanceSize; }
|
|
vk::DeviceSize getAlignmentSize() const { return instanceSize; }
|
|
vk::BufferUsageFlags getUsageFlags() const { return usageFlags; }
|
|
vk::MemoryPropertyFlags getMemoryPropertyFlags() const {
|
|
return memoryPropertyFlags;
|
|
}
|
|
vk::DeviceSize getBufferSize() const { return bufferSize; }
|
|
|
|
private:
|
|
static vk::DeviceSize getAlignment(vk::DeviceSize instanceSize,
|
|
vk::DeviceSize minOffsetAlignment);
|
|
|
|
Device& device;
|
|
void* mapped = nullptr;
|
|
vk::Buffer buffer = VK_NULL_HANDLE;
|
|
vk::DeviceMemory memory = VK_NULL_HANDLE;
|
|
|
|
vk::DeviceSize bufferSize;
|
|
uint32_t instanceCount;
|
|
vk::DeviceSize instanceSize;
|
|
vk::DeviceSize alignmentSize;
|
|
vk::BufferUsageFlags usageFlags;
|
|
vk::MemoryPropertyFlags memoryPropertyFlags;
|
|
};
|
|
|
|
} // namespace sophia
|