Files
sophia/engine/src/buffer.hpp
T
2026-08-23 20:46:09 -07:00

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