60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "xe_device.hpp"
|
|
|
|
namespace xe {
|
|
|
|
class Buffer {
|
|
public:
|
|
Buffer(
|
|
Device& device,
|
|
VkDeviceSize instanceSize,
|
|
uint32_t instanceCount,
|
|
VkBufferUsageFlags usageFlags,
|
|
VkMemoryPropertyFlags memoryPropertyFlags,
|
|
VkDeviceSize minOffsetAlignment = 1);
|
|
~Buffer();
|
|
|
|
Buffer(const Buffer&) = delete;
|
|
Buffer& operator=(const Buffer&) = 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);
|
|
|
|
Device& 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;
|
|
};
|
|
|
|
}
|
|
|