summaryrefslogtreecommitdiff
path: root/engine/xe_buffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/xe_buffer.hpp')
-rw-r--r--engine/xe_buffer.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/engine/xe_buffer.hpp b/engine/xe_buffer.hpp
new file mode 100644
index 0000000..dbbb13f
--- /dev/null
+++ b/engine/xe_buffer.hpp
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "xe_device.hpp"
+
+namespace xe {
+
+class XeBuffer {
+ public:
+ XeBuffer(
+ XeDevice& device,
+ VkDeviceSize instanceSize,
+ uint32_t instanceCount,
+ VkBufferUsageFlags usageFlags,
+ VkMemoryPropertyFlags memoryPropertyFlags,
+ VkDeviceSize minOffsetAlignment = 1);
+ ~XeBuffer();
+
+ XeBuffer(const XeBuffer&) = delete;
+ XeBuffer& operator=(const XeBuffer&) = delete;
+
+ 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);
+
+ XeDevice& xeDevice;
+ 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;
+};
+
+}
+