Update descriptor from node context.
235{
236 if (!binding.node) {
238 "Binding has null node");
239 return;
240 }
241
242 Nodes::NodeContext& ctx = binding.node->get_last_context();
243
244 switch (binding.binding_type) {
246 auto value = static_cast<float>(binding.node->get_last_output());
248
249 upload_to_gpu(&value,
sizeof(
float), binding.gpu_buffer,
nullptr);
250 break;
251 }
252
254 auto* gpu_vec = dynamic_cast<Nodes::GpuVectorData*>(&ctx);
255 if (!gpu_vec || !gpu_vec->has_gpu_data()) {
257 "Node context does not provide GpuVectorData");
258 return;
259 }
260
261 auto data = gpu_vec->gpu_data();
262
264 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
265 break;
266 }
267
269 auto* gpu_mat = dynamic_cast<Nodes::GpuMatrixData*>(&ctx);
270 if (!gpu_mat || !gpu_mat->has_gpu_data()) {
272 "Node context does not provide GpuMatrixData");
273 return;
274 }
275
276 auto data = gpu_mat->gpu_data();
278 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
279 break;
280 }
281
283 auto* gpu_struct = dynamic_cast<Nodes::GpuStructuredData*>(&ctx);
284 if (!gpu_struct || !gpu_struct->has_gpu_data()) {
286 "Node context does not provide GpuStructuredData");
287 return;
288 }
289
290 auto data = gpu_struct->gpu_data();
292 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
293 break;
294 }
295 }
296}
#define MF_RT_ERROR(comp, ctx,...)
void ensure_buffer_capacity(DescriptorBinding &binding, size_t required_size)
Ensure descriptor buffer has sufficient capacity.
@ MATRIX
2D grid from MatrixContext
@ VECTOR
Array from VectorContext.
@ SCALAR
Single value from node output.
@ STRUCTURED
Array of structs from StructuredContext.
void upload_to_gpu(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging)
Upload raw data to GPU buffer (auto-detects host-visible vs device-local)
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.