28 Buffer(VkDeviceSize in_size, VkBufferUsageFlags in_usage, VkSharingMode in_sharingMode);
31 VkBuffer
vk(uint32_t deviceID)
const {
return _vulkanData[deviceID].buffer; }
34 VkBufferCreateFlags flags = 0;
36 VkBufferUsageFlags usage;
37 VkSharingMode sharingMode;
42 VkResult bind(
DeviceMemory* deviceMemory, VkDeviceSize memoryOffset);
44 MemorySlots::OptionalOffset reserve(VkDeviceSize in_size, VkDeviceSize alignment);
45 void release(VkDeviceSize offset, VkDeviceSize in_size);
48 size_t maximumAvailableSpace()
const;
49 size_t totalAvailableSize()
const;
50 size_t totalReservedSize()
const;
52 VkMemoryRequirements getMemoryRequirements(uint32_t deviceID)
const;
54 DeviceMemory* getDeviceMemory(uint32_t deviceID) {
return _vulkanData[deviceID].deviceMemory; }
55 const DeviceMemory* getDeviceMemory(uint32_t deviceID)
const {
return _vulkanData[deviceID].deviceMemory; }
57 VkDeviceSize getMemoryOffset(uint32_t deviceID)
const {
return _vulkanData[deviceID].memoryOffset; }
59 virtual bool compile(Device* device);
60 virtual bool compile(Context& context);
67 VkBuffer buffer = VK_NULL_HANDLE;
69 VkDeviceSize memoryOffset = 0;
70 VkDeviceSize size = 0;
78 mutable std::mutex _mutex;
83 extern VSG_DECLSPEC
ref_ptr<Buffer> createBufferAndMemory(
Device* device, VkDeviceSize in_size, VkBufferUsageFlags in_usage, VkSharingMode in_sharingMode, VkMemoryPropertyFlags memoryProperties);