From 9cdd0574c1b38ccabcf80d0bd144448f2046519f Mon Sep 17 00:00:00 2001 From: Katarzyna Cencelewska Date: Tue, 28 Apr 2020 11:35:35 +0200 Subject: [PATCH] Move init of image builtins to separate function in level_zero Change-Id: I15879af545159da3646a6bd71bf0d952735b37aa Signed-off-by: Katarzyna Cencelewska --- .../source/builtin/builtin_functions_lib.h | 12 +++- .../builtin/builtin_functions_lib_impl.cpp | 66 ++++++++++++------- .../builtin/builtin_functions_lib_impl.h | 3 + level_zero/core/source/cmdlist/cmdlist_hw.inl | 12 ++-- level_zero/core/source/device/device_imp.cpp | 3 + 5 files changed, 63 insertions(+), 33 deletions(-) diff --git a/level_zero/core/source/builtin/builtin_functions_lib.h b/level_zero/core/source/builtin/builtin_functions_lib.h index f3c5073915..53cf1e2877 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib.h +++ b/level_zero/core/source/builtin/builtin_functions_lib.h @@ -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; diff --git a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp index 225721ead4..7e83645d18 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp +++ b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp @@ -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(ImageBuiltin::COUNT); builtId++) { + const char *builtinName = nullptr; + NEO::EBuiltInOps::Type builtin; + + switch (static_cast(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(func); return builtins[builtId]->func.get(); } +Kernel *BuiltinFunctionsLibImpl::getImageFunction(ImageBuiltin func) { + auto builtId = static_cast(func); + return imageBuiltins[builtId]->func.get(); +} void BuiltinFunctionsLibImpl::initPageFaultFunction() { pageFaultBuiltin = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "CopyBufferToBufferSideRegion"); diff --git a/level_zero/core/source/builtin/builtin_functions_lib_impl.h b/level_zero/core/source/builtin/builtin_functions_lib_impl.h index fc00221515..11d2f0965c 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib_impl.h +++ b/level_zero/core/source/builtin/builtin_functions_lib_impl.h @@ -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 loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName); protected: std::unique_ptr builtins[static_cast(Builtin::COUNT)]; + std::unique_ptr imageBuiltins[static_cast(ImageBuiltin::COUNT)]; std::unique_ptr pageFaultBuiltin; Device *device; diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 10e587f273..b84b4a0513 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -359,19 +359,19 @@ ze_result_t CommandListCoreFamily::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::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; diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index 8cbcd924df..f87d4b6e88 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -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());