sensor_pipeline/definition.h
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // SPDX-License-Identifier: BSD-3-Clause | ||
| 2 | #pragma once | ||
| 3 | |||
| 4 | #include <cstdint> | ||
| 5 | #include <span> | ||
| 6 | #include <string> | ||
| 7 | #include <string_view> | ||
| 8 | #include <vector> | ||
| 9 | |||
| 10 | #include "chrono_batch_render/graph/library.h" | ||
| 11 | #include "chrono_batch_render/sensor_pipeline/resolve.h" | ||
| 12 | |||
| 13 | namespace chrono::batch_render::sensor_pipeline { | ||
| 14 | |||
| 15 | inline constexpr int32_t kBeforeSegments = -1; | ||
| 16 | inline constexpr uint64_t kNotStored = ~uint64_t(0); | ||
| 17 | inline constexpr uint64_t kArenaAlignment = 256; | ||
| 18 | |||
| 19 | 376 | struct Segment { | |
| 20 | NodeKind kind = NodeKind::Point; | ||
| 21 | std::vector<uint32_t> nodes; | ||
| 22 | }; | ||
| 23 | |||
| 24 | struct StoredValue { | ||
| 25 | uint32_t value = kNoValue; | ||
| 26 | int32_t first = kBeforeSegments; | ||
| 27 | int32_t last = 0; | ||
| 28 | }; | ||
| 29 | |||
| 30 | 85 | struct SegmentPlan { | |
| 31 | std::vector<Segment> segments; | ||
| 32 | std::vector<StoredValue> stored; | ||
| 33 | }; | ||
| 34 | |||
| 35 | 114 | struct ArenaLayout { | |
| 36 | std::vector<uint64_t> offsets; | ||
| 37 | uint64_t bytes = 0; | ||
| 38 | }; | ||
| 39 | |||
| 40 | enum class Fusion : uint8_t { | ||
| 41 | Fused, | ||
| 42 | PerNode, | ||
| 43 | }; | ||
| 44 | |||
| 45 | SegmentPlan SplitSegments(const ResolvedSensorPipeline& pipeline, const NodeRegistry& registry, | ||
| 46 | Fusion fusion = Fusion::Fused); | ||
| 47 | |||
| 48 | ArenaLayout LayoutArena(const SegmentPlan& plan, std::span<const SignalLayout> layouts, | ||
| 49 | uint64_t elements); | ||
| 50 | |||
| 51 | struct SensorPipelineDefinition { | ||
| 52 | uint32_t id = 0; | ||
| 53 | ResolvedSensorPipeline pipeline; | ||
| 54 | SegmentPlan segments; | ||
| 55 | std::vector<uint32_t> parameterOffsets; | ||
| 56 | uint32_t parameterWords = 0; | ||
| 57 | std::vector<uint32_t> stateOffsets; | ||
| 58 | std::vector<float> initialState; | ||
| 59 | }; | ||
| 60 | |||
| 61 | using SensorPipelineLibrary = graph::DefinitionLibrary<SensorPipelineDefinition>; | ||
| 62 | using SensorPipelineSet = graph::DefinitionSet<SensorPipelineDefinition>; | ||
| 63 | |||
| 64 | SensorPipelineDefinition BuildDefinition(uint32_t id, const ResolvedSensorPipeline& pipeline, | ||
| 65 | const NodeRegistry& registry, | ||
| 66 | Fusion fusion = Fusion::Fused); | ||
| 67 | |||
| 68 | std::vector<uint32_t> PackWords(const SensorPipelineDefinition& definition, | ||
| 69 | const ResolvedSensorPipeline& instance, | ||
| 70 | const NodeRegistry& registry); | ||
| 71 | |||
| 72 | std::string ReadParameter(const ParameterDef& parameter, std::string_view context, uint32_t word); | ||
| 73 | |||
| 74 | } | ||
| 75 |