chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
4 / 4
100.0%
Branches:
1 / 2
50.0%
Functions:
-
-%

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
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
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