Skip to content

Commit 3609afc

Browse files
authored
Merge pull request #1448 from steffenlarsen/steffen/make_ext_func_fail_unsupported
[OpenCL] Make extension function lookup return unusupported error
2 parents e60c3c2 + 9287547 commit 3609afc

File tree

4 files changed

+44
-76
lines changed

4 files changed

+44
-76
lines changed

source/adapters/opencl/command_buffer.cpp

Lines changed: 27 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
2121

2222
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
2323
cl_ext::clCreateCommandBufferKHR_fn clCreateCommandBufferKHR = nullptr;
24-
cl_int Res =
24+
UR_RETURN_ON_FAILURE(
2525
cl_ext::getExtFuncFromContext<decltype(clCreateCommandBufferKHR)>(
2626
CLContext, cl_ext::ExtFuncPtrCache->clCreateCommandBufferKHRCache,
27-
cl_ext::CreateCommandBufferName, &clCreateCommandBufferKHR);
28-
29-
if (!clCreateCommandBufferKHR || Res != CL_SUCCESS)
30-
return UR_RESULT_ERROR_INVALID_OPERATION;
27+
cl_ext::CreateCommandBufferName, &clCreateCommandBufferKHR));
3128

29+
cl_int Res = CL_SUCCESS;
3230
auto CLCommandBuffer = clCreateCommandBufferKHR(
3331
1, cl_adapter::cast<cl_command_queue *>(&Queue), nullptr, &Res);
3432
CL_RETURN_ON_FAILURE_AND_SET_NULL(Res, phCommandBuffer);
@@ -51,12 +49,10 @@ urCommandBufferRetainExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
5149

5250
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
5351
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;
52+
UR_RETURN_ON_FAILURE(
53+
cl_ext::getExtFuncFromContext<decltype(clRetainCommandBuffer)>(
54+
CLContext, cl_ext::ExtFuncPtrCache->clRetainCommandBufferKHRCache,
55+
cl_ext::RetainCommandBufferName, &clRetainCommandBuffer));
6056

6157
CL_RETURN_ON_FAILURE(clRetainCommandBuffer(hCommandBuffer->CLCommandBuffer));
6258
return UR_RESULT_SUCCESS;
@@ -68,13 +64,10 @@ urCommandBufferReleaseExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
6864

6965
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
7066
cl_ext::clReleaseCommandBufferKHR_fn clReleaseCommandBufferKHR = nullptr;
71-
cl_int Res =
67+
UR_RETURN_ON_FAILURE(
7268
cl_ext::getExtFuncFromContext<decltype(clReleaseCommandBufferKHR)>(
7369
CLContext, cl_ext::ExtFuncPtrCache->clReleaseCommandBufferKHRCache,
74-
cl_ext::ReleaseCommandBufferName, &clReleaseCommandBufferKHR);
75-
76-
if (!clReleaseCommandBufferKHR || Res != CL_SUCCESS)
77-
return UR_RESULT_ERROR_INVALID_OPERATION;
70+
cl_ext::ReleaseCommandBufferName, &clReleaseCommandBufferKHR));
7871

7972
CL_RETURN_ON_FAILURE(
8073
clReleaseCommandBufferKHR(hCommandBuffer->CLCommandBuffer));
@@ -85,13 +78,10 @@ UR_APIEXPORT ur_result_t UR_APICALL
8578
urCommandBufferFinalizeExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
8679
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
8780
cl_ext::clFinalizeCommandBufferKHR_fn clFinalizeCommandBufferKHR = nullptr;
88-
cl_int Res =
81+
UR_RETURN_ON_FAILURE(
8982
cl_ext::getExtFuncFromContext<decltype(clFinalizeCommandBufferKHR)>(
9083
CLContext, cl_ext::ExtFuncPtrCache->clFinalizeCommandBufferKHRCache,
91-
cl_ext::FinalizeCommandBufferName, &clFinalizeCommandBufferKHR);
92-
93-
if (!clFinalizeCommandBufferKHR || Res != CL_SUCCESS)
94-
return UR_RESULT_ERROR_INVALID_OPERATION;
84+
cl_ext::FinalizeCommandBufferName, &clFinalizeCommandBufferKHR));
9585

9686
CL_RETURN_ON_FAILURE(
9787
clFinalizeCommandBufferKHR(hCommandBuffer->CLCommandBuffer));
@@ -109,13 +99,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
10999

