MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ on_after_execute()

void MayaFlux::Buffers::RelaxationStepProcessor::on_after_execute ( Portal::Graphics::CommandBufferID  cmd_id,
const std::shared_ptr< VKBuffer > &  buffer 
)
overrideprotectedvirtual

Swap front/back generation index and, if requested, stage a snapshot download of the buffer just written.

Parameters
cmd_idCommand buffer the completed dispatch was recorded into.
bufferThe attached RelaxationGridBuffer, received as VKBuffer.

Reimplemented from MayaFlux::Buffers::ShaderProcessor.

Definition at line 109 of file RelaxationStepProcessor.cpp.

112{
113 auto grid = std::dynamic_pointer_cast<RelaxationGridBuffer>(buffer);
114 if (!grid) {
115 return;
116 }
117
118 if (!grid->consume_snapshot_request()) {
119 return;
120 }
121
122 auto& resources = grid->get_buffer_resources();
123 const auto& front = resources.back_buffers[grid->front_index()];
124
125 std::vector<uint8_t> bytes(grid->get_state_bytes());
126
127 auto buffer_service = Registry::BackendRegistry::instance()
128 .get_service<Registry::Service::BufferService>();
129
130 if (!m_snapshot_staging || m_snapshot_staging->get_size_bytes() < bytes.size()) {
132 }
133
134 auto handle = buffer_service->copy_buffer_fenced(
135 static_cast<void*>(front.buffer),
136 static_cast<void*>(m_snapshot_staging->get_buffer()),
137 bytes.size(), 0, 0);
138
139 buffer_service->wait_fenced(handle);
140
141 auto& staging_resources = m_snapshot_staging->get_buffer_resources();
142 buffer_service->invalidate_range(staging_resources.memory, 0, bytes.size());
143
144 std::memcpy(bytes.data(), staging_resources.mapped_ptr, bytes.size());
145 buffer_service->release_fenced(handle);
146
147 grid->snapshot_source()->signal(bytes);
148}
std::shared_ptr< VKBuffer > m_snapshot_staging
Lazily-created, reused host-visible staging buffer for snapshot downloads.
Interface * get_service()
Query for a backend service.
static BackendRegistry & instance()
Get the global registry instance.
std::shared_ptr< VKBuffer > create_staging_buffer(size_t size)
Create staging buffer for transfers.

References MayaFlux::Buffers::create_staging_buffer(), MayaFlux::Registry::BackendRegistry::get_service(), MayaFlux::Registry::BackendRegistry::instance(), and m_snapshot_staging.

+ Here is the call graph for this function: