From e6e24a6fea909ffa599febc3e1a23cc7a7e0a3a5 Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 07:37:42 +0000 Subject: [PATCH 1/6] Add C++ utils header --- oneapi-rs-sys/build.rs | 1 + oneapi-rs-sys/include/utils.hpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 oneapi-rs-sys/include/utils.hpp diff --git a/oneapi-rs-sys/build.rs b/oneapi-rs-sys/build.rs index 854c5e4..c222644 100644 --- a/oneapi-rs-sys/build.rs +++ b/oneapi-rs-sys/build.rs @@ -35,6 +35,7 @@ fn main() { ]; let cpp_headers = [ + "include/utils.hpp", "include/types.hpp", "include/platform.hpp", "include/device.hpp", diff --git a/oneapi-rs-sys/include/utils.hpp b/oneapi-rs-sys/include/utils.hpp new file mode 100644 index 0000000..f5142b4 --- /dev/null +++ b/oneapi-rs-sys/include/utils.hpp @@ -0,0 +1,17 @@ +// +// Copyright (C) 2026 Intel Corporation +// +// Under the MIT License or the Apache License v2.0. +// See LICENSE-MIT and LICENSE-APACHE for license information. +// SPDX-License-Identifier: MIT OR Apache-2.0 +// + +#pragma once + +#include + +#include "oneapi-rs-sys/include/types.hpp" +#include "rust/cxx.h" + +namespace sycl_shims { +} // namespace sycl_shims From 0e7ac3ffbe8ec66be6aa6bdfe21713fcac7301a1 Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 10:45:32 +0000 Subject: [PATCH 2/6] Add rust::Vec to std::vector conversion function --- oneapi-rs-sys/include/utils.hpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/oneapi-rs-sys/include/utils.hpp b/oneapi-rs-sys/include/utils.hpp index f5142b4..ca06bb2 100644 --- a/oneapi-rs-sys/include/utils.hpp +++ b/oneapi-rs-sys/include/utils.hpp @@ -9,9 +9,23 @@ #pragma once #include +#include +#include +#include #include "oneapi-rs-sys/include/types.hpp" #include "rust/cxx.h" -namespace sycl_shims { -} // namespace sycl_shims +namespace sycl_shims::utils { +template +using UnwrappedPtr = std::remove_reference_t().ptr)>; + +template +std::vector> vec_to_vector(rust::Vec &&vec) { + std::vector> vector; + for (auto &&e : vec) + vector.push_back(std::move(*e.ptr)); + + return vector; +} +} // namespace sycl_shims::utils From d586cd63fc567c51aaaa141caa57349cd0bcaad3 Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 10:46:11 +0000 Subject: [PATCH 3/6] Use rust::Vec to std::vector conversion function --- oneapi-rs-sys/src/context.cpp | 8 ++++---- oneapi-rs-sys/src/queue.cpp | 21 ++++++++------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/oneapi-rs-sys/src/context.cpp b/oneapi-rs-sys/src/context.cpp index 1cd1a7a..5b7c79c 100644 --- a/oneapi-rs-sys/src/context.cpp +++ b/oneapi-rs-sys/src/context.cpp @@ -7,13 +7,13 @@ // #include "oneapi-rs-sys/include/context.hpp" +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/src/context-sys.rs.h" +using sycl_shims::utils::vec_to_vector; + namespace sycl_shims::context { std::unique_ptr new_context(rust::Vec devices) { - std::vector raw_devices; - for (auto &&d : devices) - raw_devices.push_back(std::move(*d.ptr)); - return std::make_unique(raw_devices); + return std::make_unique(vec_to_vector(std::move(devices))); } } // namespace sycl_shims::context diff --git a/oneapi-rs-sys/src/queue.cpp b/oneapi-rs-sys/src/queue.cpp index 8fce66d..272626d 100644 --- a/oneapi-rs-sys/src/queue.cpp +++ b/oneapi-rs-sys/src/queue.cpp @@ -7,10 +7,12 @@ // #include "oneapi-rs-sys/include/queue.hpp" +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/src/queue-sys.rs.h" using sycl::ext::intel::property::queue::immediate_command_list; using sycl::property::queue::in_order; +using sycl_shims::utils::vec_to_vector; namespace syclexp = sycl::ext::oneapi::experimental; @@ -39,18 +41,14 @@ std::unique_ptr clone(Queue const &queue) { std::unique_ptr memset(std::unique_ptr &queue, std::uint8_t *ptr, int value, std::size_t num_bytes, rust::Vec dep_events) { - std::vector deps; - for (auto &&e : dep_events) - deps.push_back(std::move(*e.ptr)); - return std::make_unique(queue->memset(ptr, value, num_bytes, deps)); + return std::make_unique(queue->memset( + ptr, value, num_bytes, vec_to_vector(std::move(dep_events)))); } std::unique_ptr barrier(std::unique_ptr &queue, rust::Vec dep_events) { - std::vector deps; - for (auto &&e : dep_events) - deps.push_back(std::move(*e.ptr)); - return std::make_unique(queue->ext_oneapi_submit_barrier(deps)); + return std::make_unique( + queue->ext_oneapi_submit_barrier(vec_to_vector(std::move(dep_events)))); } void wait(std::unique_ptr &queue) { queue->wait(); } @@ -102,10 +100,7 @@ launch_3d(std::unique_ptr &queue, Range3 global_size, Range3 local_size, std::unique_ptr memcpy(std::unique_ptr &queue, std::uint8_t *dest, std::uint8_t const *src, std::size_t num_bytes, rust::Vec dep_events) { - std::vector deps; - for (auto &&e : dep_events) - deps.push_back(std::move(*e.ptr)); - - return std::make_unique(queue->memcpy(dest, src, num_bytes, deps)); + return std::make_unique(queue->memcpy( + dest, src, num_bytes, vec_to_vector(std::move(dep_events)))); } } // namespace sycl_shims::queue From df0d79d822e124d7fc3cd087436c2631a5fd4f2d Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 11:56:19 +0000 Subject: [PATCH 4/6] Add std::vector to rust::Vec conversion function --- oneapi-rs-sys/include/utils.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/oneapi-rs-sys/include/utils.hpp b/oneapi-rs-sys/include/utils.hpp index ca06bb2..c3c358f 100644 --- a/oneapi-rs-sys/include/utils.hpp +++ b/oneapi-rs-sys/include/utils.hpp @@ -28,4 +28,13 @@ std::vector> vec_to_vector(rust::Vec &&vec) { return vector; } + +template +rust::Vec vector_to_vec(std::vector> &&vector) { + rust::Vec vec; + for (auto &&e : vector) + vec.push_back(T{std::make_unique>(e)}); + + return vec; +} } // namespace sycl_shims::utils From 4935fa929541423994efec7242b09f68b123fdbf Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 11:56:33 +0000 Subject: [PATCH 5/6] Use std::vector to rust::Vec conversion function --- oneapi-rs-sys/src/device.cpp | 9 +++------ oneapi-rs-sys/src/platform.cpp | 17 +++++------------ 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/oneapi-rs-sys/src/device.cpp b/oneapi-rs-sys/src/device.cpp index 1063f0f..d74c82a 100644 --- a/oneapi-rs-sys/src/device.cpp +++ b/oneapi-rs-sys/src/device.cpp @@ -6,19 +6,16 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 // +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/include/device.hpp" #include "oneapi-rs-sys/src/device-sys.rs.h" +using sycl_shims::utils::vector_to_vec; using dt = sycl::info::device_type; namespace sycl_shims::device { rust::Vec get_devices() { - rust::Vec devices; - - for (auto &&device : sycl::device::get_devices()) - devices.push_back(DevicePtr{std::make_unique(device)}); - - return devices; + return vector_to_vec(sycl::device::get_devices()); } DeviceType get_device_type(Device const &device) { diff --git a/oneapi-rs-sys/src/platform.cpp b/oneapi-rs-sys/src/platform.cpp index 013e254..d338a6e 100644 --- a/oneapi-rs-sys/src/platform.cpp +++ b/oneapi-rs-sys/src/platform.cpp @@ -6,26 +6,19 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 // +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/include/platform.hpp" #include "oneapi-rs-sys/src/platform-sys.rs.h" +using sycl_shims::utils::vector_to_vec; + namespace sycl_shims::platform { rust::Vec get_platforms() { - rust::Vec platforms; - - for (auto &&platform : sycl::platform::get_platforms()) - platforms.push_back(PlatformPtr{std::make_unique(platform)}); - - return platforms; + return vector_to_vec(sycl::platform::get_platforms()); } rust::Vec get_devices(Platform const &platform) { - rust::Vec devices; - - for (auto &&device : platform.get_devices()) - devices.push_back(DevicePtr{std::make_unique(device)}); - - return devices; + return vector_to_vec(platform.get_devices()); } rust::String get_version(Platform const &platform) { From 6a632065ec378d4fb06d1ebaa227603f365a159a Mon Sep 17 00:00:00 2001 From: Szymon Zadworny Date: Thu, 30 Jul 2026 12:08:02 +0000 Subject: [PATCH 6/6] clang-format --- oneapi-rs-sys/src/device.cpp | 2 +- oneapi-rs-sys/src/platform.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/oneapi-rs-sys/src/device.cpp b/oneapi-rs-sys/src/device.cpp index d74c82a..7244aea 100644 --- a/oneapi-rs-sys/src/device.cpp +++ b/oneapi-rs-sys/src/device.cpp @@ -6,8 +6,8 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 // -#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/include/device.hpp" +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/src/device-sys.rs.h" using sycl_shims::utils::vector_to_vec; diff --git a/oneapi-rs-sys/src/platform.cpp b/oneapi-rs-sys/src/platform.cpp index d338a6e..b76d79f 100644 --- a/oneapi-rs-sys/src/platform.cpp +++ b/oneapi-rs-sys/src/platform.cpp @@ -6,8 +6,8 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 // -#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/include/platform.hpp" +#include "oneapi-rs-sys/include/utils.hpp" #include "oneapi-rs-sys/src/platform-sys.rs.h" using sycl_shims::utils::vector_to_vec;