110100
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
111101
cl_ext::clCommandNDRangeKernelKHR_fn clCommandNDRangeKernelKHR = nullptr;
112-
cl_int Res =
102+
UR_RETURN_ON_FAILURE(
113103
cl_ext::getExtFuncFromContext<decltype(clCommandNDRangeKernelKHR)>(
114104
CLContext, cl_ext::ExtFuncPtrCache->clCommandNDRangeKernelKHRCache,
115-
cl_ext::CommandNRRangeKernelName, &clCommandNDRangeKernelKHR);
116-
117-
if (!clCommandNDRangeKernelKHR || Res != CL_SUCCESS)
118-
return UR_RESULT_ERROR_INVALID_OPERATION;
105+
cl_ext::CommandNRRangeKernelName, &clCommandNDRangeKernelKHR));
119106

120107
CL_RETURN_ON_FAILURE(clCommandNDRangeKernelKHR(
121108
hCommandBuffer->CLCommandBuffer, nullptr, nullptr,
@@ -157,12 +144,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp(
157144

158145
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
159146
cl_ext::clCommandCopyBufferKHR_fn clCommandCopyBufferKHR = nullptr;
160-
cl_int Res = cl_ext::getExtFuncFromContext<decltype(clCommandCopyBufferKHR)>(
161-
CLContext, cl_ext::ExtFuncPtrCache->clCommandCopyBufferKHRCache,
162-
cl_ext::CommandCopyBufferName, &clCommandCopyBufferKHR);
163-
164-
if (!clCommandCopyBufferKHR || Res != CL_SUCCESS)
165-
return UR_RESULT_ERROR_INVALID_OPERATION;
147+
UR_RETURN_ON_FAILURE(
148+
cl_ext::getExtFuncFromContext<decltype(clCommandCopyBufferKHR)>(
149+
CLContext, cl_ext::ExtFuncPtrCache->clCommandCopyBufferKHRCache,
150+
cl_ext::CommandCopyBufferName, &clCommandCopyBufferKHR));
166151

167152
CL_RETURN_ON_FAILURE(clCommandCopyBufferKHR(
168153
hCommandBuffer->CLCommandBuffer, nullptr,
@@ -193,13 +178,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyRectExp(
193178

194179
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
195180
cl_ext::clCommandCopyBufferRectKHR_fn clCommandCopyBufferRectKHR = nullptr;
196-
cl_int Res =
181+
UR_RETURN_ON_FAILURE(
197182
cl_ext::getExtFuncFromContext<decltype(clCommandCopyBufferRectKHR)>(
198183
CLContext, cl_ext::ExtFuncPtrCache->clCommandCopyBufferRectKHRCache,
199-
cl_ext::CommandCopyBufferRectName, &clCommandCopyBufferRectKHR);
200-
201-
if (!clCommandCopyBufferRectKHR || Res != CL_SUCCESS)
202-
return UR_RESULT_ERROR_INVALID_OPERATION;
184+
cl_ext::CommandCopyBufferRectName, &clCommandCopyBufferRectKHR));
203185

204186
CL_RETURN_ON_FAILURE(clCommandCopyBufferRectKHR(
205187
hCommandBuffer->CLCommandBuffer, nullptr,
@@ -283,12 +265,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferFillExp(
283265

284266
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
285267
cl_ext::clCommandFillBufferKHR_fn clCommandFillBufferKHR = nullptr;
286-
cl_int Res = cl_ext::getExtFuncFromContext<decltype(clCommandFillBufferKHR)>(
287-
CLContext, cl_ext::ExtFuncPtrCache->clCommandFillBufferKHRCache,
288-
cl_ext::CommandFillBufferName, &clCommandFillBufferKHR);
289-
290-
if (!clCommandFillBufferKHR || Res != CL_SUCCESS)
291-
return UR_RESULT_ERROR_INVALID_OPERATION;
268+
UR_RETURN_ON_FAILURE(
269+
cl_ext::getExtFuncFromContext<decltype(clCommandFillBufferKHR)>(
270+
CLContext, cl_ext::ExtFuncPtrCache->clCommandFillBufferKHRCache,
271+
cl_ext::CommandFillBufferName, &clCommandFillBufferKHR));
292272

293273
CL_RETURN_ON_FAILURE(clCommandFillBufferKHR(
294274
hCommandBuffer->CLCommandBuffer, nullptr,
@@ -339,13 +319,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferEnqueueExp(
339319

340320
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
341321
cl_ext::clEnqueueCommandBufferKHR_fn clEnqueueCommandBufferKHR = nullptr;
342-
cl_int Res =
322+
UR_RETURN_ON_FAILURE(
343323
cl_ext::getExtFuncFromContext<decltype(clEnqueueCommandBufferKHR)>(
344324
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueCommandBufferKHRCache,
345-
cl_ext::EnqueueCommandBufferName, &clEnqueueCommandBufferKHR);
346-
347-
if (!clEnqueueCommandBufferKHR || Res != CL_SUCCESS)
348-
return UR_RESULT_ERROR_INVALID_OPERATION;
325+
cl_ext::EnqueueCommandBufferName, &clEnqueueCommandBufferKHR));
349326

350327
const uint32_t NumberOfQueues = 1;
351328

@@ -382,13 +359,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferGetInfoExp(
382359

383360
cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext);
384361
cl_ext::clGetCommandBufferInfoKHR_fn clGetCommandBufferInfoKHR = nullptr;
385-
cl_int Res =
362+
UR_RETURN_ON_FAILURE(
386363
cl_ext::getExtFuncFromContext<decltype(clGetCommandBufferInfoKHR)>(
387364
CLContext, cl_ext::ExtFuncPtrCache->clGetCommandBufferInfoKHRCache,
388-
cl_ext::GetCommandBufferInfoName, &clGetCommandBufferInfoKHR);
389-
390-
if (!clGetCommandBufferInfoKHR || Res != CL_SUCCESS)
391-
return UR_RESULT_ERROR_INVALID_OPERATION;
365+
cl_ext::GetCommandBufferInfoName, &clGetCommandBufferInfoKHR));
392366

393367
if (propName != UR_EXP_COMMAND_BUFFER_INFO_REFERENCE_COUNT) {
394368
return UR_RESULT_ERROR_INVALID_ENUMERATION;

source/adapters/opencl/common.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,9 @@ static ur_result_t getExtFuncFromContext(cl_context Context,
373373
if (It != FPtrMap.end()) {
374374
auto F = It->second;
375375
// if cached that extension is not available return nullptr and
376-
// UR_RESULT_ERROR_INVALID_VALUE
376+
// UR_RESULT_ERROR_UNSUPPORTED_FEATURE
377377
*Fptr = F;
378-
return F ? UR_RESULT_SUCCESS : UR_RESULT_ERROR_INVALID_VALUE;
378+
return F ? UR_RESULT_SUCCESS : UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
379379
}
380380

381381
cl_uint DeviceCount;
@@ -409,7 +409,7 @@ static ur_result_t getExtFuncFromContext(cl_context Context,
409409
if (!FuncPtr) {
410410
// Cache that the extension is not available
411411
FPtrMap[Context] = nullptr;
412-
return UR_RESULT_ERROR_INVALID_VALUE;
412+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
413413
}
414414

415415
*Fptr = FuncPtr;

source/adapters/opencl/enqueue.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -347,12 +347,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueDeviceGlobalVariableWrite(
347347
return mapCLErrorToUR(Res);
348348

349349
cl_ext::clEnqueueWriteGlobalVariable_fn F = nullptr;
350-
Res = cl_ext::getExtFuncFromContext<decltype(F)>(
350+
UR_RETURN_ON_FAILURE(cl_ext::getExtFuncFromContext<decltype(F)>(
351351
Ctx, cl_ext::ExtFuncPtrCache->clEnqueueWriteGlobalVariableCache,
352-
cl_ext::EnqueueWriteGlobalVariableName, &F);
353-
354-
if (!F || Res != CL_SUCCESS)
355-
return UR_RESULT_ERROR_INVALID_OPERATION;
352+
cl_ext::EnqueueWriteGlobalVariableName, &F));
356353

357354
Res = F(cl_adapter::cast<cl_command_queue>(hQueue),
358355
cl_adapter::cast<cl_program>(hProgram), name, blockingWrite, count,
@@ -378,12 +375,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueDeviceGlobalVariableRead(
378375
return mapCLErrorToUR(Res);
379376

380377
cl_ext::clEnqueueReadGlobalVariable_fn F = nullptr;
381-
Res = cl_ext::getExtFuncFromContext<decltype(F)>(
378+
UR_RETURN_ON_FAILURE(cl_ext::getExtFuncFromContext<decltype(F)>(
382379
Ctx, cl_ext::ExtFuncPtrCache->clEnqueueReadGlobalVariableCache,
383-
cl_ext::EnqueueReadGlobalVariableName, &F);
384-
385-
if (!F || Res != CL_SUCCESS)
386-
return UR_RESULT_ERROR_INVALID_OPERATION;
380+
cl_ext::EnqueueReadGlobalVariableName, &F));
387381

388382
Res = F(cl_adapter::cast<cl_command_queue>(hQueue),
389383
cl_adapter::cast<cl_program>(hProgram), name, blockingRead, count,
@@ -409,21 +403,21 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueReadHostPipe(
409403
}
410404

411405
cl_ext::clEnqueueReadHostPipeINTEL_fn FuncPtr = nullptr;
412-
ur_result_t RetVal =
406+
UR_RETURN_ON_FAILURE(
413407
cl_ext::getExtFuncFromContext<cl_ext::clEnqueueReadHostPipeINTEL_fn>(
414408
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueReadHostPipeINTELCache,
415-
cl_ext::EnqueueReadHostPipeName, &FuncPtr);
409+
cl_ext::EnqueueReadHostPipeName, &FuncPtr));
416410

417411
if (FuncPtr) {
418-
RetVal = mapCLErrorToUR(
412+
CL_RETURN_ON_FAILURE(
419413
FuncPtr(cl_adapter::cast<cl_command_queue>(hQueue),
420414
cl_adapter::cast<cl_program>(hProgram), pipe_symbol, blocking,
421415
pDst, size, numEventsInWaitList,
422416
cl_adapter::cast<const cl_event *>(phEventWaitList),
423417
cl_adapter::cast<cl_event *>(phEvent)));
424418
}
425419

426-
return RetVal;
420+
return UR_RESULT_SUCCESS;
427421
}
428422

429423
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueWriteHostPipe(
@@ -441,19 +435,19 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueWriteHostPipe(
441435
}
442436

443437
cl_ext::clEnqueueWriteHostPipeINTEL_fn FuncPtr = nullptr;
444-
ur_result_t RetVal =
438+
UR_RETURN_ON_FAILURE(
445439
cl_ext::getExtFuncFromContext<cl_ext::clEnqueueWriteHostPipeINTEL_fn>(
446440
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueWriteHostPipeINTELCache,
447-
cl_ext::EnqueueWriteHostPipeName, &FuncPtr);
441+
cl_ext::EnqueueWriteHostPipeName, &FuncPtr));
448442

449443
if (FuncPtr) {
450-
RetVal = mapCLErrorToUR(
444+
CL_RETURN_ON_FAILURE(
451445
FuncPtr(cl_adapter::cast<cl_command_queue>(hQueue),
452446
cl_adapter::cast<cl_program>(hProgram), pipe_symbol, blocking,
453447
pSrc, size, numEventsInWaitList,
454448
cl_adapter::cast<const cl_event *>(phEventWaitList),
455449
cl_adapter::cast<cl_event *>(phEvent)));
456450
}
457451

458-
return RetVal;
452+
return UR_RESULT_SUCCESS;
459453
}

source/adapters/opencl/memory.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,11 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemBufferCreate(
232232
clCreateBufferWithPropertiesINTEL_fn FuncPtr = nullptr;
233233
cl_context CLContext = cl_adapter::cast<cl_context>(hContext);
234234
// First we need to look up the function pointer
235-
RetErr =
235+
UR_RETURN_ON_FAILURE(
236236
cl_ext::getExtFuncFromContext<clCreateBufferWithPropertiesINTEL_fn>(
237237
CLContext,
238238
cl_ext::ExtFuncPtrCache->clCreateBufferWithPropertiesINTELCache,
239-
cl_ext::CreateBufferWithPropertiesName, &FuncPtr);
239+
cl_ext::CreateBufferWithPropertiesName, &FuncPtr));
240240
if (FuncPtr) {
241241
std::vector<cl_mem_properties_intel> PropertiesIntel;
242242
auto Prop = static_cast<ur_base_properties_t *>(pProperties->pNext);

0 commit comments

Comments
 (0)