Correct clCreateProgramWithBuiltInKernels

create program for all provided devices
move OCL specific code from shared to opencl

Related-To: NEO-5001
Change-Id: Ic352b4e907ae75426634ae4b3c7048edecaf83e7
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-10-22 12:14:54 +02:00
committed by sys_ocldev
parent 8778b5c302
commit a5a5c94097
52 changed files with 387 additions and 354 deletions

View File

@@ -1427,28 +1427,32 @@ cl_program CL_API_CALL clCreateProgramWithBuiltInKernels(cl_context context,
"deviceList", deviceList,
"kernelNames", kernelNames);
cl_program program = nullptr;
Context *pContext = nullptr;
retVal = validateObjects(
context, deviceList, kernelNames, errcodeRet);
retVal = validateObjects(WithCastToInternal(context, &pContext), numDevices,
deviceList, kernelNames, errcodeRet);
if (numDevices == 0) {
retVal = CL_INVALID_VALUE;
}
if (retVal == CL_SUCCESS) {
for (cl_uint i = 0; i < numDevices; i++) {
auto pContext = castToObject<Context>(context);
auto pDevice = castToObject<ClDevice>(*deviceList);
ClDeviceVector deviceVector;
for (auto i = 0u; i < numDevices; i++) {
auto device = castToObject<ClDevice>(deviceList[i]);
if (!device || !pContext->isDeviceAssociated(*device)) {
retVal = CL_INVALID_DEVICE;
break;
}
deviceVector.push_back(device);
}
if (retVal == CL_SUCCESS) {
program = Vme::createBuiltInProgram(
*pContext,
pDevice->getDevice(),
deviceVector,
kernelNames,
retVal);
if (program && retVal == CL_SUCCESS) {
break;
}
}
}

View File

@@ -20,7 +20,7 @@ namespace NEO {
template <>
class BuiltInOp<EBuiltInOps::AuxTranslation> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device);
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device);
template <typename GfxFamily>
bool buildDispatchInfosForAuxTranslation(MultiDispatchInfo &multiDispatchInfo, const BuiltinOpParams &operationParams) const {
size_t kernelInstanceNumber = 0;

View File

@@ -11,7 +11,7 @@
#include "opencl/source/mem_obj/buffer.h"
namespace NEO {
BuiltInOp<EBuiltInOps::AuxTranslation>::BuiltInOp(BuiltIns &kernelsLib, Device &device) : BuiltinDispatchInfoBuilder(kernelsLib) {
BuiltInOp<EBuiltInOps::AuxTranslation>::BuiltInOp(BuiltIns &kernelsLib, ClDevice &device) : BuiltinDispatchInfoBuilder(kernelsLib) {
BuiltinDispatchInfoBuilder::populate(device, EBuiltInOps::AuxTranslation, "", "fullCopy", baseKernel);
resizeKernelInstances(5);

View File

@@ -33,7 +33,7 @@ namespace NEO {
template <>
class BuiltInOp<EBuiltInOps::CopyBufferToBuffer> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib) {
populate(device,
EBuiltInOps::CopyBufferToBuffer,
@@ -128,7 +128,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferToBuffer> : public BuiltinDispatchInfoBui
template <>
class BuiltInOp<EBuiltInOps::CopyBufferToBufferStateless> : public BuiltInOp<EBuiltInOps::CopyBufferToBuffer> {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltInOp<EBuiltInOps::CopyBufferToBuffer>(kernelsLib) {
populate(device,
EBuiltInOps::CopyBufferToBufferStateless,
@@ -146,7 +146,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferToBufferStateless> : public BuiltInOp<EBu
template <>
class BuiltInOp<EBuiltInOps::CopyBufferRect> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib), kernelBytes{nullptr} {
populate(device,
EBuiltInOps::CopyBufferRect,
@@ -251,7 +251,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferRect> : public BuiltinDispatchInfoBuilder
template <>
class BuiltInOp<EBuiltInOps::CopyBufferRectStateless> : public BuiltInOp<EBuiltInOps::CopyBufferRect> {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltInOp<EBuiltInOps::CopyBufferRect>(kernelsLib) {
populate(device,
EBuiltInOps::CopyBufferRectStateless,
@@ -268,7 +268,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferRectStateless> : public BuiltInOp<EBuiltI
template <>
class BuiltInOp<EBuiltInOps::FillBuffer> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib) {
populate(device,
EBuiltInOps::FillBuffer,
@@ -353,7 +353,7 @@ class BuiltInOp<EBuiltInOps::FillBuffer> : public BuiltinDispatchInfoBuilder {
template <>
class BuiltInOp<EBuiltInOps::FillBufferStateless> : public BuiltInOp<EBuiltInOps::FillBuffer> {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device) : BuiltInOp<EBuiltInOps::FillBuffer>(kernelsLib) {
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device) : BuiltInOp<EBuiltInOps::FillBuffer>(kernelsLib) {
populate(device,
EBuiltInOps::FillBufferStateless,
CompilerOptions::greaterThan4gbBuffersRequired,
@@ -369,7 +369,7 @@ class BuiltInOp<EBuiltInOps::FillBufferStateless> : public BuiltInOp<EBuiltInOps
template <>
class BuiltInOp<EBuiltInOps::CopyBufferToImage3d> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib) {
populate(device,
EBuiltInOps::CopyBufferToImage3d,
@@ -463,7 +463,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferToImage3d> : public BuiltinDispatchInfoBu
template <>
class BuiltInOp<EBuiltInOps::CopyBufferToImage3dStateless> : public BuiltInOp<EBuiltInOps::CopyBufferToImage3d> {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltInOp<EBuiltInOps::CopyBufferToImage3d>(kernelsLib) {
populate(device,
EBuiltInOps::CopyBufferToImage3dStateless,
@@ -483,7 +483,7 @@ class BuiltInOp<EBuiltInOps::CopyBufferToImage3dStateless> : public BuiltInOp<EB
template <>
class BuiltInOp<EBuiltInOps::CopyImage3dToBuffer> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib) {
populate(device,
EBuiltInOps::CopyImage3dToBuffer,
@@ -578,7 +578,7 @@ class BuiltInOp<EBuiltInOps::CopyImage3dToBuffer> : public BuiltinDispatchInfoBu
template <>
class BuiltInOp<EBuiltInOps::CopyImage3dToBufferStateless> : public BuiltInOp<EBuiltInOps::CopyImage3dToBuffer> {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltInOp<EBuiltInOps::CopyImage3dToBuffer>(kernelsLib) {
populate(device,
EBuiltInOps::CopyImage3dToBufferStateless,
@@ -598,7 +598,7 @@ class BuiltInOp<EBuiltInOps::CopyImage3dToBufferStateless> : public BuiltInOp<EB
template <>
class BuiltInOp<EBuiltInOps::CopyImageToImage3d> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib), kernel(nullptr) {
populate(device,
EBuiltInOps::CopyImageToImage3d,
@@ -664,7 +664,7 @@ class BuiltInOp<EBuiltInOps::CopyImageToImage3d> : public BuiltinDispatchInfoBui
template <>
class BuiltInOp<EBuiltInOps::FillImage3d> : public BuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: BuiltinDispatchInfoBuilder(kernelsLib), kernel(nullptr) {
populate(device,
EBuiltInOps::FillImage3d,
@@ -719,9 +719,9 @@ class BuiltInOp<EBuiltInOps::FillImage3d> : public BuiltinDispatchInfoBuilder {
Kernel *kernel;
};
BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, Device &device) {
BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, ClDevice &device) {
uint32_t operationId = static_cast<uint32_t>(operation);
auto kernelsLib = device.getBuiltIns();
auto kernelsLib = device.getDevice().getBuiltIns();
auto &operationBuilder = kernelsLib->BuiltinOpsBuilders[operationId];
switch (operation) {
case EBuiltInOps::CopyBufferToBuffer:
@@ -789,4 +789,23 @@ void BuiltInOwnershipWrapper::takeOwnership(BuiltinDispatchInfoBuilder &inputBui
}
}
std::unique_ptr<Program> BuiltinDispatchInfoBuilder::createProgramFromCode(const BuiltinCode &bc, const ClDeviceVector &deviceVector) {
std::unique_ptr<Program> ret;
const char *data = bc.resource.data();
size_t dataLen = bc.resource.size();
cl_int err = 0;
switch (bc.type) {
default:
break;
case BuiltinCode::ECodeType::Source:
case BuiltinCode::ECodeType::Intermediate:
ret.reset(Program::create(data, nullptr, deviceVector, true, &err));
break;
case BuiltinCode::ECodeType::Binary:
ret.reset(Program::createFromGenBinary(*deviceVector[0]->getExecutionEnvironment(), nullptr, data, dataLen, true, nullptr, &deviceVector[0]->getDevice()));
break;
}
return ret;
}
} // namespace NEO

View File

@@ -26,6 +26,7 @@
namespace NEO {
typedef std::vector<char> BuiltinResourceT;
class ClDeviceVector;
class Context;
class Device;
class MemObj;
@@ -59,7 +60,7 @@ class BuiltinDispatchInfoBuilder {
virtual ~BuiltinDispatchInfoBuilder() = default;
template <typename... KernelsDescArgsT>
void populate(Device &device, EBuiltInOps::Type operation, ConstStringRef options, KernelsDescArgsT &&... desc);
void populate(ClDevice &device, EBuiltInOps::Type operation, ConstStringRef options, KernelsDescArgsT &&... desc);
virtual bool buildDispatchInfos(MultiDispatchInfo &multiDispatchInfo) const {
return false;
@@ -82,6 +83,8 @@ class BuiltinDispatchInfoBuilder {
std::vector<std::unique_ptr<Kernel>> &peekUsedKernels() { return usedKernels; }
static std::unique_ptr<Program> createProgramFromCode(const BuiltinCode &bc, const ClDeviceVector &device);
protected:
template <typename KernelNameT, typename... KernelsDescArgsT>
void grabKernels(KernelNameT &&kernelName, Kernel *&kernelDst, KernelsDescArgsT &&... kernelsDesc) {
@@ -103,10 +106,8 @@ class BuiltinDispatchInfoBuilder {
class BuiltInDispatchBuilderOp {
public:
static BuiltinDispatchInfoBuilder &getBuiltinDispatchInfoBuilder(EBuiltInOps::Type op, Device &device);
static BuiltinDispatchInfoBuilder &getUnknownDispatchInfoBuilder(EBuiltInOps::Type op, Device &device);
std::unique_ptr<BuiltinDispatchInfoBuilder> setBuiltinDispatchInfoBuilder(EBuiltInOps::Type op, Device &device,
std::unique_ptr<BuiltinDispatchInfoBuilder> newBuilder);
static BuiltinDispatchInfoBuilder &getBuiltinDispatchInfoBuilder(EBuiltInOps::Type op, ClDevice &device);
static BuiltinDispatchInfoBuilder &getUnknownDispatchInfoBuilder(EBuiltInOps::Type op, ClDevice &device);
};
class BuiltInOwnershipWrapper : public NonCopyableOrMovableClass {

View File

@@ -5,11 +5,15 @@
*
*/
#include "opencl/source/cl_device/cl_device.h"
namespace NEO {
template <typename... KernelsDescArgsT>
void BuiltinDispatchInfoBuilder::populate(Device &device, EBuiltInOps::Type op, ConstStringRef options, KernelsDescArgsT &&... desc) {
auto src = kernelsLib.getBuiltinsLib().getBuiltinCode(op, BuiltinCode::ECodeType::Any, device);
prog.reset(BuiltinsLib::createProgramFromCode(src, device).release());
void BuiltinDispatchInfoBuilder::populate(ClDevice &device, EBuiltInOps::Type op, ConstStringRef options, KernelsDescArgsT &&... desc) {
auto src = kernelsLib.getBuiltinsLib().getBuiltinCode(op, BuiltinCode::ECodeType::Any, device.getDevice());
ClDeviceVector deviceVector;
deviceVector.push_back(&device);
prog.reset(BuiltinDispatchInfoBuilder::createProgramFromCode(src, deviceVector).release());
prog->build(0, nullptr, options.data(), nullptr, nullptr, kernelsLib.isCacheingEnabled());
grabKernels(std::forward<KernelsDescArgsT>(desc)...);
}

View File

@@ -15,7 +15,7 @@ const char *getUnknownBuiltinAsString(EBuiltInOps::Type builtin) {
return "unknown";
}
BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getUnknownDispatchInfoBuilder(EBuiltInOps::Type operation, Device &device) {
BuiltinDispatchInfoBuilder &BuiltInDispatchBuilderOp::getUnknownDispatchInfoBuilder(EBuiltInOps::Type operation, ClDevice &device) {
throw std::runtime_error("getBuiltinDispatchInfoBuilder failed");
}
} // namespace NEO

View File

@@ -41,7 +41,7 @@ static const std::tuple<const char *, const char *> mediaBuiltIns[] = {
// call and user is responsible for releasing it by calling clReleaseProgram.
Program *Vme::createBuiltInProgram(
Context &context,
Device &device,
const ClDeviceVector &deviceVector,
const char *kernelNames,
int &errcodeRet) {
std::string programSourceStr = "";
@@ -68,7 +68,9 @@ Program *Vme::createBuiltInProgram(
}
Program *pBuiltInProgram = nullptr;
pBuiltInProgram = Program::create(programSourceStr.c_str(), &context, device, true, nullptr);
pBuiltInProgram = Program::create(programSourceStr.c_str(), &context, deviceVector, true, nullptr);
auto &device = *deviceVector[0];
if (pBuiltInProgram) {
std::unordered_map<std::string, BuiltinDispatchInfoBuilder *> builtinsBuilders;
@@ -79,7 +81,7 @@ Program *Vme::createBuiltInProgram(
builtinsBuilders["block_advanced_motion_estimate_bidirectional_check_intel"] =
&Vme::getBuiltinDispatchInfoBuilder(EBuiltInOps::VmeBlockAdvancedMotionEstimateBidirectionalCheckIntel, device);
errcodeRet = pBuiltInProgram->build(&device, mediaKernelsBuildOptions, true, builtinsBuilders);
errcodeRet = pBuiltInProgram->build(&device.getDevice(), mediaKernelsBuildOptions, true, builtinsBuilders);
} else {
errcodeRet = CL_INVALID_VALUE;
}
@@ -99,8 +101,8 @@ const char *getAdditionalBuiltinAsString(EBuiltInOps::Type builtin) {
}
}
BuiltinDispatchInfoBuilder &Vme::getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, Device &device) {
auto &builtins = *device.getBuiltIns();
BuiltinDispatchInfoBuilder &Vme::getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, ClDevice &device) {
auto &builtins = *device.getDevice().getBuiltIns();
uint32_t operationId = static_cast<uint32_t>(operation);
auto &operationBuilder = builtins.BuiltinOpsBuilders[operationId];
switch (operation) {

View File

@@ -10,7 +10,8 @@
namespace NEO {
class Program;
class Device;
class ClDevice;
class ClDeviceVector;
class Context;
class BuiltIns;
class BuiltinDispatchInfoBuilder;
@@ -18,11 +19,11 @@ namespace Vme {
Program *createBuiltInProgram(
Context &context,
Device &device,
const ClDeviceVector &deviceVector,
const char *kernelNames,
int &errcodeRet);
BuiltinDispatchInfoBuilder &getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, Device &device);
BuiltinDispatchInfoBuilder &getBuiltinDispatchInfoBuilder(EBuiltInOps::Type operation, ClDevice &device);
} // namespace Vme
} // namespace NEO

View File

@@ -20,7 +20,7 @@
namespace NEO {
class VmeBuiltinDispatchInfoBuilder : public BuiltinDispatchInfoBuilder {
public:
VmeBuiltinDispatchInfoBuilder(BuiltIns &kernelsLib, Device &device, EBuiltInOps::Type builtinOp,
VmeBuiltinDispatchInfoBuilder(BuiltIns &kernelsLib, ClDevice &device, EBuiltInOps::Type builtinOp,
const char *kernelName)
: BuiltinDispatchInfoBuilder(kernelsLib) {
populate(device, builtinOp,
@@ -242,7 +242,7 @@ class VmeBuiltinDispatchInfoBuilder : public BuiltinDispatchInfoBuilder {
template <>
class BuiltInOp<EBuiltInOps::VmeBlockMotionEstimateIntel> : public VmeBuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: VmeBuiltinDispatchInfoBuilder(kernelsLib, device,
EBuiltInOps::VmeBlockMotionEstimateIntel, "block_motion_estimate_intel") {
}
@@ -250,7 +250,7 @@ class BuiltInOp<EBuiltInOps::VmeBlockMotionEstimateIntel> : public VmeBuiltinDis
class AdvancedVmeBuiltinDispatchInfoBuilder : public VmeBuiltinDispatchInfoBuilder {
public:
AdvancedVmeBuiltinDispatchInfoBuilder(BuiltIns &kernelsLib, Device &device, EBuiltInOps::Type builtinOp,
AdvancedVmeBuiltinDispatchInfoBuilder(BuiltIns &kernelsLib, ClDevice &device, EBuiltInOps::Type builtinOp,
const char *kernelName)
: VmeBuiltinDispatchInfoBuilder(kernelsLib, device, builtinOp,
kernelName) {
@@ -442,7 +442,7 @@ class AdvancedVmeBuiltinDispatchInfoBuilder : public VmeBuiltinDispatchInfoBuild
template <>
class BuiltInOp<EBuiltInOps::VmeBlockAdvancedMotionEstimateCheckIntel> : public AdvancedVmeBuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: AdvancedVmeBuiltinDispatchInfoBuilder(kernelsLib, device, EBuiltInOps::VmeBlockAdvancedMotionEstimateCheckIntel,
"block_advanced_motion_estimate_check_intel") {
}
@@ -466,7 +466,7 @@ class BuiltInOp<EBuiltInOps::VmeBlockAdvancedMotionEstimateCheckIntel> : public
template <>
class BuiltInOp<EBuiltInOps::VmeBlockAdvancedMotionEstimateBidirectionalCheckIntel> : public AdvancedVmeBuiltinDispatchInfoBuilder {
public:
BuiltInOp(BuiltIns &kernelsLib, Device &device)
BuiltInOp(BuiltIns &kernelsLib, ClDevice &device)
: AdvancedVmeBuiltinDispatchInfoBuilder(kernelsLib, device, EBuiltInOps::VmeBlockAdvancedMotionEstimateBidirectionalCheckIntel,
"block_advanced_motion_estimate_bidirectional_check_intel") {
}

View File

@@ -226,6 +226,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
CommandStreamReceiver *getBcsCommandStreamReceiver() const;
MOCKABLE_VIRTUAL CommandStreamReceiver &getCommandStreamReceiverByCommandType(cl_command_type cmdType) const;
Device &getDevice() const noexcept;
ClDevice &getClDevice() const { return *device; }
Context &getContext() const { return *context; }
Context *getContextPtr() const { return context; }
EngineControl &getGpgpuEngine() const { return *gpgpuEngine; }

View File

@@ -116,7 +116,7 @@ void CommandQueueHw<Family>::dispatchAuxTranslationBuiltin(MultiDispatchInfo &mu
return;
}
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::AuxTranslation, getDevice());
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::AuxTranslation, getClDevice());
auto &auxTranslationBuilder = static_cast<BuiltInOp<EBuiltInOps::AuxTranslation> &>(builder);
BuiltinOpParams dispatchParams;

View File

@@ -64,7 +64,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface *(&surfaces)[surfaceCount
forceDispatchScheduler(multiDispatchInfo);
} else {
if (kernel->isAuxTranslationRequired()) {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::AuxTranslation, getDevice());
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::AuxTranslation, getClDevice());
builtInLock.takeOwnership(builder, this->context);
kernel->fillWithBuffersForAuxTranslation(memObjsForAuxTranslation);
multiDispatchInfo.setMemObjsForAuxTranslation(memObjsForAuxTranslation);
@@ -1111,7 +1111,7 @@ void CommandQueueHw<GfxFamily>::dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dis
enqueueBlit<cmdType>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blocking);
} else {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(builtInOperation,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);
builder.buildDispatchInfos(dispatchInfo);

View File

@@ -37,7 +37,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBufferToImage(
}
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOpsType,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);
MemObjSurface srcBufferSurf(srcBuffer);

View File

@@ -33,7 +33,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyImage(
cl_event *event) {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::CopyImageToImage3d,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);
MemObjSurface srcImgSurf(srcImage);

View File

@@ -36,7 +36,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyImageToBuffer(
eBuiltInOpsType = EBuiltInOps::CopyImage3dToBufferStateless;
}
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOpsType,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);
MemObjSurface srcImgSurf(srcImage);

View File

@@ -51,7 +51,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueFillBuffer(
}
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOps,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);

View File

@@ -31,7 +31,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueFillImage(
cl_event *event) {
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::FillImage3d,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);
MemObjSurface dstImgSurf(image);

View File

@@ -459,7 +459,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemFill(void *svmPtr,
}
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(builtInType,
this->getDevice());
this->getClDevice());
BuiltInOwnershipWrapper builtInLock(builder, this->context);

View File

@@ -32,6 +32,7 @@ class MemoryManager;
class SharingFunctions;
class SVMAllocsManager;
class SchedulerKernel;
class Program;
template <>
struct OpenCLObjectMapper<_cl_context> {
@@ -161,6 +162,16 @@ class Context : public BaseObject<_cl_context> {
}
protected:
struct BuiltInKernel {
const char *pSource = nullptr;
Program *pProgram = nullptr;
std::once_flag programIsInitialized; // guard for creating+building the program
Kernel *pKernel = nullptr;
BuiltInKernel() {
}
};
Context(void(CL_CALLBACK *pfnNotify)(const char *, const void *, size_t, void *) = nullptr,
void *userData = nullptr);

View File

@@ -17,8 +17,7 @@ CreateFromILFunc createFromIL = Program::createFromIL<Program>;
template Program *Program::create<Program>(Context *, const ClDeviceVector &, const size_t *, const unsigned char **, cl_int *, cl_int &);
template Program *Program::create<Program>(cl_context, cl_uint, const char **, const size_t *, cl_int &);
template Program *Program::create<Program>(const char *, Context *, ClDevice &, bool, cl_int *);
template Program *Program::create<Program>(const char *, Context *, Device &, bool, cl_int *);
template Program *Program::create<Program>(const char *, Context *, const ClDeviceVector &, bool, cl_int *);
template Program *Program::createFromIL<Program>(Context *, const void *, size_t length, cl_int &);
template Program *Program::createFromGenBinary<Program>(ExecutionEnvironment &executionEnvironment, Context *context, const void *binary, size_t size, bool isBuiltIn, cl_int *errcodeRet, Device *device);
} // namespace NEO

View File

@@ -88,7 +88,7 @@ template <typename T>
T *Program::create(
const char *nullTerminatedString,
Context *context,
ClDevice &device,
const ClDeviceVector &deviceVector,
bool isBuiltIn,
cl_int *errcodeRet) {
cl_int retVal = CL_SUCCESS;
@@ -99,8 +99,6 @@ T *Program::create(
}
if (retVal == CL_SUCCESS) {
ClDeviceVector deviceVector;
deviceVector.push_back(&device);
program = new T(context, isBuiltIn, deviceVector);
program->sourceCode = nullTerminatedString;
program->createdFrom = CreatedFrom::SOURCE;
@@ -113,16 +111,6 @@ T *Program::create(
return program;
}
template <typename T>
T *Program::create(
const char *nullTerminatedString,
Context *context,
Device &device,
bool isBuiltIn,
cl_int *errcodeRet) {
return Program::create<T>(nullTerminatedString, context, *device.getSpecializedDevice<ClDevice>(), isBuiltIn, errcodeRet);
}
template <typename T>
T *Program::createFromGenBinary(
ExecutionEnvironment &executionEnvironment,

View File

@@ -103,15 +103,7 @@ class Program : public BaseObject<_cl_program> {
static T *create(
const char *nullTerminatedString,
Context *context,
ClDevice &device,
bool isBuiltIn,
cl_int *errcodeRet);
template <typename T = Program>
static T *create(
const char *nullTerminatedString,
Context *context,
Device &device,
const ClDeviceVector &deviceVector,
bool isBuiltIn,
cl_int *errcodeRet);