37 static std::shared_ptr<HostBuffer>
Create(
38 const std::shared_ptr<Allocator>&
allocator,
39 const std::shared_ptr<const IdleWaiter>& idle_waiter,
40 size_t minimum_uniform_alignment,
41 std::shared_ptr<const GpuSubmissionTracker> submission_tracker =
nullptr);
55 template <
class UniformType,
56 class = std::enable_if_t<std::is_standard_layout_v<UniformType>>>
58 const auto alignment =
60 return Emplace(
reinterpret_cast<const void*
>(&uniform),
77 class StorageBufferType,
78 class = std::enable_if_t<std::is_standard_layout_v<StorageBufferType>>>
80 const StorageBufferType& buffer) {
81 const auto alignment =
84 sizeof(StorageBufferType),
100 template <
class BufferType,
101 class = std::enable_if_t<std::is_standard_layout_v<BufferType>>>
103 size_t alignment = 0) {
104 return Emplace(
reinterpret_cast<const void*
>(&buffer),
106 std::max(alignment,
alignof(BufferType))
149 [[nodiscard]] std::tuple<Range, std::shared_ptr<DeviceBuffer>,
DeviceBuffer*>
150 EmplaceInternal(
const void* buffer,
size_t length);
152 std::tuple<Range, std::shared_ptr<DeviceBuffer>,
DeviceBuffer*>
155 std::tuple<Range, std::shared_ptr<DeviceBuffer>,
DeviceBuffer*>
156 EmplaceInternal(
const void* buffer,
size_t length,
size_t align);
158 size_t GetLength()
const {
return offset_; }
164 [[nodiscard]]
bool MaybeCreateNewBuffer();
166 const std::shared_ptr<DeviceBuffer>& GetCurrentBuffer()
const;
171 const std::shared_ptr<Allocator>&
allocator,
172 const std::shared_ptr<const IdleWaiter>& idle_waiter,
173 size_t minimum_uniform_alignment,
174 std::shared_ptr<const GpuSubmissionTracker> submission_tracker);
180 std::shared_ptr<Allocator> allocator_;
181 std::shared_ptr<const IdleWaiter> idle_waiter_;
182 std::shared_ptr<const GpuSubmissionTracker> submission_tracker_;
187 std::array<uint64_t, kHostBufferArenaSize> entry_stamps_ = {};
190 std::vector<std::pair<uint64_t, std::vector<std::shared_ptr<DeviceBuffer>>>>
192 size_t current_buffer_ = 0u;
194 size_t frame_index_ = 0u;
195 size_t minimum_uniform_alignment_ = 0u;
static std::shared_ptr< HostBuffer > Create(const std::shared_ptr< Allocator > &allocator, const std::shared_ptr< const IdleWaiter > &idle_waiter, size_t minimum_uniform_alignment, std::shared_ptr< const GpuSubmissionTracker > submission_tracker=nullptr)