7
7
// ===----------------------------------------------------------------------===//
8
8
9
9
#include " CL/sycl/detail/pi.hpp"
10
+ #include < CL/sycl/detail/plugin.hpp>
10
11
#include < atomic>
11
12
#include < gtest/gtest.h>
12
13
#include < thread>
@@ -16,6 +17,8 @@ using namespace cl::sycl;
16
17
namespace pi {
17
18
class DISABLED_EventTest : public ::testing::Test {
18
19
protected:
20
+ std::vector<detail::plugin> Plugins;
21
+
19
22
pi_platform _platform;
20
23
pi_context _context;
21
24
pi_queue _queue;
@@ -25,39 +28,50 @@ class DISABLED_EventTest : public ::testing::Test {
25
28
DISABLED_EventTest ()
26
29
: _context{nullptr }, _queue{nullptr }, _device{nullptr },
27
30
_result{PI_INVALID_VALUE} {
28
- detail::pi::initialize ();
31
+ Plugins = detail::pi::initialize ();
29
32
}
30
33
31
34
~DISABLED_EventTest () override = default ;
32
35
33
36
void SetUp () override {
34
37
pi_uint32 numPlatforms = 0 ;
38
+ ASSERT_FALSE (Plugins.empty ());
35
39
36
- ASSERT_EQ ((PI_CALL_NOCHECK (piPlatformsGet)(0 , nullptr , &numPlatforms)),
40
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piPlatformsGet>(
41
+ 0 , nullptr , &numPlatforms)),
37
42
PI_SUCCESS)
38
43
<< " piPlatformsGet failed.\n " ;
39
44
40
- ASSERT_EQ (
41
- ( PI_CALL_NOCHECK (piPlatformsGet)( numPlatforms, &_platform, nullptr )),
42
- PI_SUCCESS)
45
+ ASSERT_EQ ((Plugins[ 0 ]. call_nocheck <detail::PiApiKind::piPlatformsGet>(
46
+ numPlatforms, &_platform, nullptr )),
47
+ PI_SUCCESS)
43
48
<< " piPlatformsGet failed.\n " ;
44
49
(void )numPlatforms; // Deal with unused variable warning
45
50
46
- ASSERT_EQ ((PI_CALL_NOCHECK (piDevicesGet)(_platform, PI_DEVICE_TYPE_GPU, 1 , &_device, nullptr )),
51
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piDevicesGet>(
52
+ _platform, PI_DEVICE_TYPE_GPU, 1 , &_device, nullptr )),
47
53
PI_SUCCESS);
48
54
49
- ASSERT_EQ ((PI_CALL_NOCHECK (piContextCreate)(nullptr , 1 , &_device, nullptr , nullptr , &_context)), PI_SUCCESS);
55
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piContextCreate>(
56
+ nullptr , 1 , &_device, nullptr , nullptr , &_context)),
57
+ PI_SUCCESS);
50
58
51
- ASSERT_EQ ((PI_CALL_NOCHECK (piQueueCreate)(_context, _device, 0 , &_queue)), PI_SUCCESS);
59
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piQueueCreate>(
60
+ _context, _device, 0 , &_queue)),
61
+ PI_SUCCESS);
52
62
53
63
_result = PI_INVALID_VALUE;
54
64
}
55
65
56
66
void TearDown () override {
57
67
58
- ASSERT_EQ ((PI_CALL_NOCHECK (piQueueRelease)(_queue)), PI_SUCCESS);
68
+ ASSERT_EQ (
69
+ (Plugins[0 ].call_nocheck <detail::PiApiKind::piQueueRelease>(_queue)),
70
+ PI_SUCCESS);
59
71
60
- ASSERT_EQ ((PI_CALL_NOCHECK (piContextRelease)(_context)), PI_SUCCESS);
72
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piContextRelease>(
73
+ _context)),
74
+ PI_SUCCESS);
61
75
}
62
76
};
63
77
@@ -66,84 +80,111 @@ class DISABLED_EventTest : public ::testing::Test {
66
80
67
81
TEST_F (DISABLED_EventTest, PICreateEvent) {
68
82
pi_event foo;
69
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventCreate)(_context, &foo)), PI_SUCCESS);
83
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventCreate>(_context,
84
+ &foo)),
85
+ PI_SUCCESS);
70
86
ASSERT_NE (foo, nullptr );
71
87
72
- EXPECT_EQ ((PI_CALL_NOCHECK (piEventRelease)(foo)), PI_SUCCESS);
88
+ EXPECT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventRelease>(foo)),
89
+ PI_SUCCESS);
73
90
}
74
91
75
92
TEST_F (DISABLED_EventTest, piEventGetInfo) {
76
93
77
94
pi_event foo;
78
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventCreate)(_context, &foo)), PI_SUCCESS);
95
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventCreate>(_context,
96
+ &foo)),
97
+ PI_SUCCESS);
79
98
ASSERT_NE (foo, nullptr );
80
99
81
100
pi_uint64 paramValue = 0 ;
82
101
pi_uint64 retSize = 0 ;
83
- EXPECT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
84
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
102
+ EXPECT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
103
+ foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, sizeof (paramValue),
104
+ ¶mValue, &retSize)),
105
+ PI_SUCCESS);
85
106
86
107
EXPECT_EQ (retSize, sizeof (pi_int32));
87
108
EXPECT_EQ (paramValue, PI_EVENT_SUBMITTED);
88
109
89
- EXPECT_EQ ((PI_CALL_NOCHECK (piEventRelease)(foo)), PI_SUCCESS);
110
+ EXPECT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventRelease>(foo)),
111
+ PI_SUCCESS);
90
112
}
91
113
92
114
TEST_F (DISABLED_EventTest, piEventSetStatus) {
93
115
94
116
pi_event foo;
95
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventCreate)(_context, &foo)), PI_SUCCESS);
117
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventCreate>(_context,
118
+ &foo)),
119
+ PI_SUCCESS);
96
120
ASSERT_NE (foo, nullptr );
97
121
98
122
pi_event_status paramValue = PI_EVENT_QUEUED;
99
123
size_t retSize = 0u ;
100
- PI_CALL_NOCHECK (piEventGetInfo)(foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
101
- sizeof (paramValue), ¶mValue, &retSize);
124
+ Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
125
+ foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, sizeof (paramValue),
126
+ ¶mValue, &retSize);
102
127
103
- EXPECT_EQ ((PI_CALL_NOCHECK (piEventSetStatus)(foo, PI_EVENT_COMPLETE)), PI_SUCCESS);
128
+ EXPECT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventSetStatus>(
129
+ foo, PI_EVENT_COMPLETE)),
130
+ PI_SUCCESS);
104
131
105
132
paramValue = {};
106
133
retSize = 0u ;
107
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
108
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
134
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
135
+ foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, sizeof (paramValue),
136
+ ¶mValue, &retSize)),
137
+ PI_SUCCESS);
109
138
ASSERT_EQ (paramValue, PI_EVENT_COMPLETE);
110
139
111
- EXPECT_EQ ((PI_CALL_NOCHECK (piEventRelease)(foo)), PI_SUCCESS);
140
+ EXPECT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventRelease>(foo)),
141
+ PI_SUCCESS);
112
142
}
113
143
114
144
TEST_F (DISABLED_EventTest, WaitForManualEventOnOtherThread) {
115
145
116
146
pi_event foo;
117
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventCreate)(_context, &foo)), PI_SUCCESS);
147
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventCreate>(_context,
148
+ &foo)),
149
+ PI_SUCCESS);
118
150
ASSERT_NE (foo, nullptr );
119
151
120
152
pi_event_status paramValue = {};
121
153
size_t retSize = 0u ;
122
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
123
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
154
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
155
+ foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, sizeof (paramValue),
156
+ ¶mValue, &retSize)),
157
+ PI_SUCCESS);
124
158
ASSERT_EQ (paramValue, PI_EVENT_SUBMITTED);
125
159
126
160
std::atomic<bool > started{false };
127
161
128
162
auto tWaiter = std::thread ([&]() {
129
163
started = true ;
130
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventsWait)(1 , &foo)), PI_SUCCESS);
164
+ ASSERT_EQ (
165
+ (Plugins[0 ].call_nocheck <detail::PiApiKind::piEventsWait>(1 , &foo)),
166
+ PI_SUCCESS);
131
167
});
132
168
133
169
while (!started) {
134
170
};
135
171
136
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventSetStatus)(foo, PI_EVENT_COMPLETE)), PI_SUCCESS);
172
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventSetStatus>(
173
+ foo, PI_EVENT_COMPLETE)),
174
+ PI_SUCCESS);
137
175
138
176
tWaiter.join ();
139
177
140
178
paramValue = {};
141
179
retSize = 0u ;
142
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
143
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
180
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
181
+ foo, PI_EVENT_INFO_COMMAND_EXECUTION_STATUS, sizeof (paramValue),
182
+ ¶mValue, &retSize)),
183
+ PI_SUCCESS);
144
184
ASSERT_EQ (paramValue, PI_EVENT_COMPLETE);
145
185
146
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventRelease)(foo)), PI_SUCCESS);
186
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventRelease>(foo)),
187
+ PI_SUCCESS);
147
188
}
148
189
149
190
TEST_F (DISABLED_EventTest, piEnqueueEventsWait) {
@@ -154,39 +195,56 @@ TEST_F(DISABLED_EventTest, piEnqueueEventsWait) {
154
195
constexpr const size_t bytes = sizeof (data);
155
196
156
197
pi_mem memObj;
157
- ASSERT_EQ ((PI_CALL_NOCHECK (piMemBufferCreate)(_context, PI_MEM_FLAGS_ACCESS_RW, bytes,
158
- nullptr , &memObj)), PI_SUCCESS);
198
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piMemBufferCreate>(
199
+ _context, PI_MEM_FLAGS_ACCESS_RW, bytes, nullptr , &memObj)),
200
+ PI_SUCCESS);
159
201
160
202
pi_event events[4 ] = {nullptr , nullptr , nullptr , nullptr };
161
203
162
- ASSERT_EQ ((PI_CALL_NOCHECK (piEnqueueMemBufferWrite)(_queue, memObj, true , 0 , bytes, data, 0 ,
163
- nullptr , &events[0 ])), PI_SUCCESS);
204
+ ASSERT_EQ (
205
+ (Plugins[0 ].call_nocheck <detail::PiApiKind::piEnqueueMemBufferWrite>(
206
+ _queue, memObj, true , 0 , bytes, data, 0 , nullptr , &events[0 ])),
207
+ PI_SUCCESS);
164
208
ASSERT_NE (events[0 ], nullptr );
165
209
166
- ASSERT_EQ ((PI_CALL_NOCHECK (piEnqueueMemBufferRead)(_queue, memObj, true , 0 , bytes, output,
167
- 0 , nullptr , &events[1 ])), PI_SUCCESS);
210
+ ASSERT_EQ (
211
+ (Plugins[0 ].call_nocheck <detail::PiApiKind::piEnqueueMemBufferRead>(
212
+ _queue, memObj, true , 0 , bytes, output, 0 , nullptr , &events[1 ])),
213
+ PI_SUCCESS);
168
214
ASSERT_NE (events[1 ], nullptr );
169
215
170
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventCreate)(_context, &events[2 ])), PI_SUCCESS);
216
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventCreate>(
217
+ _context, &events[2 ])),
218
+ PI_SUCCESS);
171
219
ASSERT_NE (events[2 ], nullptr );
172
220
173
- ASSERT_EQ ((PI_CALL_NOCHECK (piEnqueueEventsWait)(_queue, 3 , events, &events[3 ])), PI_SUCCESS);
221
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEnqueueEventsWait>(
222
+ _queue, 3 , events, &events[3 ])),
223
+ PI_SUCCESS);
174
224
ASSERT_NE (events[3 ], nullptr );
175
225
176
226
pi_event_status paramValue = {};
177
227
size_t retSize = 0u ;
178
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(events[3 ], PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
179
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
228
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
229
+ events[3 ], PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
230
+ sizeof (paramValue), ¶mValue, &retSize)),
231
+ PI_SUCCESS);
180
232
ASSERT_NE (paramValue, PI_EVENT_COMPLETE);
181
233
182
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventSetStatus)(events[2 ], PI_EVENT_COMPLETE)), PI_SUCCESS);
234
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventSetStatus>(
235
+ events[2 ], PI_EVENT_COMPLETE)),
236
+ PI_SUCCESS);
183
237
184
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventsWait)(1 , &events[3 ])), PI_SUCCESS);
238
+ ASSERT_EQ (
239
+ (Plugins[0 ].call_nocheck <detail::PiApiKind::piEventsWait>(1 , &events[3 ])),
240
+ PI_SUCCESS);
185
241
186
242
paramValue = {};
187
243
retSize = 0u ;
188
- ASSERT_EQ ((PI_CALL_NOCHECK (piEventGetInfo)(events[3 ], PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
189
- sizeof (paramValue), ¶mValue, &retSize)), PI_SUCCESS);
244
+ ASSERT_EQ ((Plugins[0 ].call_nocheck <detail::PiApiKind::piEventGetInfo>(
245
+ events[3 ], PI_EVENT_INFO_COMMAND_EXECUTION_STATUS,
246
+ sizeof (paramValue), ¶mValue, &retSize)),
247
+ PI_SUCCESS);
190
248
ASSERT_EQ (paramValue, PI_EVENT_COMPLETE);
191
249
}
192
250
0 commit comments