1 | #pragma once |
---|---|
2 | #include <string> |
3 | #include <map> |
4 | #include <cstdint> |
5 | |
6 | namespace taichi::lang { |
7 | |
8 | // For backend dependent code (e.g. codegen) |
9 | // Or the backend runtime itself |
10 | // Capabilities are per-device |
11 | enum class DeviceCapability : uint32_t { |
12 | #define PER_DEVICE_CAPABILITY(name) name, |
13 | #include "taichi/inc/rhi_constants.inc.h" |
14 | #undef PER_DEVICE_CAPABILITY |
15 | }; |
16 | DeviceCapability str2devcap(const std::string_view &name); |
17 | const std::string to_string(DeviceCapability c); |
18 | |
19 | // A collection of device capability. |
20 | struct DeviceCapabilityConfig { |
21 | public: |
22 | std::map<DeviceCapability, uint32_t> devcaps; |
23 | |
24 | uint32_t contains(DeviceCapability cap) const; |
25 | uint32_t get(DeviceCapability cap) const; |
26 | void set(DeviceCapability cap, uint32_t level); |
27 | |
28 | void dbg_print_all() const; |
29 | |
30 | const std::map<DeviceCapability, uint32_t> &to_inner() const; |
31 | |
32 | // TI_IO_DEF(devcaps); |
33 | }; |
34 | |
35 | } // namespace taichi::lang |
36 |