|
|
@ -71,7 +71,7 @@ public:
|
|
|
|
.end = *alloc + size,
|
|
|
|
.end = *alloc + size,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
commits.insert(std::ranges::upper_bound(commits, *alloc, {}, &Range::begin), range);
|
|
|
|
commits.insert(std::ranges::upper_bound(commits, *alloc, {}, &Range::begin), range);
|
|
|
|
return std::make_optional<MemoryCommit>(device, this, *memory, *alloc, *alloc + size);
|
|
|
|
return std::make_optional<MemoryCommit>(this, *memory, *alloc, *alloc + size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Free(u64 begin) {
|
|
|
|
void Free(u64 begin) {
|
|
|
@ -127,9 +127,9 @@ private:
|
|
|
|
std::span<u8> memory_mapped_span; ///< Memory mapped span. Empty if not queried before.
|
|
|
|
std::span<u8> memory_mapped_span; ///< Memory mapped span. Empty if not queried before.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
MemoryCommit::MemoryCommit(const Device& device_, MemoryAllocation* allocation_,
|
|
|
|
MemoryCommit::MemoryCommit(MemoryAllocation* allocation_, VkDeviceMemory memory_, u64 begin_,
|
|
|
|
VkDeviceMemory memory_, u64 begin, u64 end) noexcept
|
|
|
|
u64 end_) noexcept
|
|
|
|
: device{&device_}, allocation{allocation_}, memory{memory_}, interval{begin, end} {}
|
|
|
|
: allocation{allocation_}, memory{memory_}, begin{begin_}, end{end_} {}
|
|
|
|
|
|
|
|
|
|
|
|
MemoryCommit::~MemoryCommit() {
|
|
|
|
MemoryCommit::~MemoryCommit() {
|
|
|
|
Release();
|
|
|
|
Release();
|
|
|
@ -137,28 +137,28 @@ MemoryCommit::~MemoryCommit() {
|
|
|
|
|
|
|
|
|
|
|
|
MemoryCommit& MemoryCommit::operator=(MemoryCommit&& rhs) noexcept {
|
|
|
|
MemoryCommit& MemoryCommit::operator=(MemoryCommit&& rhs) noexcept {
|
|
|
|
Release();
|
|
|
|
Release();
|
|
|
|
device = rhs.device;
|
|
|
|
|
|
|
|
allocation = std::exchange(rhs.allocation, nullptr);
|
|
|
|
allocation = std::exchange(rhs.allocation, nullptr);
|
|
|
|
memory = rhs.memory;
|
|
|
|
memory = rhs.memory;
|
|
|
|
interval = rhs.interval;
|
|
|
|
begin = rhs.begin;
|
|
|
|
|
|
|
|
end = rhs.end;
|
|
|
|
span = std::exchange(rhs.span, std::span<u8>{});
|
|
|
|
span = std::exchange(rhs.span, std::span<u8>{});
|
|
|
|
return *this;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MemoryCommit::MemoryCommit(MemoryCommit&& rhs) noexcept
|
|
|
|
MemoryCommit::MemoryCommit(MemoryCommit&& rhs) noexcept
|
|
|
|
: device{rhs.device}, allocation{std::exchange(rhs.allocation, nullptr)}, memory{rhs.memory},
|
|
|
|
: allocation{std::exchange(rhs.allocation, nullptr)}, memory{rhs.memory}, begin{rhs.begin},
|
|
|
|
interval{rhs.interval}, span{std::exchange(rhs.span, std::span<u8>{})} {}
|
|
|
|
end{rhs.end}, span{std::exchange(rhs.span, std::span<u8>{})} {}
|
|
|
|
|
|
|
|
|
|
|
|
std::span<u8> MemoryCommit::Map() {
|
|
|
|
std::span<u8> MemoryCommit::Map() {
|
|
|
|
if (span.empty()) {
|
|
|
|
if (span.empty()) {
|
|
|
|
span = allocation->Map().subspan(interval.first, interval.second - interval.first);
|
|
|
|
span = allocation->Map().subspan(begin, end - begin);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return span;
|
|
|
|
return span;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MemoryCommit::Release() {
|
|
|
|
void MemoryCommit::Release() {
|
|
|
|
if (allocation) {
|
|
|
|
if (allocation) {
|
|
|
|
allocation->Free(interval.first);
|
|
|
|
allocation->Free(begin);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|