281{
283 auto& resources = buffer_wrapper->get_buffer_resources();
284 auto dirty_ranges = buffer_wrapper->get_and_clear_dirty_ranges();
285 if (!dirty_ranges.empty()) {
286 for (
auto [offset,
size] : dirty_ranges) {
287 vk::MappedMemoryRange
range;
288 range.memory = resources.memory;
289 range.offset = offset;
291 if (
auto result =
m_context.
get_device().flushMappedMemoryRanges(1, &range); result != vk::Result::eSuccess) {
293 "Failed to flush mapped memory range: {}", vk::to_string(result));
294 }
295 }
297 "Flushed {} dirty ranges for buffer {:p}", dirty_ranges.size(),
298 (void*)buffer_wrapper->get_buffer());
299 }
300
301 auto invalid_ranges = buffer_wrapper->get_and_clear_invalid_ranges();
302 if (!invalid_ranges.empty()) {
303 for (
auto [offset,
size] : invalid_ranges) {
304 vk::MappedMemoryRange
range;
305 range.memory = buffer_wrapper->get_buffer_resources().memory;
306 range.offset = offset;
308 if (
auto result =
m_context.
get_device().invalidateMappedMemoryRanges(1, &range); result != vk::Result::eSuccess) {
310 "Failed to invalidate mapped memory range: {}", vk::to_string(result));
311 }
312 }
314 "Invalidated {} ranges for buffer {:p}", invalid_ranges.size(),
315 (void*)buffer_wrapper->get_buffer());
316 }
317 }
318}
#define MF_ERROR(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::vector< std::shared_ptr< Buffers::VKBuffer > > m_managed_buffers
vk::Device get_device() const
Get logical device.
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.
std::vector< double > range(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Value range (max - min) per window.