载入中...
搜索中...
未找到
FrameArena.h
浏览该文件的文档.
1#pragma once
2
3#include "vkbuilder.hpp"
4
5#include <vector>
6
7namespace eve::graphics::vulkan {
8
19public:
21
22 FrameArena(const FrameArena &) = delete;
23 FrameArena &operator=(const FrameArena &) = delete;
24 FrameArena() = default;
25 FrameArena(FrameArena &&o) noexcept { *this = std::move(o); }
26 FrameArena &operator=(FrameArena &&o) noexcept;
27
28 struct Alloc {
29 vk::DeviceSize offset = 0;
30 vk::DeviceSize size = 0;
31 void *mapped = nullptr;
32 };
33
35 bool ensure(vkb::Device &device, vk::DeviceSize bytes, vk::BufferUsageFlags usage);
36
38 Alloc alloc(vk::DeviceSize bytes, vk::DeviceSize align = 16);
39
40 void reset();
41
42 vk::Buffer buffer() const;
43 vk::DeviceSize capacity() const { return capacity_; }
44 vk::DeviceSize used() const { return head_; }
45
46private:
47 vkb::GenericBuffer buf_;
48 vkb::Device device_;
49 vk::DeviceSize capacity_ = 0;
50 vk::DeviceSize head_ = 0;
51 void *mapped_ = nullptr;
52};
53
54} // namespace eve::graphics::vulkan
vkb::Device & device
Per-frame GPU allocation arena (host-visible coherent).
Definition FrameArena.h:18
bool ensure(vkb::Device &device, vk::DeviceSize bytes, vk::BufferUsageFlags usage)
Allocate or grow (before any recording) so bytes fit.
vk::DeviceSize used() const
Definition FrameArena.h:44
FrameArena(const FrameArena &)=delete
Alloc alloc(vk::DeviceSize bytes, vk::DeviceSize align=16)
Allocate bytes (aligned). Returns empty Alloc on capacity overflow.
vk::DeviceSize capacity() const
Definition FrameArena.h:43
FrameArena(FrameArena &&o) noexcept
Definition FrameArena.h:25
FrameArena & operator=(const FrameArena &)=delete