#pragma once #include "ck/ck.hpp" // #include "ck/utility/number.hpp" #include "ck/utility/tuple.hpp" #include "ck/utility/tuple_helper.hpp" #include "ck/utility/dynamic_buffer.hpp" #include "ck/utility/amd_address_space.hpp" // #include "ck/utility/sequence.hpp" // #include "ck/utility/sequence_helper.hpp" // #include "ck/utility/is_detected.hpp" // #include "ck/tensor_description/tensor_descriptor.hpp" // #include "ck/tensor_description/tensor_descriptor_helper.hpp" // #include "ck/tensor_description/multi_index_transform_helper.hpp" namespace ck { namespace wrapper { // Disable from doxygen docs generation /// @cond // forward declarations template struct Layout; template struct Tensor; /// @endcond template struct MemoryPointerTag { MemoryPointerTag(PointerElementType* pointer) : pointer_(pointer) {} using ElementType = PointerElementType; AddressSpaceEnum buffer_adress_space_ = AddressSpaceEnum::Generic; ElementType* pointer_; }; template struct GlobalMemoryPointerTag : public MemoryPointerTag { AddressSpaceEnum buffer_adress_space_ = AddressSpaceEnum::Global; }; template struct SharedMemoryPointerTag : public MemoryPointerTag { AddressSpaceEnum buffer_adress_space_ = AddressSpaceEnum::Lds; }; template struct SgprMemoryPointerTag : public MemoryPointerTag { AddressSpaceEnum buffer_adress_space_ = AddressSpaceEnum::Sgpr; }; template struct VgprMemoryPointerTag : public MemoryPointerTag { AddressSpaceEnum buffer_adress_space_ = AddressSpaceEnum::Vgpr; }; template constexpr auto make_gmem_ptr(const ElementType* pointer) { return GlobalMemoryPointerTag(pointer); } template constexpr auto make_smem_ptr(const ElementType* pointer) { return SharedMemoryPointerTag(pointer); } template constexpr auto make_sgprmem_ptr(const ElementType* pointer) { return SgprMemoryPointerTag(pointer); } template constexpr auto make_vgprmem_ptr(const ElementType* pointer) { return VgprMemoryPointerTag(pointer); } template constexpr auto make_tensor(ElementType* pointer, const Layout& layout) { return Tensor(pointer, layout); } template constexpr auto make_tensor(MemoryPointerTag& mem_tag, const Layout& layout) { return Tensor(mem_tag.pointer_, layout); } } // namespace wrapper } // namespace ck