diff options
Diffstat (limited to 'src/resources/buffer.cpp')
-rw-r--r-- | src/resources/buffer.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/resources/buffer.cpp b/src/resources/buffer.cpp new file mode 100644 index 0000000..8568466 --- /dev/null +++ b/src/resources/buffer.cpp @@ -0,0 +1,56 @@ +#include "resources/buffer.h" +#include "vulkan_helper.h" +#include <memory> + +namespace iris { + +void *Buffer_tt::map() { + if (!mapped_data.has_value()) { + CHECK_VULKAN(vmaMapMemory(allocator, allocation, &mapped_data.value())); + } + return mapped_data.value(); +} + +void Buffer_tt::unmap() { + if (mapped_data.has_value()) { + vmaUnmapMemory(allocator, allocation); + mapped_data.reset(); + } else { + spdlog::warn("Buffer is not mapped, skipping"); + } +} + +void Buffer_tt::release() { + if (handle != VK_NULL_HANDLE) { + spdlog::debug("Destroying buffer: 0x{:x}", (uint64_t)handle); + vkDeviceWaitIdle(device); + vmaDestroyBuffer(allocator, handle, allocation); + handle = VK_NULL_HANDLE; + } +} + +std::shared_ptr<Buffer_tt> Device::create_buffer(BufferDesc desc) { + VkBufferCreateInfo buffer_create_info = { + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + .size = desc.size, + .usage = desc.buffer_usage, + }; + VmaAllocationCreateInfo alloc_create_info = { + .usage = desc.memory_usage, + }; + std::shared_ptr<Buffer_tt> buffer = std::make_shared<Buffer_tt>(); + buffer->device = this->device; + buffer->allocator = this->allocator; + buffer->desc = desc; + CHECK_VULKAN(vmaCreateBuffer( + allocator, + &buffer_create_info, + &alloc_create_info, + &buffer->handle, + &buffer->allocation, + VK_NULL_HANDLE)); + spdlog::debug("Created buffer: 0x{:x}", (uint64_t)buffer->handle); + return buffer; +} + +} // namespace iris
\ No newline at end of file |