// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #include #include #include #include #include namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { namespace adaptor { template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUArchitecture& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 3) { throw msgpack::type_error(); } v = rocRoller::GPUArchitecture( rocRoller::GPUArchitectureTarget::fromString( o.via.array.ptr[0].as()), o.via.array.ptr[1].as>(), o.via.array.ptr[2] .as>()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUArchitecture const& v) const { o.pack_array(3); o.pack(v.target().toString()); o.pack(v.getAllCapabilities()); o.pack(v.getAllIntructionInfo()); return o; } }; template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUArchitectureTarget& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 1) { throw msgpack::type_error(); } v = rocRoller::GPUArchitectureTarget::fromString( o.via.array.ptr[0].as()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUArchitectureTarget const& v) const { o.pack_array(1); o.pack(v.toString()); return o; } }; template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUArchitectureGFX& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 1) { throw msgpack::type_error(); } v = rocRoller::GPUArchitectureGFX(o.via.array.ptr[0].as()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUArchitectureGFX const& v) const { o.pack_array(1); o.pack((int32_t)v); return o; } }; template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUCapability& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 1) { throw msgpack::type_error(); } v = rocRoller::GPUCapability(o.via.array.ptr[0].as()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUCapability const& v) const { o.pack_array(1); o.pack((uint8_t)v); return o; } }; template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUInstructionInfo& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 7) { throw msgpack::type_error(); } v = rocRoller::GPUInstructionInfo( o.via.array.ptr[0].as(), o.via.array.ptr[1].as(), o.via.array.ptr[2].as>(), o.via.array.ptr[3].as(), o.via.array.ptr[4].as(), o.via.array.ptr[5].as(), o.via.array.ptr[6].as()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUInstructionInfo const& v) const { o.pack_array(7); o.pack(v.getInstruction()); o.pack(v.getWaitCount()); o.pack(v.getWaitQueues()); o.pack(v.getLatency()); o.pack(v.hasImplicitAccess()); o.pack(v.isBranch()); o.pack(v.maxOffsetValue()); return o; } }; template <> struct convert { msgpack::object const& operator()(msgpack::object const& o, rocRoller::GPUWaitQueueType& v) const { if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if(o.via.array.size != 1) { throw msgpack::type_error(); } v = rocRoller::GPUWaitQueueType(o.via.array.ptr[0].as()); return o; } }; template <> struct pack { template packer& operator()(msgpack::packer& o, rocRoller::GPUWaitQueueType const& v) const { o.pack_array(1); o.pack((uint8_t)v); return o; } }; } } }