2323#include < sycl/info/info_desc.hpp>
2424#include < sycl/memory_enums.hpp>
2525#include < sycl/platform.hpp>
26+ #include < ur_api.h> // for ur_memory_order_capability_flags_t
2627
2728#include < chrono>
2829#include < sstream>
@@ -34,6 +35,38 @@ namespace sycl {
3435inline namespace _V1 {
3536namespace detail {
3637
38+ inline std::vector<memory_order>
39+ readMemoryOrderBitfield (ur_memory_order_capability_flags_t bits) {
40+ std::vector<memory_order> result;
41+ if (bits & UR_MEMORY_ORDER_CAPABILITY_FLAG_RELAXED)
42+ result.push_back (memory_order::relaxed);
43+ if (bits & UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQUIRE)
44+ result.push_back (memory_order::acquire);
45+ if (bits & UR_MEMORY_ORDER_CAPABILITY_FLAG_RELEASE)
46+ result.push_back (memory_order::release);
47+ if (bits & UR_MEMORY_ORDER_CAPABILITY_FLAG_ACQ_REL)
48+ result.push_back (memory_order::acq_rel);
49+ if (bits & UR_MEMORY_ORDER_CAPABILITY_FLAG_SEQ_CST)
50+ result.push_back (memory_order::seq_cst);
51+ return result;
52+ }
53+
54+ inline std::vector<memory_scope>
55+ readMemoryScopeBitfield (ur_memory_scope_capability_flags_t bits) {
56+ std::vector<memory_scope> result;
57+ if (bits & UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_ITEM)
58+ result.push_back (memory_scope::work_item);
59+ if (bits & UR_MEMORY_SCOPE_CAPABILITY_FLAG_SUB_GROUP)
60+ result.push_back (memory_scope::sub_group);
61+ if (bits & UR_MEMORY_SCOPE_CAPABILITY_FLAG_WORK_GROUP)
62+ result.push_back (memory_scope::work_group);
63+ if (bits & UR_MEMORY_SCOPE_CAPABILITY_FLAG_DEVICE)
64+ result.push_back (memory_scope::device);
65+ if (bits & UR_MEMORY_SCOPE_CAPABILITY_FLAG_SYSTEM)
66+ result.push_back (memory_scope::system);
67+ return result;
68+ }
69+
3770inline std::vector<info::fp_config>
3871read_fp_bitfield (ur_device_fp_capability_flags_t bits) {
3972 std::vector<info::fp_config> result;
0 commit comments