1#pragma once
2#include <string>
3#include <map>
4#include <cstdint>
5
6namespace taichi::lang {
7
8// For backend dependent code (e.g. codegen)
9// Or the backend runtime itself
10// Capabilities are per-device
11enum 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};
16DeviceCapability str2devcap(const std::string_view &name);
17const std::string to_string(DeviceCapability c);
18
19// A collection of device capability.
20struct 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