Skip to content

Commit 45db185

Browse files
authored
[SYCL][UR][L0 v2] Fix ur_queue_handle_t_ after #17118 (#18520)
ur_queue_handle_t_ was not inheriting from ur::handle_base resulting in *reinterpret_cast<ur_dditable_t **>(hQueue) not working correctly. For some reason this worked on some platforms, and only manifested on PVC.
1 parent 72fc869 commit 45db185

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

unified-runtime/source/adapters/level_zero/v2/event.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,9 @@ ur_result_t urEventGetInfo(ur_event_handle_t hEvent, ur_event_info_t propName,
259259
return returnValue(hEvent->RefCount.load());
260260
}
261261
case UR_EVENT_INFO_COMMAND_QUEUE: {
262-
return returnValue(hEvent->getQueue());
262+
auto urQueueHandle = reinterpret_cast<uintptr_t>(hEvent->getQueue()) -
263+
ur_queue_handle_t_::queue_offset;
264+
return returnValue(urQueueHandle);
263265
}
264266
case UR_EVENT_INFO_CONTEXT: {
265267
return returnValue(hEvent->getContext());

unified-runtime/source/adapters/level_zero/v2/queue_handle.hpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,32 @@
1313

1414
#pragma once
1515

16+
#include "../common.hpp"
1617
#include "queue_immediate_in_order.hpp"
1718
#include <ur_api.h>
1819
#include <variant>
1920

20-
struct ur_queue_handle_t_ {
21+
struct ur_queue_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter> {
2122
using data_variant = std::variant<v2::ur_queue_immediate_in_order_t>;
2223
data_variant queue_data;
2324

25+
static constexpr uintptr_t queue_offset =
26+
sizeof(ur::handle_base<ur::level_zero::ddi_getter>);
27+
28+
template <typename T, class... Args>
29+
ur_queue_handle_t_(std::in_place_type_t<T>, Args &&...args)
30+
: ur::handle_base<ur::level_zero::ddi_getter>(),
31+
queue_data(std::in_place_type<T>, std::forward<Args>(args)...) {
32+
assert(queue_offset ==
33+
(std::visit([](auto &q) { return reinterpret_cast<uintptr_t>(&q); },
34+
queue_data) -
35+
reinterpret_cast<uintptr_t>(this)));
36+
}
37+
2438
template <typename T, class... Args>
2539
static ur_queue_handle_t_ *create(Args &&...args) {
26-
return new ur_queue_handle_t_{data_variant{std::in_place_type<T>, args...}};
40+
return new ur_queue_handle_t_(std::in_place_type<T>,
41+
std::forward<Args>(args)...);
2742
}
2843

2944
ur_queue_t_ &get() {

0 commit comments

Comments
 (0)