1#include "taichi/common/core.h"
2#include "taichi/rhi/device_capability.h"
3
4namespace taichi::lang {
5
6DeviceCapability 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
15const 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
29uint32_t DeviceCapabilityConfig::contains(DeviceCapability cap) const {
30 auto it = devcaps.find(cap);
31 return it != devcaps.end();
32}
33uint32_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}
40void DeviceCapabilityConfig::set(DeviceCapability cap, uint32_t level) {
41 devcaps[cap] = level;
42}
43
44void 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
51const std::map<DeviceCapability, uint32_t> &DeviceCapabilityConfig::to_inner()
52 const {
53 return devcaps;
54}
55
56} // namespace taichi::lang
57