190{
193 return;
194 }
195
196 auto& sources = it->second;
197 auto& resources = target->get_buffer_resources();
198
199 if (sources.size() != resources.back_buffers.size()) {
201 "upload_back_buffers: {} sources configured, {} entries present",
202 sources.size(), resources.back_buffers.size());
203 return;
204 }
205
206 for (size_t i = 0; i < resources.back_buffers.size(); ++i) {
207 const auto& entry = resources.back_buffers[i];
208
209 if (!entry.mapped_ptr) {
211 "upload_back_buffers: entry {} is not host-visible, unsupported", i);
212 continue;
213 }
214
215 auto source_vk = std::dynamic_pointer_cast<VKBuffer>(sources[i]);
216 if (!source_vk) {
218 "upload_back_buffers: source {} is not a VKBuffer", i);
219 continue;
220 }
221
222 auto source_data = source_vk->get_data();
223 if (source_data.empty()) {
225 "upload_back_buffers: source {} has no data to upload", i);
226 continue;
227 }
228
229 Kakshya::DataAccess accessor(source_data[0], {}, source_vk->get_modality());
230 auto [
ptr, bytes, format_hint] = accessor.gpu_buffer();
231 std::memcpy(entry.mapped_ptr,
ptr, bytes);
232 }
233}
#define MF_RT_WARN(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
std::unordered_map< std::shared_ptr< Buffer >, std::vector< std::shared_ptr< Buffer > > > m_back_buffers_source_map
Maps target VKBuffer -> vector of source Buffers for back_buffers.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.