You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.8 KiB
88 lines
1.8 KiB
// Copyright 2022 Simon Boyé
|
|
#pragma once
|
|
|
|
#include <vk/forward.h>
|
|
#include <vk/Memory.h>
|
|
|
|
#include <core/utils.h>
|
|
|
|
#include <vulkan/vulkan.h>
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
|
|
namespace vk {
|
|
|
|
|
|
class Buffer {
|
|
public:
|
|
Buffer() noexcept;
|
|
Buffer(
|
|
Context& context,
|
|
VkDeviceSize size,
|
|
VkBufferUsageFlags usage
|
|
);
|
|
Buffer(
|
|
Context& context,
|
|
VkDeviceSize size,
|
|
VkBufferUsageFlags usage,
|
|
VkMemoryPropertyFlags memory_properties
|
|
);
|
|
Buffer(const Buffer&) = delete;
|
|
Buffer(Buffer&& other) noexcept;
|
|
~Buffer() noexcept;
|
|
|
|
Buffer& operator=(const Buffer&) = delete;
|
|
Buffer& operator=(Buffer&& other) noexcept;
|
|
|
|
inline explicit operator bool() const {
|
|
return is_valid();
|
|
}
|
|
|
|
inline bool is_valid() const {
|
|
return m_buffer != VK_NULL_HANDLE;
|
|
}
|
|
|
|
inline Context* context() noexcept {
|
|
return m_context;
|
|
}
|
|
|
|
inline const Context* context() const noexcept {
|
|
return m_context;
|
|
}
|
|
|
|
inline operator VkBuffer() const noexcept {
|
|
return m_buffer;
|
|
}
|
|
|
|
inline VkBuffer buffer() const noexcept {
|
|
return m_buffer;
|
|
}
|
|
|
|
inline const MemoryBlock& memory() const noexcept {
|
|
return m_memory;
|
|
}
|
|
|
|
inline MemoryBlock& memory() noexcept {
|
|
return m_memory;
|
|
}
|
|
|
|
VkMemoryRequirements memory_requirements() const noexcept;
|
|
|
|
void bind_memory(const MemoryBlock& memory_block, VkDeviceSize offset=0);
|
|
void bind_memory(MemoryBlock&& memory_block);
|
|
void allocate_and_bind_memory(VkMemoryPropertyFlags memory_properties);
|
|
|
|
void upload(size_t size, void* src_buffer, uint32_t dst_queue_family);
|
|
|
|
void destroy() noexcept;
|
|
|
|
private:
|
|
Context* m_context = nullptr;
|
|
VkBuffer m_buffer = VK_NULL_HANDLE;
|
|
MemoryBlock m_memory;
|
|
};
|
|
|
|
|
|
}
|
|
|