minecraftvulkan/engine/xe_buffer.hpp

61 lines
1.9 KiB
C++
Raw Permalink Normal View History

2022-09-19 01:20:51 +00:00
#pragma once
#include "xe_device.hpp"
namespace xe {
2022-09-25 01:16:13 +00:00
class Buffer {
2022-09-19 01:20:51 +00:00
public:
2022-09-25 01:16:13 +00:00
Buffer(
Device& device,
2022-09-19 01:20:51 +00:00
VkDeviceSize instanceSize,
uint32_t instanceCount,
VkBufferUsageFlags usageFlags,
VkMemoryPropertyFlags memoryPropertyFlags,
VkDeviceSize minOffsetAlignment = 1);
2022-09-25 01:16:13 +00:00
~Buffer();
2022-09-19 01:20:51 +00:00
2022-09-25 01:16:13 +00:00
Buffer(const Buffer&) = delete;
Buffer& operator=(const Buffer&) = delete;
2022-09-19 01:20:51 +00:00
VkResult map(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
void unmap();
void writeToBuffer(void* data, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
VkResult flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
VkDescriptorBufferInfo descriptorInfo(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
VkResult invalidate(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
void writeToIndex(void* data, int index);
VkResult flushIndex(int index);
VkDescriptorBufferInfo descriptorInfoForIndex(int index);
VkResult invalidateIndex(int index);
VkBuffer getBuffer() const { return buffer; }
void* getMappedMemory() const { return mapped; }
uint32_t getInstanceCount() const { return instanceCount; }
VkDeviceSize getInstanceSize() const { return instanceSize; }
VkDeviceSize getAlignmentSize() const { return instanceSize; }
VkBufferUsageFlags getUsageFlags() const { return usageFlags; }
VkMemoryPropertyFlags getMemoryPropertyFlags() const { return memoryPropertyFlags; }
VkDeviceSize getBufferSize() const { return bufferSize; }
private:
static VkDeviceSize getAlignment(VkDeviceSize instanceSize, VkDeviceSize minOffsetAlignment);
2022-09-25 01:16:13 +00:00
Device& xeDevice;
2022-09-19 01:20:51 +00:00
void* mapped = nullptr;
VkBuffer buffer = VK_NULL_HANDLE;
VkDeviceMemory memory = VK_NULL_HANDLE;
VkDeviceSize bufferSize;
uint32_t instanceCount;
VkDeviceSize instanceSize;
VkDeviceSize alignmentSize;
VkBufferUsageFlags usageFlags;
VkMemoryPropertyFlags memoryPropertyFlags;
};
}