Skip to content

Commit 109ed46

Browse files
authored
Merge pull request #966 from martygrant/martin/openclCommandBuffers
[OpenCL] Add Command Buffer extension to OpenCL adapter.
2 parents 31b654f + 2300531 commit 109ed46

File tree

5 files changed

+301
-84
lines changed

5 files changed

+301
-84
lines changed

source/adapters/opencl/command_buffer.cpp

Lines changed: 199 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -11,58 +11,118 @@
1111
#include "command_buffer.hpp"
1212
#include "common.hpp"
1313

14-
/// Stub implementations of UR experimental feature command-buffers
15-
1614
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
17-
[[maybe_unused]] ur_context_handle_t hContext,
18-
[[maybe_unused]] ur_device_handle_t hDevice,
15+
ur_context_handle_t hContext, ur_device_handle_t hDevice,
1916
[[maybe_unused]] const ur_exp_command_buffer_desc_t *pCommandBufferDesc,
20-
[[maybe_unused]] ur_exp_command_buffer_handle_t *phCommandBuffer) {
17+
ur_exp_command_buffer_handle_t *phCommandBuffer) {
2118

22-
cl_adapter::die("Experimental Command-buffer feature is not "
23-
"implemented for OpenCL adapter.");
24-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
19+
ur_queue_handle_t Queue = nullptr;
20+
UR_RETURN_ON_FAILURE(urQueueCreate(hContext, hDevice, nullptr, &Queue));
21+
22+
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
23+
cl_ext::clCreateCommandBufferKHR_fn clCreateCommandBufferKHR = nullptr;
24+
cl_int Res =
25+
cl_ext::getExtFuncFromContext<decltype(clCreateCommandBufferKHR)>(
26+
CLContext, cl_ext::ExtFuncPtrCache->clCreateCommandBufferKHRCache,
27+
cl_ext::CreateCommandBufferName, &clCreateCommandBufferKHR);
28+
29+
if (!clCreateCommandBufferKHR || Res != CL_SUCCESS)
30+
return UR_RESULT_ERROR_INVALID_OPERATION;
31+
32+
auto CLCommandBuffer = clCreateCommandBufferKHR(
33+
1, cl_adapter::cast<cl_command_queue *>(&Queue), nullptr, &Res);
34+
CL_RETURN_ON_FAILURE_AND_SET_NULL(Res, phCommandBuffer);
35+
36+
try {
37+
auto URCommandBuffer = std::make_unique<ur_exp_command_buffer_handle_t_>(
38+
Queue, hContext, CLCommandBuffer);
39+
*phCommandBuffer = URCommandBuffer.release();
40+
} catch (...) {
41+
return UR_RESULT_ERROR_OUT_OF_RESOURCES;
42+
}
43+
44+
CL_RETURN_ON_FAILURE(Res);
45+
return UR_RESULT_SUCCESS;
2546
}
2647

27-
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferRetainExp(
28-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer) {
48+
UR_APIEXPORT ur_result_t UR_APICALL
49+
urCommandBufferRetainExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
50+
UR_RETURN_ON_FAILURE(urQueueRetain(hCommandBuffer->hInternalQueue));
2951

30-
cl_adapter::die("Experimental Command-buffer feature is not "
31-
"implemented for OpenCL adapter.");
32-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
52+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
53+
cl_ext::clRetainCommandBufferKHR_fn clRetainCommandBuffer = nullptr;
54+
cl_int Res = cl_ext::getExtFuncFromContext<decltype(clRetainCommandBuffer)>(
55+
CLContext, cl_ext::ExtFuncPtrCache->clRetainCommandBufferKHRCache,
56+
cl_ext::RetainCommandBufferName, &clRetainCommandBuffer);
57+
58+
if (!clRetainCommandBuffer || Res != CL_SUCCESS)
59+
return UR_RESULT_ERROR_INVALID_OPERATION;
60+
61+
CL_RETURN_ON_FAILURE(clRetainCommandBuffer(hCommandBuffer->CLCommandBuffer));
62+
return UR_RESULT_SUCCESS;
3363
}
3464

