1 | #include "taichi/common/core.h" |
---|---|
2 | #include "taichi/rhi/device_capability.h" |
3 | |
4 | namespace taichi::lang { |
5 | |
6 | DeviceCapability str2devcap(const std::string_view &name) { |
7 | #define PER_DEVICE_CAPABILITY(x) \ |
8 | if (#x == name) \ |
9 | return DeviceCapability::x; |
10 | #include "taichi/inc/rhi_constants.inc.h" |
11 | #undef PER_DEVICE_CAPABILITY |
12 | TI_ERROR("unexpected device capability name {}", name); |
13 | } |
14 | |
15 | const std::string to_string(DeviceCapability c) { |
16 | #define PER_DEVICE_CAPABILITY(name) \ |
17 | case DeviceCapability::name: \ |
18 | return #name; \ |
19 | break; |
20 | switch (c) { |
21 | #include "taichi/inc/rhi_constants.inc.h" |
22 | default: |
23 | return "Unknown"; |
24 | break; |
25 | } |
26 | #undef PER_DEVICE_CAPABILITY |
27 | } |
28 | |
29 | uint32_t DeviceCapabilityConfig::contains(DeviceCapability cap) const { |
30 | auto it = devcaps.find(cap); |
31 | return it != devcaps.end(); |
32 | } |
33 | uint32_t DeviceCapabilityConfig::get(DeviceCapability cap) const { |
34 | auto it = devcaps.find(cap); |
35 | if (it != devcaps.end()) { |
36 | return it->second; |
37 | } |
38 | return 0; |
39 | } |
40 | void DeviceCapabilityConfig::set(DeviceCapability cap, uint32_t level) { |
41 | devcaps[cap] = level; |
42 | } |
43 | |
44 | void DeviceCapabilityConfig::dbg_print_all() const { |
45 | for (auto &pair : devcaps) { |
46 | TI_TRACE("DeviceCapability::{} ({}) = {}", to_string(pair.first), |
47 | int(pair.first), pair.second); |
48 | } |
49 | } |
50 | |
51 | const std::map<DeviceCapability, uint32_t> &DeviceCapabilityConfig::to_inner() |
52 | const { |
53 | return devcaps; |
54 | } |
55 | |
56 | } // namespace taichi::lang |
57 |