mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-04 23:56:39 +08:00
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:
committed by
sys_ocldev
parent
9dab9a654d
commit
9cdd0574c1
@@ -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;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user