206{
209 return;
210 }
211
212 auto& targets = it->second;
213 auto& resources =
source->get_buffer_resources();
214
215 if (targets.size() != resources.back_buffers.size()) {
217 "download_back_buffers: {} targets configured, {} entries present",
218 targets.size(), resources.back_buffers.size());
219 return;
220 }
221
223
224 for (size_t i = 0; i < resources.back_buffers.size(); ++i) {
225 auto target = std::dynamic_pointer_cast<VKBuffer>(targets[i]);
226 if (!target) {
228 "download_back_buffers: target {} is not a VKBuffer", i);
229 continue;
230 }
231
232 const size_t bytes = target->get_size_bytes();
233 std::vector<uint8_t> raw(bytes);
235
236 target->set_data({ raw });
237 }
238}
#define MF_RT_ERROR(comp, ctx,...)
std::unordered_map< std::shared_ptr< Buffer >, std::shared_ptr< VKBuffer > > m_staging_buffers
Maps source VKBuffer -> staging buffer (for device-local transfers)
std::unordered_map< std::shared_ptr< Buffer >, std::vector< std::shared_ptr< Buffer > > > m_back_buffers_target_map
Maps source VKBuffer -> vector of target Buffers for back_buffers.
void download_back_buffer(const VKBufferResources::GenerationSlot &slot, void *data, size_t size, std::shared_ptr< VKBuffer > &staging)
Download a raw back_buffers slot to host memory.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.