chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
155 / 159
97.5%
Branches:
342 / 449
76.2%
Functions:
43 / 44, 5 excl
97.7%

device/buffer.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <cstddef>
5 #include <cstdint>
6 #include <span>
7 #include <string>
8 #include <utility>
9 #include <vector>
10
11 #include <dlpack/dlpack.h>
12
13 #include "chrono_batch_render/device/device.h"
14 #include "chrono_batch_render/device/resource.h"
15 #include "chrono_batch_render/export.h"
16
17 namespace chrono::batch_render::device {
18
19 class Device;
20
21 enum class Memory : uint8_t {
22 Device,
23 Upload,
24 Readback,
25 Shared,
26 Virtual,
27 };
28
29 enum class BufferUsage : uint32_t {
30 None = 0,
31 Indirect = 1u << 0,
32 AccelBuildInput = 1u << 1,
33 AccelStorage = 1u << 2,
34 Interop = 1u << 3,
35 };
36
37 constexpr BufferUsage operator|(BufferUsage a, BufferUsage b) {
38 return BufferUsage(uint32_t(a) | uint32_t(b));
39 }
40
41 437859 constexpr bool Has(BufferUsage usage, BufferUsage bits) {
42
4/8
✓ Branch 0 taken 889 times.
✓ Branch 1 taken 119094 times.
✓ Branch 2 taken 842 times.
✓ Branch 3 taken 119152 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
317876 return (uint32_t(usage) & uint32_t(bits)) != 0;
43 }
44
45
97/116
<unknown function 41>:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 20 taken 1 time.
✓ Branch 26 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 time.
<unknown function 45>:
✓ Branch 1 taken 17 times.
✓ Branch 2 taken 1091 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 832 times.
✓ Branch 5 taken 3 times.
✓ Branch 5 taken 1433 times.
✓ Branch 5 taken 2274 times.
✓ Branch 6 taken 20 times.
✓ Branch 6 taken 112 times.
✓ Branch 6 taken 1268 times.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 8 taken 649 times.
✗ Branch 9 not taken.
✓ Branch 9 taken 137 times.
✓ Branch 9 taken 4 times.
✓ Branch 9 taken 141 times.
✗ Branch 10 not taken.
✓ Branch 10 taken 947 times.
✓ Branch 10 taken 11 times.
✓ Branch 10 taken 1187 times.
✓ Branch 11 taken 1 time.
✓ Branch 11 taken 6 times.
✓ Branch 11 taken 49 times.
✓ Branch 11 taken 188 times.
✓ Branch 12 taken 1 time.
✓ Branch 12 taken 3 times.
✓ Branch 12 taken 141 times.
✓ Branch 12 taken 613 times.
✗ Branch 13 not taken.
✓ Branch 13 taken 98 times.
✓ Branch 13 taken 386 times.
✓ Branch 13 taken 116 times.
✓ Branch 14 taken 947 times.
✓ Branch 14 taken 4 times.
✓ Branch 14 taken 273 times.
✓ Branch 15 taken 379 times.
✓ Branch 15 taken 12 times.
✓ Branch 16 taken 1 time.
✓ Branch 16 taken 13 times.
✓ Branch 16 taken 11 times.
✓ Branch 16 taken 387 times.
✓ Branch 16 taken 1 time.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 time.
✓ Branch 17 taken 116 times.
✓ Branch 17 taken 273 times.
✓ Branch 17 taken 40 times.
✗ Branch 18 not taken.
✓ Branch 18 taken 273 times.
✓ Branch 18 taken 12 times.
✓ Branch 18 taken 350 times.
✓ Branch 19 taken 33 times.
✓ Branch 21 taken 1 time.
✓ Branch 21 taken 24 times.
✓ Branch 21 taken 6 times.
✓ Branch 21 taken 33 times.
✗ Branch 22 not taken.
✓ Branch 22 taken 273 times.
✓ Branch 22 taken 1 time.
✓ Branch 22 taken 243 times.
✓ Branch 22 taken 1 time.
✓ Branch 23 taken 94 times.
✓ Branch 23 taken 33 times.
✓ Branch 23 taken 528 times.
✓ Branch 23 taken 311 times.
✓ Branch 24 taken 1 time.
✓ Branch 24 taken 1 time.
✓ Branch 24 taken 16 times.
✓ Branch 25 taken 24 times.
✓ Branch 25 taken 33 times.
✗ Branch 26 not taken.
✓ Branch 26 taken 293 times.
✗ Branch 27 not taken.
✓ Branch 27 taken 94 times.
✓ Branch 27 taken 263 times.
✓ Branch 27 taken 478 times.
✓ Branch 29 taken 33 times.
✓ Branch 30 taken 293 times.
✓ Branch 30 taken 1 time.
✗ Branch 30 not taken.
✓ Branch 31 taken 986 times.
✓ Branch 31 taken 94 times.
✓ Branch 31 taken 483 times.
✓ Branch 31 taken 15 times.
✓ Branch 32 taken 1 time.
✓ Branch 32 taken 26 times.
✓ Branch 32 taken 12 times.
✓ Branch 33 taken 33 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 293 times.
✓ Branch 34 taken 1 time.
✗ Branch 34 not taken.
✓ Branch 35 taken 483 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 1 time.
✓ Branch 39 taken 10 times.
✓ Branch 39 taken 34 times.
✓ Branch 40 taken 784 times.
✓ Branch 40 taken 223 times.
✓ Branch 41 taken 3 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 27 times.
✓ Branch 43 taken 34 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 27 times.
✓ Branch 48 taken 4 times.
✓ Branch 71 taken 8 times.
390451 struct BufferDesc {
46 uint64_t bytes = 0;
47 Memory memory = Memory::Device;
48 BufferUsage usage = BufferUsage::None;
49 std::string label = "buffer";
50 };
51
52 constexpr uint64_t kBufferAlignment = 256;
53
54 constexpr uint64_t kWholeBuffer = ~uint64_t(0);
55
56 class BufferRange;
57
58 struct ExternalAddress {
59 DLDevice device{};
60 uint64_t address = 0;
61 };
62
63 class CHRONO_BATCH_RENDER_API Buffer : public Resource {
64 public:
65 virtual ExternalAddress External(DLDeviceType api);
66
67 ~Buffer() override;
68
69 1686891 uint64_t Bytes() const {
70
15/26
<unknown function 41>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 1 taken 3 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
<unknown function 45>:
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 3292 times.
✓ Branch 1 taken 1 time.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 9 times.
✓ Branch 4 taken 4 times.
✓ Branch 4 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 24 times.
✓ Branch 6 taken 40 times.
✓ Branch 7 taken 2 times.
✓ Branch 9 taken 106 times.
✓ Branch 10 taken 26823 times.
✓ Branch 11 taken 18 times.
✓ Branch 12 taken 88 times.
<unknown function 69>:
✗ Branch 0 not taken.
✓ Branch 1 taken 71028 times.
✗ Branch 3 not taken.
1648649 return m_bytes;
71 }
72
73 675183 uint64_t Address() const {
74
79/94
<unknown function 45>:
✓ Branch 0 taken 122 times.
✓ Branch 0 taken 742 times.
✓ Branch 0 taken 12 times.
✓ Branch 0 taken 790 times.
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 585 times.
✓ Branch 1 taken 5051 times.
✓ Branch 1 taken 76 times.
✓ Branch 1 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 1 taken 1387 times.
✓ Branch 1 taken 386 times.
✓ Branch 2 taken 104 times.
✓ Branch 2 taken 735 times.
✓ Branch 2 taken 790 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 3 taken 272 times.
✓ Branch 3 taken 55 times.
✗ Branch 3 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 15 times.
✓ Branch 4 taken 130 times.
✓ Branch 4 taken 99 times.
✓ Branch 4 taken 1205 times.
✓ Branch 4 taken 77 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 790 times.
✓ Branch 5 taken 37860 times.
✓ Branch 5 taken 122 times.
✓ Branch 5 taken 50 times.
✓ Branch 5 taken 18 times.
✓ Branch 5 taken 311 times.
✗ Branch 5 not taken.
✓ Branch 5 taken 46 times.
✓ Branch 6 taken 25 times.
✓ Branch 6 taken 34 times.
✓ Branch 6 taken 112 times.
✓ Branch 6 taken 38 times.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 508 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 27 times.
✓ Branch 7 taken 278 times.
✓ Branch 7 taken 294 times.
✓ Branch 7 taken 282 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 3 times.
✓ Branch 8 taken 59 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 34 times.
✓ Branch 9 taken 1 time.
✓ Branch 9 taken 60 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 11 taken 1 time.
✓ Branch 11 taken 33 times.
✗ Branch 12 not taken.
✓ Branch 12 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 14 taken 230 times.
✓ Branch 14 taken 33 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 228 times.
✓ Branch 17 taken 4 times.
✓ Branch 18 taken 37 times.
✗ Branch 19 not taken.
✓ Branch 19 taken 4 times.
✓ Branch 21 taken 791 times.
✓ Branch 24 taken 784 times.
<unknown function 69>:
✓ Branch 0 taken 381 times.
✓ Branch 1 taken 831 times.
✗ Branch 4 not taken.
<unknown function 73>:
✓ Branch 0 taken 192 times.
✓ Branch 1 taken 1 time.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 90 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 1 time.
✓ Branch 4 taken 17 times.
✓ Branch 5 taken 1 time.
✓ Branch 6 taken 16 times.
✓ Branch 7 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 8 taken 26 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 1 time.
✓ Branch 12 taken 140 times.
✓ Branch 13 taken 4 times.
644721 return m_address;
75 }
76
77 27968 void* Mapped() const {
78
4/7
<unknown function 41>:
✓ Branch 1 taken 3 times.
<unknown function 45>:
✗ Branch 0 not taken.
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 11 times.
25178 return m_mapped;
79 }
80
81 51252 Memory GetMemory() const {
82
6/7
<unknown function 41>:
✓ Branch 0 taken 24662 times.
✓ Branch 1 taken 1928 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 24662 times.
✗ Branch 3 not taken.
<unknown function 45>:
✓ Branch 0 taken 521 times.
✓ Branch 1 taken 535 times.
52311 return m_memory;
83 }
84
85 197882 BufferUsage Usage() const {
86
4/10
✗ Branch 0 not taken.
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 2 taken 889 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 119094 times.
✓ Branch 3 taken 1 time.
119985 return m_usage;
87 }
88
89 479935 bool Virtual() const {
90
3/6
<unknown function 41>:
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
<unknown function 45>:
✗ Branch 0 not taken.
✓ Branch 1 taken 239966 times.
<unknown function 69>:
✗ Branch 0 not taken.
✓ Branch 1 taken 239966 times.
479935 return m_memory == Memory::Virtual;
91 }
92
93 uint64_t PageBytes() const {
94 return m_pageBytes;
95 }
96
97 bool FullyBacked() const;
98
99 BufferRange Slice(uint64_t offset, uint64_t bytes = kWholeBuffer);
100
101 protected:
102 Buffer(Device& device, const BufferDesc& desc);
103
104 uint64_t m_bytes;
105 uint64_t m_address = 0;
106 void* m_mapped = nullptr;
107 uint64_t m_pageBytes = 0;
108
109 private:
110 friend class Device;
111
112 Memory m_memory;
113 BufferUsage m_usage;
114 bool m_counted = false;
115 };
116
117 class BufferRange {
118 public:
119
40/53
<unknown function 45>:
✓ Branch 1 taken 2381 times.
✓ Branch 1 taken 1 time.
✗ Branch 1 not taken.
✓ Branch 1 taken 293 times.
✓ Branch 1 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1555 times.
✓ Branch 3 taken 234 times.
✓ Branch 4 taken 326 times.
✓ Branch 4 taken 177 times.
✓ Branch 4 taken 1 time.
✗ Branch 6 not taken.
✓ Branch 6 taken 94 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 16 times.
✓ Branch 7 taken 25 times.
✓ Branch 7 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 9 taken 94 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 15 times.
✓ Branch 10 taken 29 times.
✓ Branch 12 taken 1 time.
✓ Branch 12 taken 94 times.
✓ Branch 12 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 13 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 15 taken 94 times.
✓ Branch 15 taken 1 time.
✗ Branch 16 not taken.
✓ Branch 16 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 18 taken 153 times.
✗ Branch 19 not taken.
✓ Branch 19 taken 7 times.
✓ Branch 21 taken 1 time.
✓ Branch 21 taken 94 times.
✗ Branch 22 not taken.
✓ Branch 22 taken 6 times.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 time.
✓ Branch 36 taken 1 time.
✓ Branch 39 taken 1 time.
✓ Branch 42 taken 1 time.
✓ Branch 46 taken 2 times.
✓ Branch 49 taken 2 times.
✓ Branch 52 taken 2 times.
<unknown function 69>:
✓ Branch 1 taken 4 times.
485512 BufferRange(Buffer& buffer) : m_buffer(&buffer), m_bytes(buffer.Bytes()) {}
120
121 906127 Buffer& GetBuffer() const {
122
3/8
<unknown function 41>:
✓ Branch 1 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 77897 times.
<unknown function 45>:
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 13 not taken.
876747 return *m_buffer;
123 }
124
125 1098727 uint64_t Offset() const {
126
8/15
<unknown function 41>:
✓ Branch 1 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 4 taken 130 times.
✓ Branch 5 taken 14 times.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 77897 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 341734 times.
✗ Branch 11 not taken.
<unknown function 45>:
✓ Branch 1 taken 205742 times.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ Branch 9 not taken.
1095937 return m_offset;
127 }
128
129 1118409 uint64_t Bytes() const {
130
22/36
<unknown function 41>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 1 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 5 taken 1 time.
✓ Branch 6 taken 210032 times.
✓ Branch 7 taken 131701 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 130 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 26590 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 77897 times.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 341734 times.
✗ Branch 21 not taken.
<unknown function 45>:
✓ Branch 0 taken 6 times.
✓ Branch 0 taken 24169 times.
✓ Branch 0 taken 1 time.
✗ Branch 0 not taken.
✓ Branch 1 taken 1887 times.
✓ Branch 1 taken 2 times.
✓ Branch 1 taken 784 times.
✓ Branch 1 taken 625 times.
✓ Branch 2 taken 205743 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1750 times.
✓ Branch 3 taken 13290 times.
✓ Branch 4 taken 1 time.
✓ Branch 5 taken 1559 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 594 times.
<unknown function 73>:
✗ Branch 1 not taken.
1118409 return m_bytes;
131 }
132
133 19904 uint64_t Address() const {
134
11/15
<unknown function 41>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 1 taken 1 time.
<unknown function 45>:
✓ Branch 0 taken 14 times.
✓ Branch 0 taken 124 times.
✓ Branch 1 taken 538 times.
✓ Branch 1 taken 18 times.
✓ Branch 3 taken 14 times.
✓ Branch 3 taken 54 times.
✓ Branch 4 taken 3 times.
✓ Branch 4 taken 372 times.
✓ Branch 6 taken 54 times.
<unknown function 69>:
✓ Branch 1 taken 685 times.
<unknown function 73>:
✗ Branch 1 not taken.
✗ Branch 4 not taken.
19836 return m_buffer->Address() + m_offset;
135 }
136
137 CHRONO_BATCH_RENDER_API BufferRange Slice(uint64_t offset, uint64_t bytes = kWholeBuffer) const;
138
139 private:
140 friend class Buffer;
141
142 566785 BufferRange(Buffer& buffer, uint64_t offset, uint64_t bytes)
143 566785 : m_buffer(&buffer), m_offset(offset), m_bytes(bytes) {}
144
145 Buffer* m_buffer;
146 uint64_t m_offset = 0;
147 uint64_t m_bytes = 0;
148 };
149
150 14583 template <class T> Ref<Buffer> Device::CreateBuffer(BufferDesc desc, Span<const T> values) {
151
31/31
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::BvhBox>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::BvhBox const>):
✓ Branch 2 taken 379 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::CameraRecord>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::CameraRecord const>):
✓ Branch 2 taken 61 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Capture>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::Capture const>):
✓ Branch 2 taken 166 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::CurvesJob>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::CurvesJob const>):
✓ Branch 2 taken 62 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::DetectorRecord>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::DetectorRecord const>):
✓ Branch 2 taken 61 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Float2>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::Float2 const>):
✓ Branch 2 taken 511 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Float3>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::Float3 const>):
✓ Branch 2 taken 512 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Float4>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::Float4 const>):
✓ Branch 2 taken 18 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::MinimalLightRecord>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::MinimalLightRecord const>):
✓ Branch 2 taken 293 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::MipJob>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::MipJob const>):
✓ Branch 2 taken 104 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::NormalsShape>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::NormalsShape const>):
✓ Branch 2 taken 110 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::OverlayGlyph>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::OverlayGlyph const>):
✓ Branch 2 taken 3 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::PointCloud>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::PointCloud const>):
✓ Branch 2 taken 33 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::PointsJob>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::PointsJob const>):
✓ Branch 2 taken 125 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::RenderTables>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::RenderTables const>):
✓ Branch 2 taken 61 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::SensorPipelineCapture>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::SensorPipelineCapture const>):
✓ Branch 2 taken 62 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::SensorPipelineValue>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::SensorPipelineValue const>):
✓ Branch 2 taken 62 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::SpectralTables>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::SpectralTables const>):
✓ Branch 2 taken 353 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::StableId>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::StableId const>):
✓ Branch 2 taken 285 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::SubsetJob>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::SubsetJob const>):
✓ Branch 2 taken 6 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::SubsetOutput>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::SubsetOutput const>):
✓ Branch 2 taken 6 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::TopologyJob>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::TopologyJob const>):
✓ Branch 2 taken 282 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Uint2>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::Uint2 const>):
✓ Branch 2 taken 478 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::ViewEntry>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<chrono::batch_render::ViewEntry const>):
✓ Branch 2 taken 386 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<double>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<double const>):
✓ Branch 2 taken 1 time.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<float>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<float const>):
✓ Branch 2 taken 1214 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<signed char>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<signed char const>):
✓ Branch 2 taken 3 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned char>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<unsigned char const>):
✓ Branch 2 taken 5 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned int>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<unsigned int const>):
✓ Branch 2 taken 8939 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned long>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<unsigned long const>):
✓ Branch 2 taken 1 time.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned short>(chrono::batch_render::device::BufferDesc, chrono::batch_render::Span<unsigned short const>):
✓ Branch 2 taken 1 time.
29166 return CreateBuffer(std::move(desc), AsBytes(values));
152 }
153
154 5898 template <class T> Ref<Buffer> Device::CreateBuffer(BufferDesc desc, std::span<const T> values) {
155
10/11
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::BvhBox>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::BvhBox const, 18446744073709551615ul>):
✓ Branch 3 taken 379 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::CurvesJob>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::CurvesJob const, 18446744073709551615ul>):
✓ Branch 3 taken 62 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Float3>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::Float3 const, 18446744073709551615ul>):
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 1 time.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::MinimalLightRecord>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::MinimalLightRecord const, 18446744073709551615ul>):
✓ Branch 3 taken 293 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::MipJob>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::MipJob const, 18446744073709551615ul>):
✓ Branch 3 taken 104 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::PointsJob>(chrono::batch_render::device::BufferDesc, std::span<chrono::batch_render::PointsJob const, 18446744073709551615ul>):
✓ Branch 3 taken 125 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<std::byte>(chrono::batch_render::device::BufferDesc, std::span<std::byte const, 18446744073709551615ul>):
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 1216 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned int>(chrono::batch_render::device::BufferDesc, std::span<unsigned int const, 18446744073709551615ul>):
✓ Branch 2 taken 2757 times.
✗ Branch 3 not taken.
11796 return CreateBuffer(std::move(desc), Span<const T>(values));
156 }
157
158 9898 template <class T> Ref<Buffer> Device::CreateBuffer(BufferDesc desc, const std::vector<T>& values) {
159
5/6
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::Float4>(chrono::batch_render::device::BufferDesc, std::vector<chrono::batch_render::Float4, std::allocator<chrono::batch_render::Float4> > const&):
✓ Branch 3 taken 18 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<chrono::batch_render::StableId>(chrono::batch_render::device::BufferDesc, std::vector<chrono::batch_render::StableId, std::allocator<chrono::batch_render::StableId> > const&):
✓ Branch 3 taken 285 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<float>(chrono::batch_render::device::BufferDesc, std::vector<float, std::allocator<float> > const&):
✓ Branch 3 taken 750 times.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<std::byte>(chrono::batch_render::device::BufferDesc, std::vector<std::byte, std::allocator<std::byte> > const&):
✗ Branch 2 not taken.
chrono::batch_render::Ref<chrono::batch_render::device::Buffer> chrono::batch_render::device::Device::CreateBuffer<unsigned int>(chrono::batch_render::device::BufferDesc, std::vector<unsigned int, std::allocator<unsigned int> > const&):
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 580 times.
19796 return CreateBuffer(std::move(desc), Span<const T>(values));
160 }
161
162 }
163