Move init of image builtins to separate function in level_zero

Change-Id: I15879af545159da3646a6bd71bf0d952735b37aa
Signed-off-by: Katarzyna Cencelewska <katarzyna.cencelewska@intel.com>
This commit is contained in:
Katarzyna Cencelewska
2020-04-28 11:35:35 +02:00
committed by sys_ocldev
parent 9dab9a654d
commit 9cdd0574c1
5 changed files with 63 additions and 33 deletions

View File

@@ -28,14 +28,18 @@ enum class Builtin : uint32_t {
CopyBufferToImage3d4Bytes,
CopyBufferToImage3d8Bytes,
CopyBufferToImage3dBytes,
CopyImage3dToBuffer16Bytes,
FillBufferImmediate,
FillBufferSSHOffset,
COUNT
};
enum class ImageBuiltin : uint32_t {
CopyImage3dToBuffer16Bytes = 0u,
CopyImage3dToBuffer2Bytes,
CopyImage3dToBuffer4Bytes,
CopyImage3dToBuffer8Bytes,
CopyImage3dToBufferBytes,
CopyImageRegion,
FillBufferImmediate,
FillBufferSSHOffset,
COUNT
};
@@ -45,7 +49,9 @@ struct BuiltinFunctionsLib {
NEO::BuiltIns *builtins);
virtual Kernel *getFunction(Builtin func) = 0;
virtual Kernel *getImageFunction(ImageBuiltin func) = 0;
virtual void initFunctions() = 0;
virtual void initImageFunctions() = 0;
virtual Kernel *getPageFaultFunction() = 0;
virtual void initPageFaultFunction() = 0;

View File

@@ -75,30 +75,6 @@ void BuiltinFunctionsLibImpl::initFunctions() {
builtinName = "CopyBufferToImage3dBytes";
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
break;
case Builtin::CopyImage3dToBuffer16Bytes:
builtinName = "CopyImage3dToBuffer16Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case Builtin::CopyImage3dToBuffer2Bytes:
builtinName = "CopyImage3dToBuffer2Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case Builtin::CopyImage3dToBuffer4Bytes:
builtinName = "CopyImage3dToBuffer4Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case Builtin::CopyImage3dToBuffer8Bytes:
builtinName = "CopyImage3dToBuffer8Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case Builtin::CopyImage3dToBufferBytes:
builtinName = "CopyImage3dToBufferBytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case Builtin::CopyImageRegion:
builtinName = "CopyImageToImage3d";
builtin = NEO::EBuiltInOps::CopyImageToImage3d;
break;
case Builtin::FillBufferImmediate:
builtinName = "FillBufferImmediate";
builtin = NEO::EBuiltInOps::FillBuffer;
@@ -115,10 +91,52 @@ void BuiltinFunctionsLibImpl::initFunctions() {
}
}
void BuiltinFunctionsLibImpl::initImageFunctions() {
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
const char *builtinName = nullptr;
NEO::EBuiltInOps::Type builtin;
switch (static_cast<ImageBuiltin>(builtId)) {
case ImageBuiltin::CopyImage3dToBuffer16Bytes:
builtinName = "CopyImage3dToBuffer16Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case ImageBuiltin::CopyImage3dToBuffer2Bytes:
builtinName = "CopyImage3dToBuffer2Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case ImageBuiltin::CopyImage3dToBuffer4Bytes:
builtinName = "CopyImage3dToBuffer4Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case ImageBuiltin::CopyImage3dToBuffer8Bytes:
builtinName = "CopyImage3dToBuffer8Bytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case ImageBuiltin::CopyImage3dToBufferBytes:
builtinName = "CopyImage3dToBufferBytes";
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
break;
case ImageBuiltin::CopyImageRegion:
builtinName = "CopyImageToImage3d";
builtin = NEO::EBuiltInOps::CopyImageToImage3d;
break;
default:
continue;
};
imageBuiltins[builtId] = loadBuiltIn(builtin, builtinName);
}
}
Kernel *BuiltinFunctionsLibImpl::getFunction(Builtin func) {
auto builtId = static_cast<uint32_t>(func);
return builtins[builtId]->func.get();
}
Kernel *BuiltinFunctionsLibImpl::getImageFunction(ImageBuiltin func) {
auto builtId = static_cast<uint32_t>(func);
return imageBuiltins[builtId]->func.get();
}
void BuiltinFunctionsLibImpl::initPageFaultFunction() {
pageFaultBuiltin = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "CopyBufferToBufferSideRegion");

View File

@@ -28,13 +28,16 @@ struct BuiltinFunctionsLibImpl : BuiltinFunctionsLib {
}
Kernel *getFunction(Builtin func) override;
Kernel *getImageFunction(ImageBuiltin func) override;
Kernel *getPageFaultFunction() override;
void initFunctions() override;
void initImageFunctions() override;
void initPageFaultFunction() override;
std::unique_ptr<BuiltinFunctionsLibImpl::BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName);
protected:
std::unique_ptr<BuiltinData> builtins[static_cast<uint32_t>(Builtin::COUNT)];
std::unique_ptr<BuiltinData> imageBuiltins[static_cast<uint32_t>(ImageBuiltin::COUNT)];
std::unique_ptr<BuiltinData> pageFaultBuiltin;
Device *device;

View File

@@ -359,19 +359,19 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendImageCopyToMemory(void *
default:
UNRECOVERABLE_IF(true);
case 1u:
builtinKernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImage3dToBufferBytes);
builtinKernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImage3dToBufferBytes);
break;
case 2u:
builtinKernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImage3dToBuffer2Bytes);
builtinKernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImage3dToBuffer2Bytes);
break;
case 4u:
builtinKernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImage3dToBuffer4Bytes);
builtinKernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImage3dToBuffer4Bytes);
break;
case 8u:
builtinKernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImage3dToBuffer8Bytes);
builtinKernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImage3dToBuffer8Bytes);
break;
case 16u:
builtinKernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImage3dToBuffer16Bytes);
builtinKernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImage3dToBuffer16Bytes);
break;
}
@@ -440,7 +440,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendImageCopyRegion(ze_image
uint32_t numWaitEvents,
ze_event_handle_t *phWaitEvents) {
auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::CopyImageRegion);
auto kernel = device->getBuiltinFunctionsLib()->getImageFunction(ImageBuiltin::CopyImageRegion);
auto dstImage = L0::Image::fromHandle(hDstImage);
auto srcImage = L0::Image::fromHandle(hSrcImage);
cl_int4 srcOffset, dstOffset;

View File

@@ -576,6 +576,9 @@ Device *Device::create(DriverHandle *driverHandle, NEO::Device *neoDevice) {
if (neoDevice->getCompilerInterface()) {
device->getBuiltinFunctionsLib()->initFunctions();
device->getBuiltinFunctionsLib()->initPageFaultFunction();
if (device->getHwInfo().capabilityTable.supportsImages) {
device->getBuiltinFunctionsLib()->initImageFunctions();
}
}
auto supportDualStorageSharedMemory = device->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(device->neoDevice->getRootDeviceIndex());