diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index f263620599..cc4df10349 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -86,9 +86,9 @@ CommandQueue::CommandQueue(Context *context, ClDevice *device, const cl_queue_pr if (device) { auto &hwInfo = device->getHardwareInfo(); auto &gfxCoreHelper = device->getGfxCoreHelper(); - auto productHelper = ProductHelper::get(hwInfo.platform.eProductFamily); + auto &productHelper = device->getProductHelper(); - bcsAllowed = productHelper->isBlitterFullySupported(hwInfo) && + bcsAllowed = productHelper.isBlitterFullySupported(hwInfo) && gfxCoreHelper.isSubDeviceEngineSupported(hwInfo, device->getDeviceBitfield(), aub_stream::EngineType::ENGINE_BCS); if (bcsAllowed || device->getDefaultEngine().commandStreamReceiver->peekTimestampPacketWriteEnabled()) { @@ -182,7 +182,7 @@ void CommandQueue::initializeGpgpu() const { void CommandQueue::initializeGpgpuInternals() const { auto &hwInfo = device->getDevice().getHardwareInfo(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + auto &productHelper = device->getProductHelper(); if (device->getDevice().getDebugger() && !this->gpgpuEngine->commandStreamReceiver->getDebugSurfaceAllocation()) { auto maxDbgSurfaceSize = NEO::SipKernel::getSipKernel(device->getDevice()).getStateSaveAreaSize(&device->getDevice()); @@ -918,9 +918,8 @@ size_t CommandQueue::estimateTimestampPacketNodesCount(const MultiDispatchInfo & bool CommandQueue::bufferCpuCopyAllowed(Buffer *buffer, cl_command_type commandType, cl_bool blocking, size_t size, void *ptr, cl_uint numEventsInWaitList, const cl_event *eventWaitList) { - const auto &hwInfo = device->getHardwareInfo(); - const auto &productHelper = ProductHelper::get(hwInfo.platform.eProductFamily); - if (CL_COMMAND_READ_BUFFER == commandType && productHelper->isCpuCopyNecessary(ptr, buffer->getMemoryManager())) { + auto &productHelper = device->getProductHelper(); + if (CL_COMMAND_READ_BUFFER == commandType && productHelper.isCpuCopyNecessary(ptr, buffer->getMemoryManager())) { return true; } @@ -1019,8 +1018,8 @@ bool CommandQueue::blitEnqueueAllowed(const CsrSelectionArgs &args) const { bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *region, const Image &image) const { const auto &hwInfo = device->getHardwareInfo(); - const auto &productHelper = ProductHelper::get(hwInfo.platform.eProductFamily); - auto blitEnqueueImageAllowed = productHelper->isBlitterForImagesSupported(); + auto &productHelper = device->getProductHelper(); + auto blitEnqueueImageAllowed = productHelper.isBlitterForImagesSupported(); if (DebugManager.flags.EnableBlitterForEnqueueImageOperations.get() != -1) { blitEnqueueImageAllowed = DebugManager.flags.EnableBlitterForEnqueueImageOperations.get(); @@ -1033,7 +1032,7 @@ bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *r auto isTile64 = defaultGmm->gmmResourceInfo->getResourceFlags()->Info.Tile64; auto imageType = image.getImageDesc().image_type; if (isTile64 && (imageType == CL_MEM_OBJECT_IMAGE3D)) { - blitEnqueueImageAllowed &= productHelper->isTile64With3DSurfaceOnBCSSupported(hwInfo); + blitEnqueueImageAllowed &= productHelper.isTile64With3DSurfaceOnBCSSupported(hwInfo); } } @@ -1185,7 +1184,7 @@ void CommandQueue::assignDataToOverwrittenBcsNode(TagNodeBase *node) { bool CommandQueue::isWaitForTimestampsEnabled() const { const auto &gfxCoreHelper = getDevice().getGfxCoreHelper(); - const auto &productHelper = *ProductHelper::get(getDevice().getHardwareInfo().platform.eProductFamily); + auto &productHelper = getDevice().getProductHelper(); auto enabled = CommandQueue::isTimestampWaitEnabled(); enabled &= gfxCoreHelper.isTimestampWaitSupportedForQueues(); enabled &= !productHelper.isDcFlushAllowed(); diff --git a/opencl/source/command_queue/enqueue_common.h b/opencl/source/command_queue/enqueue_common.h index 320aac9f09..2edb0891b3 100644 --- a/opencl/source/command_queue/enqueue_common.h +++ b/opencl/source/command_queue/enqueue_common.h @@ -181,12 +181,12 @@ cl_int CommandQueueHw::enqueueHandler(Surface **surfacesForResidency, const bool enqueueWithBlitAuxTranslation = isBlitAuxTranslationRequired(multiDispatchInfo); const auto &hwInfo = this->getDevice().getHardwareInfo(); - const auto &productHelper = ProductHelper::get(hwInfo.platform.eProductFamily); + auto &productHelper = getDevice().getProductHelper(); bool canUsePipeControlInsteadOfSemaphoresForOnCsrDependencies = false; if (computeCommandStreamReceiver.peekTimestampPacketWriteEnabled()) { canUsePipeControlInsteadOfSemaphoresForOnCsrDependencies = this->peekLatestSentEnqueueOperation() == EnqueueProperties::Operation::GpuKernel && - productHelper->isResolveDependenciesByPipeControlsSupported(hwInfo, this->isOOQEnabled()); + productHelper.isResolveDependenciesByPipeControlsSupported(hwInfo, this->isOOQEnabled()); if (false == clearDependenciesForSubCapture && false == canUsePipeControlInsteadOfSemaphoresForOnCsrDependencies) { eventsRequest.fillCsrDependenciesForTimestampPacketContainer(csrDeps, computeCommandStreamReceiver, CsrDependencies::DependenciesType::OnCsr); diff --git a/opencl/source/command_queue/gpgpu_walker_base.inl b/opencl/source/command_queue/gpgpu_walker_base.inl index b1dda219dd..02df536e6a 100644 --- a/opencl/source/command_queue/gpgpu_walker_base.inl +++ b/opencl/source/command_queue/gpgpu_walker_base.inl @@ -169,6 +169,8 @@ size_t EnqueueOperation::getTotalSizeRequiredCS(uint32_t eventType, c size_t expectedSizeCS = 0; auto &hwInfo = commandQueue.getDevice().getHardwareInfo(); auto &gfxCoreHelper = commandQueue.getDevice().getGfxCoreHelper(); + auto &productHelper = commandQueue.getDevice().getProductHelper(); + auto &commandQueueHw = static_cast &>(commandQueue); if (blitEnqueue) { @@ -189,7 +191,7 @@ size_t EnqueueOperation::getTotalSizeRequiredCS(uint32_t eventType, c if (commandQueue.getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) { expectedSizeCS += TimestampPacketHelper::getRequiredCmdStreamSize(csrDeps); expectedSizeCS += EnqueueOperation::getSizeRequiredForTimestampPacketWrite(); - if (ProductHelper::get(hwInfo.platform.eProductFamily)->isResolveDependenciesByPipeControlsSupported(hwInfo, commandQueue.isOOQEnabled())) { + if (productHelper.isResolveDependenciesByPipeControlsSupported(hwInfo, commandQueue.isOOQEnabled())) { expectedSizeCS += MemorySynchronizationCommands::getSizeForSingleBarrier(false); } if (isMarkerWithProfiling) { diff --git a/opencl/source/context/context.cpp b/opencl/source/context/context.cpp index 3ec69a2036..026ceae801 100644 --- a/opencl/source/context/context.cpp +++ b/opencl/source/context/context.cpp @@ -478,8 +478,7 @@ bool Context::BufferPoolAllocator::isAggregatedSmallBuffersEnabled(Context *cont bool isSupportedForSingleDeviceContexts = false; bool isSupportedForAllContexts = false; if (context->getNumDevices() > 0) { - auto &hwInfo = context->getDevices()[0]->getHardwareInfo(); - auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + auto &productHelper = context->getDevices()[0]->getProductHelper(); isSupportedForSingleDeviceContexts = productHelper.isBufferPoolAllocatorSupported(); } diff --git a/opencl/source/helpers/hardware_commands_helper_base.inl b/opencl/source/helpers/hardware_commands_helper_base.inl index a3e70a4353..ed55d8de71 100644 --- a/opencl/source/helpers/hardware_commands_helper_base.inl +++ b/opencl/source/helpers/hardware_commands_helper_base.inl @@ -142,7 +142,7 @@ size_t HardwareCommandsHelper::sendInterfaceDescriptorData( EncodeDispatchKernel::setGrfInfo(&interfaceDescriptor, kernelDescriptor.kernelAttributes.numGrfRequired, sizeCrossThreadData, sizePerThreadData, hardwareInfo); - auto &productHelper = *ProductHelper::get(hardwareInfo.platform.eProductFamily); + auto &productHelper = device.getProductHelper(); productHelper.updateIddCommand(&interfaceDescriptor, kernelDescriptor.kernelAttributes.numGrfRequired, kernelDescriptor.kernelAttributes.threadArbitrationPolicy); diff --git a/opencl/source/kernel/kernel.cpp b/opencl/source/kernel/kernel.cpp index b88de768c2..202282f2de 100644 --- a/opencl/source/kernel/kernel.cpp +++ b/opencl/source/kernel/kernel.cpp @@ -73,7 +73,7 @@ Kernel::Kernel(Program *programArg, const KernelInfo &kernelInfoArg, ClDevice &c imageTransformer.reset(new ImageTransformer); auto &deviceInfo = getDevice().getDevice().getDeviceInfo(); if (kernelInfoArg.kernelDescriptor.kernelAttributes.simdSize == 1u) { - auto &productHelper = *ProductHelper::get(getHardwareInfo().platform.eProductFamily); + auto &productHelper = getDevice().getProductHelper(); maxKernelWorkGroupSize = productHelper.getMaxThreadsForWorkgroupInDSSOrSS(getHardwareInfo(), static_cast(deviceInfo.maxNumEUsPerSubSlice), static_cast(deviceInfo.maxNumEUsPerDualSubSlice)); } else { maxKernelWorkGroupSize = static_cast(deviceInfo.maxWorkGroupSize); @@ -1949,7 +1949,7 @@ std::unique_ptr Kernel::fillWithKernelObjsForAuxTra } } } - const auto &productHelper = *ProductHelper::get(getDevice().getHardwareInfo().platform.eProductFamily); + const auto &productHelper = getDevice().getProductHelper(); if (productHelper.allowStatelessCompression(getDevice().getHardwareInfo())) { for (auto gfxAllocation : kernelUnifiedMemoryGfxAllocations) { if (gfxAllocation->isCompressionEnabled()) { @@ -2273,7 +2273,7 @@ bool Kernel::requiresCacheFlushCommand(const CommandQueue &commandQueue) const { } void Kernel::updateAuxTranslationRequired() { - const auto &productHelper = *ProductHelper::get(getDevice().getHardwareInfo().platform.eProductFamily); + const auto &productHelper = getDevice().getProductHelper(); if (productHelper.allowStatelessCompression(getDevice().getHardwareInfo())) { if (hasDirectStatelessAccessToHostMemory() || hasIndirectStatelessAccessToHostMemory() || diff --git a/opencl/source/mem_obj/buffer.cpp b/opencl/source/mem_obj/buffer.cpp index feece3d728..3dc73b0834 100644 --- a/opencl/source/mem_obj/buffer.cpp +++ b/opencl/source/mem_obj/buffer.cpp @@ -182,7 +182,7 @@ bool inline copyHostPointer(Buffer *buffer, auto context = buffer->getContext(); auto &device = context->getDevice(0u)->getDevice(); auto &hwInfo = device.getHardwareInfo(); - auto productHelper = ProductHelper::get(hwInfo.platform.eProductFamily); + auto &productHelper = device.getProductHelper(); auto &osInterface = device.getRootDeviceEnvironment().osInterface; bool isLockable = true; @@ -193,7 +193,7 @@ bool inline copyHostPointer(Buffer *buffer, bool copyOnCpuAllowed = implicitScalingEnabled == false && size <= Buffer::maxBufferSizeForCopyOnCpu && isCompressionEnabled == false && - productHelper->getLocalMemoryAccessMode(hwInfo) != LocalMemoryAccessMode::CpuAccessDisallowed && + productHelper.getLocalMemoryAccessMode(hwInfo) != LocalMemoryAccessMode::CpuAccessDisallowed && isLockable; if (DebugManager.flags.CopyHostPtrOnCpu.get() != -1) { copyOnCpuAllowed = DebugManager.flags.CopyHostPtrOnCpu.get() == 1; @@ -206,7 +206,7 @@ bool inline copyHostPointer(Buffer *buffer, } else { auto blitMemoryToAllocationResult = BlitOperationResult::Unsupported; - if (productHelper->isBlitterFullySupported(hwInfo) && isLocalMemory) { + if (productHelper.isBlitterFullySupported(hwInfo) && isLocalMemory) { blitMemoryToAllocationResult = BlitHelperFunctions::blitMemoryToAllocation(device, memory, buffer->getOffset(), hostPtr, {size, 1, 1}); } diff --git a/opencl/source/program/printf_handler.cpp b/opencl/source/program/printf_handler.cpp index cf0ae0e763..9208f5bc09 100644 --- a/opencl/source/program/printf_handler.cpp +++ b/opencl/source/program/printf_handler.cpp @@ -49,7 +49,7 @@ void PrintfHandler::prepareDispatch(const MultiDispatchInfo &multiDispatchInfo) printfSurface = device.getMemoryManager()->allocateGraphicsMemoryWithProperties({rootDeviceIndex, printfSurfaceSize, AllocationType::PRINTF_SURFACE, device.getDeviceBitfield()}); auto &hwInfo = device.getHardwareInfo(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = device.getProductHelper(); MemoryTransferHelper::transferMemoryToAllocation(productHelper.isBlitCopyRequiredForLocalMemory(hwInfo, *printfSurface), device, printfSurface, 0, printfSurfaceInitialDataSizePtr.get(), @@ -80,7 +80,7 @@ bool PrintfHandler::printEnqueueOutput() { auto &hwInfo = device.getHardwareInfo(); auto usesStringMap = kernel->getDescriptor().kernelAttributes.usesStringMap(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = device.getProductHelper(); auto printfOutputBuffer = reinterpret_cast(printfSurface->getUnderlyingBuffer()); auto printfOutputSize = static_cast(printfSurface->getUnderlyingBufferSize()); std::unique_ptr printfOutputDecompressed; diff --git a/opencl/source/program/process_device_binary.cpp b/opencl/source/program/process_device_binary.cpp index c46582a6fa..8e140b978f 100644 --- a/opencl/source/program/process_device_binary.cpp +++ b/opencl/source/program/process_device_binary.cpp @@ -144,7 +144,7 @@ cl_int Program::linkBinary(Device *pDevice, const void *constantsInitData, size_ auto &kernHeapInfo = kernelInfo->heapInfo; auto segmentId = &kernelInfo - &kernelInfoArray[0]; auto &hwInfo = pDevice->getHardwareInfo(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = pDevice->getProductHelper(); MemoryTransferHelper::transferMemoryToAllocation(productHelper.isBlitCopyRequiredForLocalMemory(hwInfo, *kernelInfo->getGraphicsAllocation()), *pDevice, kernelInfo->getGraphicsAllocation(), 0, isaSegmentsForPatching[segmentId].hostPointer, static_cast(kernHeapInfo.KernelHeapSize)); diff --git a/opencl/source/program/program.cpp b/opencl/source/program/program.cpp index addad60375..e0028866a3 100644 --- a/opencl/source/program/program.cpp +++ b/opencl/source/program/program.cpp @@ -84,7 +84,7 @@ std::string Program::getInternalOptions() const { CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::hasBufferOffsetArg); } - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = pClDevice->getProductHelper(); if (productHelper.isForceEmuInt32DivRemSPWARequired(hwInfo)) { CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::forceEmuInt32DivRemSP); } diff --git a/opencl/source/sharings/d3d/d3d_texture.cpp b/opencl/source/sharings/d3d/d3d_texture.cpp index 4fab944025..2dce84071a 100644 --- a/opencl/source/sharings/d3d/d3d_texture.cpp +++ b/opencl/source/sharings/d3d/d3d_texture.cpp @@ -122,7 +122,7 @@ Image *D3DTexture::create2d(Context *context, D3DTexture2d *d3dTexture, cl_ } if (alloc->getDefaultGmm()->unifiedAuxTranslationCapable()) { - const auto &productHelper = *ProductHelper::get(hwInfo->platform.eProductFamily); + const auto &productHelper = rootDeviceEnvironment.getHelper(); alloc->getDefaultGmm()->isCompressionEnabled = productHelper.isPageTableManagerSupported(*hwInfo) ? memoryManager->mapAuxGpuVA(alloc) : true; } @@ -211,7 +211,7 @@ Image *D3DTexture::create3d(Context *context, D3DTexture3d *d3dTexture, cl_ imgInfo.surfaceFormat = &clSurfaceFormat->surfaceFormat; if (alloc->getDefaultGmm()->unifiedAuxTranslationCapable()) { - const auto &productHelper = *ProductHelper::get(hwInfo->platform.eProductFamily); + const auto &productHelper = rootDeviceEnvironment.getHelper(); alloc->getDefaultGmm()->isCompressionEnabled = productHelper.isPageTableManagerSupported(*hwInfo) ? memoryManager->mapAuxGpuVA(alloc) : true; } diff --git a/opencl/source/sharings/gl/windows/gl_texture_windows.cpp b/opencl/source/sharings/gl/windows/gl_texture_windows.cpp index e2dcb55981..38da368243 100644 --- a/opencl/source/sharings/gl/windows/gl_texture_windows.cpp +++ b/opencl/source/sharings/gl/windows/gl_texture_windows.cpp @@ -151,7 +151,7 @@ Image *GlTexture::createSharedGlTexture(Context *context, cl_mem_flags flags, cl if (texInfo.isAuxEnabled && alloc->getDefaultGmm()->unifiedAuxTranslationCapable()) { const auto &hwInfo = context->getDevice(0)->getHardwareInfo(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = context->getDevice(0)->getProductHelper(); alloc->getDefaultGmm()->isCompressionEnabled = productHelper.isPageTableManagerSupported(hwInfo) ? memoryManager->mapAuxGpuVA(alloc) : true; } diff --git a/opencl/source/sharings/unified/unified_image.cpp b/opencl/source/sharings/unified/unified_image.cpp index 1c9249e3a8..9cf763b898 100644 --- a/opencl/source/sharings/unified/unified_image.cpp +++ b/opencl/source/sharings/unified/unified_image.cpp @@ -43,7 +43,7 @@ Image *UnifiedImage::createSharedUnifiedImage(Context *context, cl_mem_flags fla auto &memoryManager = *context->getMemoryManager(); if (graphicsAllocation->getDefaultGmm()->unifiedAuxTranslationCapable()) { const auto &hwInfo = context->getDevice(0)->getHardwareInfo(); - const auto &productHelper = *ProductHelper::get(hwInfo.platform.eProductFamily); + const auto &productHelper = context->getDevice(0)->getProductHelper(); graphicsAllocation->getDefaultGmm()->isCompressionEnabled = productHelper.isPageTableManagerSupported(hwInfo) ? memoryManager.mapAuxGpuVA(graphicsAllocation) : true; } diff --git a/shared/source/os_interface/hw_info_config.h b/shared/source/os_interface/hw_info_config.h index 7593253a2c..c1481827a9 100644 --- a/shared/source/os_interface/hw_info_config.h +++ b/shared/source/os_interface/hw_info_config.h @@ -76,7 +76,7 @@ class ProductHelper { virtual uint32_t getMaxThreadsForWorkgroup(const HardwareInfo &hwInfo, uint32_t maxNumEUsPerSubSlice) const = 0; virtual void setForceNonCoherent(void *const commandPtr, const StateComputeModeProperties &properties) = 0; virtual void updateScmCommand(void *const commandPtr, const StateComputeModeProperties &properties) = 0; - virtual void updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) = 0; + virtual void updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) const = 0; virtual bool obtainBlitterPreference(const HardwareInfo &hwInfo) const = 0; virtual bool isBlitterFullySupported(const HardwareInfo &hwInfo) const = 0; virtual bool isPageTableManagerSupported(const HardwareInfo &hwInfo) const = 0; @@ -222,7 +222,7 @@ class ProductHelperHw : public ProductHelper { uint32_t getMaxThreadsForWorkgroup(const HardwareInfo &hwInfo, uint32_t maxNumEUsPerSubSlice) const override; void setForceNonCoherent(void *const commandPtr, const StateComputeModeProperties &properties) override; void updateScmCommand(void *const commandPtr, const StateComputeModeProperties &properties) override; - void updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) override; + void updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) const override; bool obtainBlitterPreference(const HardwareInfo &hwInfo) const override; bool isBlitterFullySupported(const HardwareInfo &hwInfo) const override; bool isPageTableManagerSupported(const HardwareInfo &hwInfo) const override; diff --git a/shared/source/os_interface/hw_info_config.inl b/shared/source/os_interface/hw_info_config.inl index dade1e393c..f0acb89711 100644 --- a/shared/source/os_interface/hw_info_config.inl +++ b/shared/source/os_interface/hw_info_config.inl @@ -177,7 +177,7 @@ template void ProductHelperHw::updateScmCommand(void *const commandPtr, const StateComputeModeProperties &properties) {} template -void ProductHelperHw::updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) {} +void ProductHelperHw::updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) const {} template bool ProductHelperHw::isPageTableManagerSupported(const HardwareInfo &hwInfo) const { diff --git a/shared/test/common/mocks/mock_hw_info_config.cpp b/shared/test/common/mocks/mock_hw_info_config.cpp index 9652080828..cb0279c58a 100644 --- a/shared/test/common/mocks/mock_hw_info_config.cpp +++ b/shared/test/common/mocks/mock_hw_info_config.cpp @@ -348,7 +348,7 @@ void ProductHelperHw::updateScmCommand(void *const commandPtr, con } template <> -void ProductHelperHw::updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) { +void ProductHelperHw::updateIddCommand(void *const commandPtr, uint32_t numGrf, int32_t threadArbitrationPolicy) const { } template <>