mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 14:02:58 +08:00
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:
committed by
sys_ocldev
parent
8778b5c302
commit
a5a5c94097
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)...);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
@@ -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") {
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -51,7 +51,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueFillBuffer(
|
||||
}
|
||||
|
||||
auto &builder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOps,
|
||||
this->getDevice());
|
||||
this->getClDevice());
|
||||
|
||||
BuiltInOwnershipWrapper builtInLock(builder, this->context);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user