chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
24 / 24
100.0%
Branches:
81 / 107
75.7%
Functions:
2 / 2, 4 excl
100.0%

stage/views/view_state.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <cstdint>
5 #include <map>
6 #include <span>
7 #include <string>
8 #include <tuple>
9 #include <vector>
10
11 #include "chrono_batch_render/device/buffer.h"
12 #include "chrono_batch_render/device/ref.h"
13 #include "chrono_batch_render/stage/schema/primvars.h"
14 #include "chrono_batch_render/stage/schema/schema.h"
15 #include "chrono_batch_render/stage/structure/structure.h"
16
17 namespace chrono::batch_render {
18
19 struct ViewBlock {
20 uint32_t first = 0;
21 uint32_t firstRow = 0;
22 uint32_t count = 0;
23 };
24
25 59147 struct ViewRows {
26 uint64_t epoch = ~uint64_t(0);
27 std::vector<uint32_t> rows;
28 std::vector<ViewBlock> blocks;
29 std::vector<uint32_t> worlds;
30 uint32_t live = 0;
31 Ref<device::Buffer> device;
32
33 48259 bool Dense() const {
34
4/4
✓ Branch 0 taken 48133 times.
✓ Branch 1 taken 126 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 48130 times.
48259 return blocks.size() == 1 && live == rows.size();
35 }
36 };
37
38 struct RowSource {
39 uint64_t rows = 0;
40 uint32_t firstRow = 0;
41 };
42
43 11 struct PrimvarLayout {
44 std::vector<ArrayRef> tables;
45 PrimvarEntry entry{};
46 };
47
48 class ViewState {
49 public:
50 ViewState(Structure& structure, SchemaId schema, std::vector<uint32_t> prims,
51 uint32_t instance = kNoInstance);
52
53 static constexpr uint32_t kNoInstance = 0xFFFFFFFF;
54
55 2 uint32_t Instance() const {
56 2 return m_instance;
57 }
58
59 85784 Structure& GetStructure() const {
60
12/16
<unknown function 59>:
✗ Branch 0 not taken.
✓ Branch 1 taken 238 times.
chrono::batch_render::ViewRows::Dense() const:
✓ Branch 0 taken 82342 times.
✓ Branch 1 taken 114 times.
✓ Branch 5 taken 14 times.
✓ Branch 8 taken 14 times.
✓ Branch 11 taken 1036 times.
✓ Branch 14 taken 529 times.
✓ Branch 17 taken 416 times.
✓ Branch 20 taken 299 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 732 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 22 times.
✗ Branch 32 not taken.
✓ Branch 35 taken 22 times.
85782 return m_structure;
61 }
62
63 930048 ColumnStore& GetColumnStore() const {
64
49/66
<unknown function 63>:
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 15 times.
✓ Branch 3 taken 32 times.
chrono::batch_render::ViewRows::Dense() const:
✓ Branch 0 taken 84665 times.
✓ Branch 1 taken 27 times.
✓ Branch 2 taken 82268 times.
✓ Branch 3 taken 18 times.
✓ Branch 4 taken 82460 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1266 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 530 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 417 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 300 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 3959 times.
✓ Branch 17 taken 15 times.
✓ Branch 18 taken 715 times.
✓ Branch 19 taken 23 times.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 7 times.
✗ Branch 22 not taken.
✓ Branch 22 taken 12517 times.
✓ Branch 23 taken 249 times.
✓ Branch 24 taken 7 times.
✓ Branch 24 taken 12575 times.
✓ Branch 25 taken 141 times.
✓ Branch 26 taken 1 time.
✓ Branch 26 taken 2 times.
✓ Branch 27 taken 6 times.
✓ Branch 28 taken 1 time.
✗ Branch 28 not taken.
✓ Branch 29 taken 5 times.
✗ Branch 30 not taken.
✓ Branch 30 taken 2 times.
✓ Branch 31 taken 115 times.
✗ Branch 32 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 5 times.
✓ Branch 34 taken 3 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 36 taken 9 times.
✓ Branch 37 taken 17 times.
✗ Branch 38 not taken.
✓ Branch 38 taken 1 time.
✓ Branch 39 taken 5 times.
✓ Branch 40 taken 7 times.
✓ Branch 40 taken 2 times.
✓ Branch 41 taken 1 time.
✓ Branch 42 taken 62 times.
✓ Branch 43 taken 8 times.
✓ Branch 44 taken 42001 times.
✓ Branch 45 taken 50 times.
✓ Branch 46 taken 42079 times.
✓ Branch 47 taken 107 times.
✓ Branch 48 taken 12575 times.
✓ Branch 49 taken 151 times.
✓ Branch 50 taken 130988 times.
✓ Branch 51 taken 509 times.
511057 return m_structure.GetColumnStore();
65 }
66
67 440047 SchemaId Schema() const {
68
5/8
✓ Branch 0 taken 185709 times.
✓ Branch 1 taken 68624 times.
✓ Branch 3 taken 185709 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 3 times.
✓ Branch 8 taken 2 times.
336680 return m_schema;
69 }
70
71 131517 uint32_t Size() const {
72
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
131517 return uint32_t(m_prims.size());
73 }
74
75 83853 std::span<const uint32_t> Prims() const {
76
8/10
<unknown function 75>:
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 228 times.
chrono::batch_render::ViewRows::Dense() const:
✓ Branch 1 taken 299 times.
✓ Branch 1 taken 6 times.
✓ Branch 4 taken 732 times.
✓ Branch 4 taken 2 times.
83853 return m_prims;
77 }
78
79 bool Live(uint32_t index) const;
80 const ViewRows& Rows(SchemaId table);
81 const Ref<device::Buffer>& DeviceRows(SchemaId table);
82 RowSource Source(SchemaId table);
83
84 const Ref<device::Buffer>& XformParents();
85
86 13 PrimvarLayout& Layout(ColumnRef column, std::string_view name) {
87
1/1
✓ Branch 2 taken 13 times.
26 return m_primvarLayouts[{column.schema, column.index, std::string(name)}];
88 }
89
90 private:
91 Structure& m_structure;
92 SchemaId m_schema;
93 uint32_t m_instance;
94 std::vector<uint32_t> m_prims;
95 std::vector<uint32_t> m_generations;
96 std::map<SchemaId, ViewRows> m_rows;
97 Ref<device::Buffer> m_xformParents;
98 uint64_t m_xformParentsEpoch = ~uint64_t(0);
99 std::map<std::tuple<SchemaId, uint32_t, std::string>, PrimvarLayout> m_primvarLayouts;
100 };
101
102 }
103