Skip to content

Commit ba994bb

Browse files
authored
Merge pull request #968 from martygrant/martin/versionCheckSpecializationConstants
[OpenCL] Add version check for urProgramSetSpecializationConstants
2 parents be53fb3 + f2a365c commit ba994bb

File tree

2 files changed

+52
-14
lines changed

2 files changed

+52
-14
lines changed

source/adapters/opencl/enqueue.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,9 +350,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueReadHostPipe(
350350
return mapCLErrorToUR(CLErr);
351351
}
352352

353-
clEnqueueReadHostPipeINTEL_fn FuncPtr = nullptr;
353+
cl_ext::clEnqueueReadHostPipeINTEL_fn FuncPtr = nullptr;
354354
ur_result_t RetVal =
355-
cl_ext::getExtFuncFromContext<clEnqueueReadHostPipeINTEL_fn>(
355+
cl_ext::getExtFuncFromContext<cl_ext::clEnqueueReadHostPipeINTEL_fn>(
356356
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueReadHostPipeINTELCache,
357357
cl_ext::EnqueueReadHostPipeName, &FuncPtr);
358358

@@ -382,9 +382,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueWriteHostPipe(
382382
return mapCLErrorToUR(CLErr);
383383
}
384384

385-
clEnqueueWriteHostPipeINTEL_fn FuncPtr = nullptr;
385+
cl_ext::clEnqueueWriteHostPipeINTEL_fn FuncPtr = nullptr;
386386
ur_result_t RetVal =
387-
cl_ext::getExtFuncFromContext<clEnqueueWriteHostPipeINTEL_fn>(
387+
cl_ext::getExtFuncFromContext<cl_ext::clEnqueueWriteHostPipeINTEL_fn>(
388388
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueWriteHostPipeINTELCache,
389389
cl_ext::EnqueueWriteHostPipeName, &FuncPtr);
390390

source/adapters/opencl/program.cpp

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -316,20 +316,58 @@ UR_APIEXPORT ur_result_t UR_APICALL urProgramSetSpecializationConstants(
316316
CL_RETURN_ON_FAILURE(clGetProgramInfo(CLProg, CL_PROGRAM_CONTEXT, sizeof(Ctx),
317317
&Ctx, &RetSize));
318318

319-
cl_ext::clSetProgramSpecializationConstant_fn F = nullptr;
320-
const ur_result_t URResult = cl_ext::getExtFuncFromContext<decltype(F)>(
321-
Ctx, cl_ext::ExtFuncPtrCache->clSetProgramSpecializationConstantCache,
322-
cl_ext::SetProgramSpecializationConstantName, &F);
319+
std::unique_ptr<std::vector<cl_device_id>> DevicesInCtx;
320+
cl_adapter::getDevicesFromContext(cl_adapter::cast<ur_context_handle_t>(Ctx),
321+
DevicesInCtx);
323322

324-
if (URResult != UR_RESULT_SUCCESS) {
325-
return URResult;
326-
}
323+
cl_platform_id CurPlatform;
324+
clGetDeviceInfo((*DevicesInCtx)[0], CL_DEVICE_PLATFORM,
325+
sizeof(cl_platform_id), &CurPlatform, nullptr);
326+
327+
oclv::OpenCLVersion PlatVer;
328+
cl_adapter::getPlatformVersion(CurPlatform, PlatVer);
329+
330+
bool UseExtensionLookup = false;
331+
if (PlatVer < oclv::V2_2) {
332+
UseExtensionLookup = true;
333+
} else {
334+
for (cl_device_id Dev : *DevicesInCtx) {
335+
oclv::OpenCLVersion DevVer;
327336

328-
for (uint32_t i = 0; i < count; ++i) {
329-
CL_RETURN_ON_FAILURE(F(CLProg, pSpecConstants[i].id, pSpecConstants[i].size,
330-
pSpecConstants[i].pValue));
337+
cl_adapter::getDeviceVersion(Dev, DevVer);
338+
339+
if (DevVer < oclv::V2_2) {
340+
UseExtensionLookup = true;
341+
break;
342+
}
343+
}
331344
}
332345

346+
if (UseExtensionLookup == false) {
347+
for (uint32_t i = 0; i < count; ++i) {
348+
CL_RETURN_ON_FAILURE(clSetProgramSpecializationConstant(
349+
CLProg, pSpecConstants[i].id, pSpecConstants[i].size,
350+
pSpecConstants[i].pValue));
351+
}
352+
} else {
353+
cl_ext::clSetProgramSpecializationConstant_fn
354+
SetProgramSpecializationConstant = nullptr;
355+
const ur_result_t URResult = cl_ext::getExtFuncFromContext<
356+
decltype(SetProgramSpecializationConstant)>(
357+
Ctx, cl_ext::ExtFuncPtrCache->clSetProgramSpecializationConstantCache,
358+
cl_ext::SetProgramSpecializationConstantName,
359+
&SetProgramSpecializationConstant);
360+
361+
if (URResult != UR_RESULT_SUCCESS) {
362+
return URResult;
363+
}
364+
365+
for (uint32_t i = 0; i < count; ++i) {
366+
CL_RETURN_ON_FAILURE(SetProgramSpecializationConstant(
367+
CLProg, pSpecConstants[i].id, pSpecConstants[i].size,
368+
pSpecConstants[i].pValue));
369+
}
370+
}
333371
return UR_RESULT_SUCCESS;
334372
}
335373

0 commit comments

Comments
 (0)