Pulp
1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
device_capability.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <compare>
4
#include <cstddef>
5
#include <cstdint>
6
24
namespace
pulp::platform
{
25
26
// ── Capability tier ────────────────────────────────────────────────────────
27
43
enum class
DeviceCapabilityTier
: std::uint8_t {
44
Constrained
= 0,
45
Standard
= 1,
46
Full
= 2,
47
};
48
49
inline
constexpr
std::size_t
kDeviceCapabilityTierCount
= 3;
50
51
// ── Thermal ladder ─────────────────────────────────────────────────────────
52
64
enum class
ThermalState
: std::uint8_t {
65
Nominal
= 0,
66
Fair
= 1,
67
Serious
= 2,
68
Critical
= 3,
69
};
70
71
inline
constexpr
std::size_t
kThermalStateCount
= 4;
72
73
// ── Observable inputs ──────────────────────────────────────────────────────
74
76
enum class
PointerPrecision
: std::uint8_t {
78
Coarse
= 0,
80
Fine
= 1,
81
};
82
88
struct
DeviceCapabilityInputs
{
92
std::uint64_t
usable_memory_bytes
= 0;
93
95
std::uint32_t
usable_core_count
= 0;
96
100
bool
thermal_reporting_available
=
false
;
101
110
bool
realtime_render_available
=
false
;
111
113
PointerPrecision
pointer_precision
=
PointerPrecision::Coarse
;
114
116
bool
precision_keyboard_available
=
false
;
117
118
constexpr
auto
operator<=>
(
const
DeviceCapabilityInputs
&)
const
=
default
;
119
};
120
121
// ── Tier projection ────────────────────────────────────────────────────────
122
124
inline
constexpr
std::uint64_t
kStandardTierMemoryBytes
= 3ull * 1024 * 1024 * 1024;
126
inline
constexpr
std::uint64_t
kFullTierMemoryBytes
= 8ull * 1024 * 1024 * 1024;
128
inline
constexpr
std::uint32_t
kStandardTierCoreCount
= 4;
130
inline
constexpr
std::uint32_t
kFullTierCoreCount
= 8;
131
132
namespace
detail
{
133
135
[[nodiscard]]
constexpr
DeviceCapabilityTier
136
min_tier
(
DeviceCapabilityTier
left,
DeviceCapabilityTier
right) {
137
return
left < right ? left : right;
138
}
139
140
}
// namespace detail
141
149
[[nodiscard]]
constexpr
DeviceCapabilityTier
150
project_device_capability_tier
(
DeviceCapabilityInputs
inputs) {
151
const
DeviceCapabilityTier
by_memory =
152
inputs.usable_memory_bytes >=
kFullTierMemoryBytes
?
DeviceCapabilityTier::Full
153
: inputs.usable_memory_bytes >=
kStandardTierMemoryBytes
?
DeviceCapabilityTier::Standard
154
:
DeviceCapabilityTier::Constrained
;
155
156
const
DeviceCapabilityTier
by_cores =
157
inputs.usable_core_count >=
kFullTierCoreCount
?
DeviceCapabilityTier::Full
158
: inputs.usable_core_count >=
kStandardTierCoreCount
?
DeviceCapabilityTier::Standard
159
:
DeviceCapabilityTier::Constrained
;
160
161
// No realtime render path caps the device at the review-and-perform rung,
162
// whatever its memory and cores: the rungs above it are defined by being
163
// able to render locally.
164
const
DeviceCapabilityTier
by_realtime = inputs.realtime_render_available
165
?
DeviceCapabilityTier::Full
166
:
DeviceCapabilityTier::Constrained
;
167
168
// Full-tier quotas assume the system will report heat so the consumer can
169
// step down. Without that signal the top rung is not grantable.
170
const
DeviceCapabilityTier
by_thermal_reporting = inputs.thermal_reporting_available
171
?
DeviceCapabilityTier::Full
172
:
DeviceCapabilityTier::Standard
;
173
174
// The top rung is precision authoring, which presumes a precise pointer
175
// and modifier keys. Neither bars authoring outright, so each caps at
176
// Standard rather than Constrained.
177
const
DeviceCapabilityTier
by_pointer = inputs.pointer_precision ==
PointerPrecision::Fine
178
?
DeviceCapabilityTier::Full
179
:
DeviceCapabilityTier::Standard
;
180
const
DeviceCapabilityTier
by_keyboard = inputs.precision_keyboard_available
181
?
DeviceCapabilityTier::Full
182
:
DeviceCapabilityTier::Standard
;
183
184
DeviceCapabilityTier
tier = by_memory;
185
tier =
detail::min_tier
(tier, by_cores);
186
tier =
detail::min_tier
(tier, by_realtime);
187
tier =
detail::min_tier
(tier, by_thermal_reporting);
188
tier =
detail::min_tier
(tier, by_pointer);
189
tier =
detail::min_tier
(tier, by_keyboard);
190
return
tier;
191
}
192
193
}
// namespace pulp::platform
pulp::platform::detail
Definition
device_capability.hpp:132
pulp::platform::detail::min_tier
constexpr DeviceCapabilityTier min_tier(DeviceCapabilityTier left, DeviceCapabilityTier right)
Returns the lower of two tiers.
Definition
device_capability.hpp:136
pulp::platform
Device capability vocabulary: one tier ladder, one thermal ladder, and the projection from observed i...
Definition
child_process.hpp:15
pulp::platform::kStandardTierCoreCount
constexpr std::uint32_t kStandardTierCoreCount
Core-count floor for DeviceCapabilityTier::Standard.
Definition
device_capability.hpp:128
pulp::platform::PointerPrecision
PointerPrecision
Precision of the device's primary pointing device.
Definition
device_capability.hpp:76
pulp::platform::PointerPrecision::Coarse
@ Coarse
Touch or another pointer whose contact area exceeds a small target.
Definition
device_capability.hpp:78
pulp::platform::PointerPrecision::Fine
@ Fine
Mouse, trackpad, or stylus with sub-target precision.
Definition
device_capability.hpp:80
pulp::platform::kFullTierMemoryBytes
constexpr std::uint64_t kFullTierMemoryBytes
Memory floor for DeviceCapabilityTier::Full.
Definition
device_capability.hpp:126
pulp::platform::kDeviceCapabilityTierCount
constexpr std::size_t kDeviceCapabilityTierCount
Definition
device_capability.hpp:49
pulp::platform::kFullTierCoreCount
constexpr std::uint32_t kFullTierCoreCount
Core-count floor for DeviceCapabilityTier::Full.
Definition
device_capability.hpp:130
pulp::platform::kStandardTierMemoryBytes
constexpr std::uint64_t kStandardTierMemoryBytes
Memory floor for DeviceCapabilityTier::Standard.
Definition
device_capability.hpp:124
pulp::platform::DeviceCapabilityTier
DeviceCapabilityTier
How much of the product a device can carry, on one ascending ladder.
Definition
device_capability.hpp:43
pulp::platform::DeviceCapabilityTier::Full
@ Full
Definition
device_capability.hpp:46
pulp::platform::DeviceCapabilityTier::Constrained
@ Constrained
Definition
device_capability.hpp:44
pulp::platform::DeviceCapabilityTier::Standard
@ Standard
Definition
device_capability.hpp:45
pulp::platform::project_device_capability_tier
constexpr DeviceCapabilityTier project_device_capability_tier(DeviceCapabilityInputs inputs)
Projects observed capabilities onto the tier ladder.
Definition
device_capability.hpp:150
pulp::platform::ThermalState
ThermalState
Live thermal pressure, ascending in heat.
Definition
device_capability.hpp:64
pulp::platform::ThermalState::Critical
@ Critical
Definition
device_capability.hpp:68
pulp::platform::ThermalState::Serious
@ Serious
Definition
device_capability.hpp:67
pulp::platform::ThermalState::Nominal
@ Nominal
Definition
device_capability.hpp:65
pulp::platform::ThermalState::Fair
@ Fair
Definition
device_capability.hpp:66
pulp::platform::kThermalStateCount
constexpr std::size_t kThermalStateCount
Definition
device_capability.hpp:71
pulp::platform::DeviceCapabilityInputs
What a shell observed about the device it is running on.
Definition
device_capability.hpp:88
pulp::platform::DeviceCapabilityInputs::operator<=>
constexpr auto operator<=>(const DeviceCapabilityInputs &) const =default
pulp::platform::DeviceCapabilityInputs::pointer_precision
PointerPrecision pointer_precision
Precision of the primary pointer.
Definition
device_capability.hpp:113
pulp::platform::DeviceCapabilityInputs::realtime_render_available
bool realtime_render_available
Whether a realtime render path — a dedicated audio callback fed across a shared memory region — can b...
Definition
device_capability.hpp:110
pulp::platform::DeviceCapabilityInputs::usable_memory_bytes
std::uint64_t usable_memory_bytes
Memory the process may actually use, not the memory the device has installed.
Definition
device_capability.hpp:92
pulp::platform::DeviceCapabilityInputs::usable_core_count
std::uint32_t usable_core_count
Cores available to this process for sustained work.
Definition
device_capability.hpp:95
pulp::platform::DeviceCapabilityInputs::precision_keyboard_available
bool precision_keyboard_available
Whether a physical keyboard with modifier keys is attached.
Definition
device_capability.hpp:116
pulp::platform::DeviceCapabilityInputs::thermal_reporting_available
bool thermal_reporting_available
Whether the platform will report thermal pressure at all.
Definition
device_capability.hpp:100
core
platform
include
pulp
platform
device_capability.hpp
Generated by
1.15.0