Big code changes

This commit is contained in:
2026-08-23 20:46:09 -07:00
parent 7243e13df5
commit 0cb0628101
25 changed files with 1645 additions and 227 deletions
+68
View File
@@ -0,0 +1,68 @@
/**
* 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