35-
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferReleaseExp(
36-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer) {
65+
UR_APIEXPORT ur_result_t UR_APICALL
66+
urCommandBufferReleaseExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
67+
UR_RETURN_ON_FAILURE(urQueueRelease(hCommandBuffer->hInternalQueue));
3768

38-
cl_adapter::die("Experimental Command-buffer feature is not "
39-
"implemented for OpenCL adapter.");
40-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
69+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
70+
cl_ext::clReleaseCommandBufferKHR_fn clReleaseCommandBufferKHR = nullptr;
71+
cl_int Res =
72+
cl_ext::getExtFuncFromContext<decltype(clReleaseCommandBufferKHR)>(
73+
CLContext, cl_ext::ExtFuncPtrCache->clReleaseCommandBufferKHRCache,
74+
cl_ext::ReleaseCommandBufferName, &clReleaseCommandBufferKHR);
75+
76+
if (!clReleaseCommandBufferKHR || Res != CL_SUCCESS)
77+
return UR_RESULT_ERROR_INVALID_OPERATION;
78+
79+
CL_RETURN_ON_FAILURE(
80+
clReleaseCommandBufferKHR(hCommandBuffer->CLCommandBuffer));
81+
return UR_RESULT_SUCCESS;
4182
}
4283

43-
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferFinalizeExp(
44-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer) {
84+
UR_APIEXPORT ur_result_t UR_APICALL
85+
urCommandBufferFinalizeExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
86+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
87+
cl_ext::clFinalizeCommandBufferKHR_fn clFinalizeCommandBufferKHR = nullptr;
88+
cl_int Res =
89+
cl_ext::getExtFuncFromContext<decltype(clFinalizeCommandBufferKHR)>(
90+
CLContext, cl_ext::ExtFuncPtrCache->clFinalizeCommandBufferKHRCache,
91+
cl_ext::FinalizeCommandBufferName, &clFinalizeCommandBufferKHR);
4592

46-
cl_adapter::die("Experimental Command-buffer feature is not "
47-
"implemented for OpenCL adapter.");
48-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
93+
if (!clFinalizeCommandBufferKHR || Res != CL_SUCCESS)
94+
return UR_RESULT_ERROR_INVALID_OPERATION;
95+
96+
CL_RETURN_ON_FAILURE(
97+
clFinalizeCommandBufferKHR(hCommandBuffer->CLCommandBuffer));
98+
return UR_RESULT_SUCCESS;
4999
}
50100

51101
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
52-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
53-
[[maybe_unused]] ur_kernel_handle_t hKernel,
54-
[[maybe_unused]] uint32_t workDim,
55-
[[maybe_unused]] const size_t *pGlobalWorkOffset,
56-
[[maybe_unused]] const size_t *pGlobalWorkSize,
57-
[[maybe_unused]] const size_t *pLocalWorkSize,
58-
[[maybe_unused]] uint32_t numSyncPointsInWaitList,
59-
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
60-
*pSyncPointWaitList,
61-
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
102+
ur_exp_command_buffer_handle_t hCommandBuffer, ur_kernel_handle_t hKernel,
103+
uint32_t workDim, const size_t *pGlobalWorkOffset,
104+
const size_t *pGlobalWorkSize, const size_t *pLocalWorkSize,
105+
uint32_t numSyncPointsInWaitList,
106+
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
107+
ur_exp_command_buffer_sync_point_t *pSyncPoint) {
62108

63-
cl_adapter::die("Experimental Command-buffer feature is not "
64-
"implemented for OpenCL adapter.");
65-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
109+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
110+
cl_ext::clCommandNDRangeKernelKHR_fn clCommandNDRangeKernelKHR = nullptr;
111+
cl_int Res =
112+
cl_ext::getExtFuncFromContext<decltype(clCommandNDRangeKernelKHR)>(
113+
CLContext, cl_ext::ExtFuncPtrCache->clCommandNDRangeKernelKHRCache,
114+
cl_ext::CommandNRRangeKernelName, &clCommandNDRangeKernelKHR);
115+
116+
if (!clCommandNDRangeKernelKHR || Res != CL_SUCCESS)
117+
return UR_RESULT_ERROR_INVALID_OPERATION;
118+
119+
CL_RETURN_ON_FAILURE(clCommandNDRangeKernelKHR(
120+
hCommandBuffer->CLCommandBuffer, nullptr, nullptr,
121+
cl_adapter::cast<cl_kernel>(hKernel), workDim, pGlobalWorkOffset,
122+
pGlobalWorkSize, pLocalWorkSize, numSyncPointsInWaitList,
123+
pSyncPointWaitList, pSyncPoint, nullptr));
124+
125+
return UR_RESULT_SUCCESS;
66126
}
67127

