Update descriptor from node context.
208{
209 if (!binding.node) {
211 "Binding has null node");
212 return;
213 }
214
215 Nodes::NodeContext& ctx = binding.node->get_last_context();
216
217 switch (binding.binding_type) {
219 auto value = static_cast<float>(binding.node->get_last_output());
221
222 upload_to_gpu(&value,
sizeof(
float), binding.gpu_buffer,
nullptr);
223 break;
224 }
225
227 auto* gpu_vec = dynamic_cast<Nodes::GpuVectorData*>(&ctx);
228 if (!gpu_vec || !gpu_vec->has_gpu_data()) {
230 "Node context does not provide GpuVectorData");
231 return;
232 }
233
234 auto data = gpu_vec->gpu_data();
235
237 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
238 break;
239 }
240
242 auto* gpu_mat = dynamic_cast<Nodes::GpuMatrixData*>(&ctx);
243 if (!gpu_mat || !gpu_mat->has_gpu_data()) {
245 "Node context does not provide GpuMatrixData");
246 return;
247 }
248
249 auto data = gpu_mat->gpu_data();
251 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
252 break;
253 }
254
256 auto* gpu_struct = dynamic_cast<Nodes::GpuStructuredData*>(&ctx);
257 if (!gpu_struct || !gpu_struct->has_gpu_data()) {
259 "Node context does not provide GpuStructuredData");
260 return;
261 }
262
263 auto data = gpu_struct->gpu_data();
265 upload_to_gpu(data.data(), data.size_bytes(), binding.gpu_buffer,
nullptr);
266 break;
267 }
268 }
269}
#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.