68128
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemcpyUSMExp(
@@ -73,44 +133,76 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemcpyUSMExp(
73133
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
74134
*pSyncPointWaitList,
75135
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
76-
77-
cl_adapter::die("Experimental Command-buffer feature is not "
78-
"implemented for OpenCL adapter.");
79136
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
80137
}
81138

82-
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferCopyExp(
139+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendUSMFillExp(
83140
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
84-
[[maybe_unused]] ur_mem_handle_t hSrcMem,
85-
[[maybe_unused]] ur_mem_handle_t hDstMem, [[maybe_unused]] size_t srcOffset,
86-
[[maybe_unused]] size_t dstOffset, [[maybe_unused]] size_t size,
141+
[[maybe_unused]] void *pMemory, [[maybe_unused]] const void *pPattern,
142+
[[maybe_unused]] size_t patternSize, [[maybe_unused]] size_t size,
87143
[[maybe_unused]] uint32_t numSyncPointsInWaitList,
88144
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
89145
*pSyncPointWaitList,
90146
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
91-
92-
cl_adapter::die("Experimental Command-buffer feature is not "
93-
"implemented for OpenCL adapter.");
94147
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
95148
}
96149

150+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferCopyExp(
151+
ur_exp_command_buffer_handle_t hCommandBuffer, ur_mem_handle_t hSrcMem,
152+
ur_mem_handle_t hDstMem, size_t srcOffset, size_t dstOffset, size_t size,
153+
uint32_t numSyncPointsInWaitList,
154+
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
155+
ur_exp_command_buffer_sync_point_t *pSyncPoint) {
156+
157+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
158+
cl_ext::clCommandCopyBufferKHR_fn clCommandCopyBufferKHR = nullptr;
159+
cl_int Res = cl_ext::getExtFuncFromContext<decltype(clCommandCopyBufferKHR)>(
160+
CLContext, cl_ext::ExtFuncPtrCache->clCommandCopyBufferKHRCache,
161+
cl_ext::CommandCopyBufferName, &clCommandCopyBufferKHR);
162+
163+
if (!clCommandCopyBufferKHR || Res != CL_SUCCESS)
164+
return UR_RESULT_ERROR_INVALID_OPERATION;
165+
166+
CL_RETURN_ON_FAILURE(clCommandCopyBufferKHR(
167+
hCommandBuffer->CLCommandBuffer, nullptr,
168+
cl_adapter::cast<cl_mem>(hSrcMem), cl_adapter::cast<cl_mem>(hDstMem),
169+
srcOffset, dstOffset, size, numSyncPointsInWaitList, pSyncPointWaitList,
170+
pSyncPoint, nullptr));
171+
172+
return UR_RESULT_SUCCESS;
173+
}
174+
97175
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferCopyRectExp(
98-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
99-
[[maybe_unused]] ur_mem_handle_t hSrcMem,
100-
[[maybe_unused]] ur_mem_handle_t hDstMem,
101-
[[maybe_unused]] ur_rect_offset_t srcOrigin,
102-
[[maybe_unused]] ur_rect_offset_t dstOrigin,
103-
[[maybe_unused]] ur_rect_region_t region,
104-
[[maybe_unused]] size_t srcRowPitch, [[maybe_unused]] size_t srcSlicePitch,
105-
[[maybe_unused]] size_t dstRowPitch, [[maybe_unused]] size_t dstSlicePitch,
106-
[[maybe_unused]] uint32_t numSyncPointsInWaitList,
107-
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
108-
*pSyncPointWaitList,
109-
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
176+
ur_exp_command_buffer_handle_t hCommandBuffer, ur_mem_handle_t hSrcMem,
177+
ur_mem_handle_t hDstMem, ur_rect_offset_t srcOrigin,
178+
ur_rect_offset_t dstOrigin, ur_rect_region_t region, size_t srcRowPitch,
179+
size_t srcSlicePitch, size_t dstRowPitch, size_t dstSlicePitch,
180+
uint32_t numSyncPointsInWaitList,
181+
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
182+
ur_exp_command_buffer_sync_point_t *pSyncPoint) {
110183

111-
cl_adapter::die("Experimental Command-buffer feature is not "
112-
"implemented for OpenCL adapter.");
113-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
184+
size_t OpenCLOriginRect[3]{srcOrigin.x, srcOrigin.y, srcOrigin.z};
185+
size_t OpenCLDstRect[3]{dstOrigin.x, dstOrigin.y, dstOrigin.z};
186+
size_t OpenCLRegion[3]{region.width, region.height, region.depth};
187+
188+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
189+
cl_ext::clCommandCopyBufferRectKHR_fn clCommandCopyBufferRectKHR = nullptr;
190+
cl_int Res =
191+
cl_ext::getExtFuncFromContext<decltype(clCommandCopyBufferRectKHR)>(
192+
CLContext, cl_ext::ExtFuncPtrCache->clCommandCopyBufferRectKHRCache,
193+
cl_ext::CommandCopyBufferRectName, &clCommandCopyBufferRectKHR);
194+
195+
if (!clCommandCopyBufferRectKHR || Res != CL_SUCCESS)
196+
return UR_RESULT_ERROR_INVALID_OPERATION;
197+
198+
CL_RETURN_ON_FAILURE(clCommandCopyBufferRectKHR(
199+
hCommandBuffer->CLCommandBuffer, nullptr,
200+
cl_adapter::cast<cl_mem>(hSrcMem), cl_adapter::cast<cl_mem>(hDstMem),
201+
OpenCLOriginRect, OpenCLDstRect, OpenCLRegion, srcRowPitch, srcSlicePitch,
202+
dstRowPitch, dstSlicePitch, numSyncPointsInWaitList, pSyncPointWaitList,
203+
pSyncPoint, nullptr));
204+
205+
return UR_RESULT_SUCCESS;
114206
}
115207

116208
UR_APIEXPORT
@@ -122,9 +214,6 @@ ur_result_t UR_APICALL urCommandBufferAppendMembufferWriteExp(
122214
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
123215
*pSyncPointWaitList,
124216
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
125-
126-
cl_adapter::die("Experimental Command-buffer feature is not "
127-
"implemented for OpenCL adapter.");
128217
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
129218
}
130219

@@ -137,9 +226,6 @@ ur_result_t UR_APICALL urCommandBufferAppendMembufferReadExp(
137226
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
138227
*pSyncPointWaitList,
139228
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
140-
141-
cl_adapter::die("Experimental Command-buffer feature is not "
142-
"implemented for OpenCL adapter.");
143229
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
144230
}
145231

@@ -158,9 +244,6 @@ ur_result_t UR_APICALL urCommandBufferAppendMembufferWriteRectExp(
158244
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
159245
*pSyncPointWaitList,
160246
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
161-
162-
cl_adapter::die("Experimental Command-buffer feature is not "
163-
"implemented for OpenCL adapter.");
164247
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
165248
}
166249

@@ -179,20 +262,55 @@ ur_result_t UR_APICALL urCommandBufferAppendMembufferReadRectExp(
179262
[[maybe_unused]] const ur_exp_command_buffer_sync_point_t
180263
*pSyncPointWaitList,
181264
[[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint) {
182-
183-
cl_adapter::die("Experimental Command-buffer feature is not "
184-
"implemented for OpenCL adapter.");
185265
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
186266
}
187267

268+
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMembufferFillExp(
269+
ur_exp_command_buffer_handle_t hCommandBuffer, ur_mem_handle_t hBuffer,
270+
const void *pPattern, size_t patternSize, size_t offset, size_t size,
271+
uint32_t numSyncPointsInWaitList,
272+
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
273+
ur_exp_command_buffer_sync_point_t *pSyncPoint) {
274+
275+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
276+
cl_ext::clCommandFillBufferKHR_fn clCommandFillBufferKHR = nullptr;
277+
cl_int Res = cl_ext::getExtFuncFromContext<decltype(clCommandFillBufferKHR)>(
278+
CLContext, cl_ext::ExtFuncPtrCache->clCommandFillBufferKHRCache,
279+
cl_ext::CommandFillBufferName, &clCommandFillBufferKHR);
280+
281+
if (!clCommandFillBufferKHR || Res != CL_SUCCESS)
282+
return UR_RESULT_ERROR_INVALID_OPERATION;
283+
284+
CL_RETURN_ON_FAILURE(clCommandFillBufferKHR(
285+
hCommandBuffer->CLCommandBuffer, nullptr,
286+
cl_adapter::cast<cl_mem>(hBuffer), pPattern, patternSize, offset, size,
287+
numSyncPointsInWaitList, pSyncPointWaitList, pSyncPoint, nullptr));
288+
289+
return UR_RESULT_SUCCESS;
290+
}
291+
188292
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferEnqueueExp(
189-
[[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
190-
[[maybe_unused]] ur_queue_handle_t hQueue,
191-
[[maybe_unused]] uint32_t numEventsInWaitList,
192-
[[maybe_unused]] const ur_event_handle_t *phEventWaitList,
193-
[[maybe_unused]] ur_event_handle_t *phEvent) {
293+
ur_exp_command_buffer_handle_t hCommandBuffer, ur_queue_handle_t hQueue,
294+
uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
295+
ur_event_handle_t *phEvent) {
194296

195-
cl_adapter::die("Experimental Command-buffer feature is not "
196-
"implemented for OpenCL adapter.");
197-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
297+
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
298+
cl_ext::clEnqueueCommandBufferKHR_fn clEnqueueCommandBufferKHR = nullptr;
299+
cl_int Res =
300+
cl_ext::getExtFuncFromContext<decltype(clEnqueueCommandBufferKHR)>(
301+
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueCommandBufferKHRCache,
302+
cl_ext::EnqueueCommandBufferName, &clEnqueueCommandBufferKHR);
303+
304+
if (!clEnqueueCommandBufferKHR || Res != CL_SUCCESS)
305+
return UR_RESULT_ERROR_INVALID_OPERATION;
306+
307+
const uint32_t NumberOfQueues = 1;
308+
309+
CL_RETURN_ON_FAILURE(clEnqueueCommandBufferKHR(
310+
NumberOfQueues, cl_adapter::cast<cl_command_queue *>(&hQueue),
311+
hCommandBuffer->CLCommandBuffer, numEventsInWaitList,
312+
cl_adapter::cast<const cl_event *>(phEventWaitList),
313+
cl_adapter::cast<cl_event *>(phEvent)));
314+
315+
return UR_RESULT_SUCCESS;
198316
}

source/adapters/opencl/command_buffer.hpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,17 @@
88
//
99
//===----------------------------------------------------------------------===//
1010

11+
#include <CL/cl_ext.h>
1112
#include <ur/ur.hpp>
1213

13-
/// Stub implementation of command-buffers for OpenCL
14+
struct ur_exp_command_buffer_handle_t_ {
15+
ur_queue_handle_t hInternalQueue;
16+
ur_context_handle_t hContext;
17+
cl_command_buffer_khr CLCommandBuffer;
1418

15-
struct ur_exp_command_buffer_handle_t_ {};
19+
ur_exp_command_buffer_handle_t_(ur_queue_handle_t hQueue,
20+
ur_context_handle_t hContext,
21+
cl_command_buffer_khr CLCommandBuffer)
22+
: hInternalQueue(hQueue), hContext(hContext),
23+
CLCommandBuffer(CLCommandBuffer) {}
24+
};

source/adapters/opencl/common.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ ur_result_t mapCLErrorToUR(cl_int Result) {
7777
return UR_RESULT_ERROR_PROGRAM_LINK_FAILURE;
7878
case CL_INVALID_ARG_INDEX:
7979
return UR_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_INDEX;
80+
case CL_INVALID_COMMAND_BUFFER_KHR:
81+
return UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_EXP;
82+
case CL_INVALID_SYNC_POINT_WAIT_LIST_KHR:
83+
return UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_WAIT_LIST_EXP;
8084
default:
8185
return UR_RESULT_ERROR_UNKNOWN;
8286
}

0 commit comments

Comments
 (0)