/* * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/aub_mem_dump/aub_mem_dump.h" #include "shared/source/command_stream/stream_properties.h" #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/direct_submission/direct_submission_controller.h" #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/helpers/cache_policy.h" #include "shared/source/helpers/constants.h" #include "shared/source/helpers/definitions/indirect_detection_versions.h" #include "shared/source/helpers/hw_info.h" #include "shared/source/helpers/hw_mapper.h" #include "shared/source/helpers/local_memory_access_modes.h" #include "shared/source/helpers/preamble.h" #include "shared/source/kernel/kernel_descriptor.h" #include "shared/source/kernel/kernel_properties.h" #include "shared/source/memory_manager/allocation_properties.h" #include "shared/source/memory_manager/graphics_allocation.h" #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/product_helper.h" #include "shared/source/os_interface/product_helper_hw.h" #include "shared/source/release_helper/release_helper.h" #include "shared/source/unified_memory/usm_memory_support.h" #include "aubstream/engine_node.h" #include "ocl_igc_shared/indirect_access_detection/version.h" #include #include namespace NEO { template int ProductHelperHw::configureHardwareCustom(HardwareInfo *hwInfo, OSInterface *osIface) const { enableCompression(hwInfo); enableBlitterOperationsSupport(hwInfo); return 0; } template std::vector ProductHelperHw::getKernelSupportedThreadArbitrationPolicies() const { using GfxFamily = typename HwMapper::GfxFamily; return PreambleHelper::getSupportedThreadArbitrationPolicies(); } template void ProductHelperHw::adjustPlatformForProductFamily(HardwareInfo *hwInfo) {} template void ProductHelperHw::adjustSamplerState(void *sampler, const HardwareInfo &hwInfo) const { using SAMPLER_STATE = typename HwMapper::GfxFamily::SAMPLER_STATE; auto samplerState = reinterpret_cast(sampler); if (debugManager.flags.ForceSamplerLowFilteringPrecision.get()) { samplerState->setLowQualityFilter(SAMPLER_STATE::LOW_QUALITY_FILTER_ENABLE); } } template bool ProductHelperHw::isTlbFlushRequired() const { bool tlbFlushRequired = true; if (debugManager.flags.ForceTlbFlush.get() != -1) { tlbFlushRequired = !!debugManager.flags.ForceTlbFlush.get(); } return tlbFlushRequired; } template bool ProductHelperHw::isDetectIndirectAccessInKernelSupported(const KernelDescriptor &kernelDescriptor, const bool isPrecompiled, const uint32_t precompiledKernelIndirectDetectionVersion) const { const bool isCMKernelHeuristic = kernelDescriptor.kernelAttributes.simdSize == 1; const bool isZebin = kernelDescriptor.kernelAttributes.binaryFormat == DeviceBinaryFormat::zebin; const auto currentIndirectDetectionVersion = isPrecompiled ? precompiledKernelIndirectDetectionVersion : INDIRECT_ACCESS_DETECTION_VERSION; bool indirectDetectionValid = false; if (isCMKernelHeuristic) { if (IndirectDetectionVersions::disabled == getRequiredDetectIndirectVersionVC()) { return false; } indirectDetectionValid = currentIndirectDetectionVersion >= getRequiredDetectIndirectVersionVC(); } else { if (IndirectDetectionVersions::disabled == getRequiredDetectIndirectVersion()) { return false; } indirectDetectionValid = currentIndirectDetectionVersion >= getRequiredDetectIndirectVersion(); } return isZebin && indirectDetectionValid; } template uint32_t ProductHelperHw::getRequiredDetectIndirectVersion() const { return IndirectDetectionVersions::requiredDetectIndirectVersionBindless; } template uint32_t ProductHelperHw::getRequiredDetectIndirectVersionVC() const { return IndirectDetectionVersions::requiredDetectIndirectVersionVectorCompiler; } template void ProductHelperHw::enableBlitterOperationsSupport(HardwareInfo *hwInfo) const { hwInfo->capabilityTable.blitterOperationsSupported = obtainBlitterPreference(*hwInfo); if (debugManager.flags.EnableBlitterOperationsSupport.get() != -1) { hwInfo->capabilityTable.blitterOperationsSupported = !!debugManager.flags.EnableBlitterOperationsSupport.get(); } } template uint64_t ProductHelperHw::getDeviceMemCapabilities() const { uint64_t capabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess; if (getConcurrentAccessMemCapabilitiesSupported(UsmAccessCapabilities::device)) { capabilities |= UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess; } return capabilities; } template uint64_t ProductHelperHw::getSingleDeviceSharedMemCapabilities() const { uint64_t capabilities = UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess; if (isKmdMigrationSupported() || getConcurrentAccessMemCapabilitiesSupported(UsmAccessCapabilities::sharedSingleDevice)) { capabilities |= UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess; } return capabilities; } template bool ProductHelperHw::getHostMemCapabilitiesSupported(const HardwareInfo *hwInfo) const { return true; } template uint64_t ProductHelperHw::getHostMemCapabilities(const HardwareInfo *hwInfo) const { bool supported = getHostMemCapabilitiesSupported(hwInfo); if (debugManager.flags.EnableHostUsmSupport.get() != -1) { supported = !!debugManager.flags.EnableHostUsmSupport.get(); } uint64_t capabilities = getHostMemCapabilitiesValue(); if (getConcurrentAccessMemCapabilitiesSupported(UsmAccessCapabilities::host)) { capabilities |= UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess; } return (supported ? capabilities : 0); } template uint64_t ProductHelperHw::getSharedSystemMemCapabilities(const HardwareInfo *hwInfo) const { bool supported = false; if (debugManager.flags.EnableSharedSystemUsmSupport.get() != -1) { supported = !!debugManager.flags.EnableSharedSystemUsmSupport.get(); } return (supported ? (UnifiedSharedMemoryFlags::access | UnifiedSharedMemoryFlags::atomicAccess | UnifiedSharedMemoryFlags::concurrentAccess | UnifiedSharedMemoryFlags::concurrentAtomicAccess) : 0); } template bool ProductHelperHw::getConcurrentAccessMemCapabilitiesSupported(UsmAccessCapabilities capability) const { auto supported = false; if (debugManager.flags.EnableUsmConcurrentAccessSupport.get() > 0) { auto capabilityBitset = std::bitset<4>(debugManager.flags.EnableUsmConcurrentAccessSupport.get()); supported = capabilityBitset.test(static_cast(capability)); } return supported; } template uint32_t ProductHelperHw::getDeviceMemoryMaxClkRate(const HardwareInfo &hwInfo, const OSInterface *osIface, uint32_t subDeviceIndex) const { return 0u; } template uint64_t ProductHelperHw::getDeviceMemoryPhysicalSizeInBytes(const OSInterface *osIface, uint32_t subDeviceIndex) const { return 0; } template uint64_t ProductHelperHw::getDeviceMemoryMaxBandWidthInBytesPerSecond(const HardwareInfo &hwInfo, const OSInterface *osIface, uint32_t subDeviceIndex) const { return 0; } template bool ProductHelperHw::overrideAllocationCacheable(const AllocationData &allocationData) const { return false; } template bool ProductHelperHw::isAdditionalStateBaseAddressWARequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isMaxThreadsForWorkgroupWARequired(const HardwareInfo &hwInfo) const { return false; } template uint32_t ProductHelperHw::getMaxThreadsForWorkgroup(const HardwareInfo &hwInfo, uint32_t maxNumEUsPerSubSlice) const { uint32_t numThreadsPerEU = hwInfo.gtSystemInfo.ThreadCount / hwInfo.gtSystemInfo.EUCount; return maxNumEUsPerSubSlice * numThreadsPerEU; } template void ProductHelperHw::setForceNonCoherent(void *const commandPtr, const StateComputeModeProperties &properties) const {} template void ProductHelperHw::updateScmCommand(void *const commandPtr, const StateComputeModeProperties &properties) const {} template bool ProductHelperHw::isPageTableManagerSupported(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::overrideGfxPartitionLayoutForWsl() const { return false; } template uint32_t ProductHelperHw::getHwRevIdFromStepping(uint32_t stepping, const HardwareInfo &hwInfo) const { return CommonConstants::invalidStepping; } template uint32_t ProductHelperHw::getSteppingFromHwRevId(const HardwareInfo &hwInfo) const { return CommonConstants::invalidStepping; } template uint32_t ProductHelperHw::getAubStreamSteppingFromHwRevId(const HardwareInfo &hwInfo) const { switch (getSteppingFromHwRevId(hwInfo)) { default: case REVISION_A0: case REVISION_A1: case REVISION_A3: return AubMemDump::SteppingValues::A; case REVISION_B: return AubMemDump::SteppingValues::B; case REVISION_C: return AubMemDump::SteppingValues::C; case REVISION_D: return AubMemDump::SteppingValues::D; case REVISION_K: return AubMemDump::SteppingValues::K; } } template std::optional ProductHelperHw::getAubStreamProductFamily() const { return std::nullopt; }; template bool ProductHelperHw::isDefaultEngineTypeAdjustmentRequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isDisableOverdispatchAvailable(const HardwareInfo &hwInfo) const { return getFrontEndPropertyDisableOverDispatchSupport(); } template bool ProductHelperHw::allowCompression(const HardwareInfo &hwInfo) const { return true; } template LocalMemoryAccessMode ProductHelperHw::getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const { return LocalMemoryAccessMode::defaultMode; } template LocalMemoryAccessMode ProductHelperHw::getLocalMemoryAccessMode(const HardwareInfo &hwInfo) const { switch (static_cast(debugManager.flags.ForceLocalMemoryAccessMode.get())) { case LocalMemoryAccessMode::defaultMode: case LocalMemoryAccessMode::cpuAccessAllowed: case LocalMemoryAccessMode::cpuAccessDisallowed: return static_cast(debugManager.flags.ForceLocalMemoryAccessMode.get()); } return getDefaultLocalMemoryAccessMode(hwInfo); } template bool ProductHelperHw::isAssignEngineRoundRobinSupported() const { return false; } template std::pair ProductHelperHw::isPipeControlPriorToNonPipelinedStateCommandsWARequired(const HardwareInfo &hwInfo, bool isRcs, const ReleaseHelper *releaseHelper) const { auto isBasicWARequired = false; if (releaseHelper) { isBasicWARequired = releaseHelper->isPipeControlPriorToNonPipelinedStateCommandsWARequired(); } auto isExtendedWARequired = false; if (debugManager.flags.ProgramExtendedPipeControlPriorToNonPipelinedStateCommand.get() != -1) { isExtendedWARequired = debugManager.flags.ProgramExtendedPipeControlPriorToNonPipelinedStateCommand.get(); } return {isBasicWARequired, isExtendedWARequired}; } template bool ProductHelperHw::isAdditionalMediaSamplerProgrammingRequired() const { return false; } template bool ProductHelperHw::isInitialFlagsProgrammingRequired() const { return false; } template bool ProductHelperHw::isReturnedCmdSizeForMediaSamplerAdjustmentRequired() const { return false; } template bool ProductHelperHw::pipeControlWARequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::imagePitchAlignmentWARequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isDirectSubmissionSupported(ReleaseHelper *releaseHelper) const { if (releaseHelper) { return releaseHelper->isDirectSubmissionSupported(); } return false; } template bool ProductHelperHw::isDirectSubmissionConstantCacheInvalidationNeeded(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::restartDirectSubmissionForHostptrFree() const { return false; } template bool ProductHelperHw::isAdjustDirectSubmissionTimeoutOnThrottleAndAcLineStatusEnabled() const { return false; } template TimeoutParams ProductHelperHw::getDirectSubmissionControllerTimeoutParams(bool acLineConnected, QueueThrottle queueThrottle) const { TimeoutParams params{}; params.maxTimeout = std::chrono::microseconds{DirectSubmissionController::defaultTimeout}; params.timeout = std::chrono::microseconds{DirectSubmissionController::defaultTimeout}; params.timeoutDivisor = 1; params.directSubmissionEnabled = true; return params; } template bool ProductHelperHw::isForceEmuInt32DivRemSPWARequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::is3DPipelineSelectWARequired() const { return false; } template bool ProductHelperHw::isStorageInfoAdjustmentRequired() const { return false; } template bool ProductHelperHw::isBlitterForImagesSupported() const { return false; } template bool ProductHelperHw::isPageFaultSupported() const { return false; } template bool ProductHelperHw::blitEnqueuePreferred(bool isWriteToImageFromBuffer) const { return true; } template bool ProductHelperHw::isKmdMigrationSupported() const { return false; } template bool ProductHelperHw::isDisableScratchPagesSupported() const { return false; } template bool ProductHelperHw::isDcFlushAllowed() const { using GfxProduct = typename HwMapper::GfxProduct; bool dcFlushAllowed = GfxProduct::isDcFlushAllowed && !this->mitigateDcFlush(); if (debugManager.flags.AllowDcFlush.get() != -1) { dcFlushAllowed = debugManager.flags.AllowDcFlush.get(); } return dcFlushAllowed; } template bool ProductHelperHw::mitigateDcFlush() const { return false; } template bool ProductHelperHw::isDcFlushMitigated() const { using GfxProduct = typename HwMapper::GfxProduct; bool dcFlushAllowed = GfxProduct::isDcFlushAllowed; return this->isDcFlushAllowed() != dcFlushAllowed; } template bool ProductHelperHw::overrideUsageForDcFlushMitigation(AllocationType allocationType) const { return this->isDcFlushMitigated() && (this->overridePatToUCAndTwoWayCohForDcFlushMitigation(allocationType) || overridePatToUCAndOneWayCohForDcFlushMitigation(allocationType)); } template bool ProductHelperHw::overridePatToUCAndTwoWayCohForDcFlushMitigation(AllocationType allocationType) const { return this->isDcFlushMitigated() && (this->overrideCacheableForDcFlushMitigation(allocationType) || allocationType == AllocationType::timestampPacketTagBuffer || allocationType == AllocationType::tagBuffer || allocationType == AllocationType::gpuTimestampDeviceBuffer); } template bool ProductHelperHw::overridePatToUCAndOneWayCohForDcFlushMitigation(AllocationType allocationType) const { return this->isDcFlushMitigated() && (allocationType == AllocationType::internalHeap || allocationType == AllocationType::linearStream); } template bool ProductHelperHw::overrideCacheableForDcFlushMitigation(AllocationType allocationType) const { return this->isDcFlushMitigated() && (allocationType == AllocationType::externalHostPtr || allocationType == AllocationType::bufferHostMemory || allocationType == AllocationType::mapAllocation || allocationType == AllocationType::svmCpu || allocationType == AllocationType::svmZeroCopy || allocationType == AllocationType::internalHostMemory || allocationType == AllocationType::printfSurface); } template uint32_t ProductHelperHw::computeMaxNeededSubSliceSpace(const HardwareInfo &hwInfo) const { return hwInfo.gtSystemInfo.MaxSubSlicesSupported; } template bool ProductHelperHw::getUuid(NEO::DriverModel *driverModel, const uint32_t subDeviceCount, const uint32_t deviceIndex, std::array &uuid) const { return false; } template bool ProductHelperHw::isFlushTaskAllowed() const { return true; } template bool ProductHelperHw::isSystolicModeConfigurable(const HardwareInfo &hwInfo) const { return getPipelineSelectPropertySystolicModeSupport(); } template bool ProductHelperHw::isCopyEngineSelectorEnabled(const HardwareInfo &hwInfo) const { return true; } template bool ProductHelperHw::isGlobalFenceInCommandStreamRequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isGlobalFenceInDirectSubmissionRequired(const HardwareInfo &hwInfo) const { return ProductHelperHw::isGlobalFenceInCommandStreamRequired(hwInfo); }; template uint32_t ProductHelperHw::getThreadEuRatioForScratch(const HardwareInfo &hwInfo) const { return 8u; } template size_t ProductHelperHw::getSvmCpuAlignment() const { return MemoryConstants::pageSize2M; } template bool ProductHelperHw::isComputeDispatchAllWalkerEnableInCfeStateRequired(const HardwareInfo &hwInfo) const { return getFrontEndPropertyComputeDispatchAllWalkerSupport(); } template bool ProductHelperHw::isVmBindPatIndexProgrammingSupported() const { return false; } template bool ProductHelperHw::isIpSamplingSupported(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isGrfNumReportedWithScm() const { if (debugManager.flags.ForceGrfNumProgrammingWithScm.get() != -1) { return debugManager.flags.ForceGrfNumProgrammingWithScm.get(); } return ProductHelperHw::getScmPropertyLargeGrfModeSupport(); } template bool ProductHelperHw::isThreadArbitrationPolicyReportedWithScm() const { if (debugManager.flags.ForceThreadArbitrationPolicyProgrammingWithScm.get() != -1) { return debugManager.flags.ForceThreadArbitrationPolicyProgrammingWithScm.get(); } return ProductHelperHw::getScmPropertyThreadArbitrationPolicySupport(); } template bool ProductHelperHw::isCooperativeEngineSupported(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isTilePlacementResourceWaRequired(const HardwareInfo &hwInfo) const { if (debugManager.flags.ForceTile0PlacementForTile1ResourcesWaActive.get() != -1) { return debugManager.flags.ForceTile0PlacementForTile1ResourcesWaActive.get(); } return false; } template bool ProductHelperHw::allowMemoryPrefetch(const HardwareInfo &hwInfo) const { if (debugManager.flags.EnableMemoryPrefetch.get() != -1) { return !!debugManager.flags.EnableMemoryPrefetch.get(); } return true; } template bool ProductHelperHw::isBcsReportWaRequired(const HardwareInfo &hwInfo) const { if (debugManager.flags.DoNotReportTile1BscWaActive.get() != -1) { return debugManager.flags.DoNotReportTile1BscWaActive.get(); } return false; } template bool ProductHelperHw::isBlitSplitEnqueueWARequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isBlitCopyRequiredForLocalMemory(const RootDeviceEnvironment &rootDeviceEnvironment, const GraphicsAllocation &allocation) const { auto &productHelper = rootDeviceEnvironment.getHelper(); auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo(); return allocation.isAllocatedInLocalMemoryPool() && (productHelper.getLocalMemoryAccessMode(hwInfo) == LocalMemoryAccessMode::cpuAccessDisallowed || !allocation.isAllocationLockable()); } template bool ProductHelperHw::isInitDeviceWithFirstSubmissionRequired(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isImplicitScalingSupported(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isCpuCopyNecessary(const void *ptr, MemoryManager *memoryManager) const { return false; } template bool ProductHelperHw::isUnlockingLockedPtrNecessary(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isAdjustWalkOrderAvailable(const ReleaseHelper *releaseHelper) const { if (releaseHelper) { return releaseHelper->isAdjustWalkOrderAvailable(); } return false; } template uint32_t ProductHelperHw::getL1CachePolicy(bool isDebuggerActive) const { return L1CachePolicyHelper::getL1CachePolicy(isDebuggerActive); } template void ProductHelperHw::adjustNumberOfCcs(HardwareInfo &hwInfo) const {} template bool ProductHelperHw::isPrefetcherDisablingInDirectSubmissionRequired() const { return true; } template bool ProductHelperHw::isStatefulAddressingModeSupported() const { return true; } template uint32_t ProductHelperHw::getNumberOfPartsInTileForConcurrentKernel(uint32_t ccsCount) const { return 1u; } template bool ProductHelperHw::isPlatformQuerySupported() const { return false; } template bool ProductHelperHw::isNonBlockingGpuSubmissionSupported() const { return false; } template bool ProductHelperHw::isResolveDependenciesByPipeControlsSupported(const HardwareInfo &hwInfo, bool isOOQ, TaskCountType queueTaskCount, const CommandStreamReceiver &queueCsr) const { constexpr bool enabled = false; if (debugManager.flags.ResolveDependenciesViaPipeControls.get() != -1) { return debugManager.flags.ResolveDependenciesViaPipeControls.get() == 1; } return enabled; } template void ProductHelperHw::fillScmPropertiesSupportStructureBase(StateComputeModePropertiesSupport &propertiesSupport) const { propertiesSupport.coherencyRequired = getScmPropertyCoherencyRequiredSupport(); propertiesSupport.threadArbitrationPolicy = isThreadArbitrationPolicyReportedWithScm(); propertiesSupport.largeGrfMode = isGrfNumReportedWithScm(); propertiesSupport.zPassAsyncComputeThreadLimit = getScmPropertyZPassAsyncComputeThreadLimitSupport(); propertiesSupport.pixelAsyncComputeThreadLimit = getScmPropertyPixelAsyncComputeThreadLimitSupport(); propertiesSupport.devicePreemptionMode = getScmPropertyDevicePreemptionModeSupport(); } template void ProductHelperHw::fillScmPropertiesSupportStructure(StateComputeModePropertiesSupport &propertiesSupport) const { fillScmPropertiesSupportStructureBase(propertiesSupport); } template void ProductHelperHw::fillScmPropertiesSupportStructureExtra(StateComputeModePropertiesSupport &propertiesSupport, const RootDeviceEnvironment &rootDeviceEnvironment) const {} template bool ProductHelperHw::getScmPropertyThreadArbitrationPolicySupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::threadArbitrationPolicy; } template bool ProductHelperHw::getScmPropertyCoherencyRequiredSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::coherencyRequired; } template bool ProductHelperHw::getScmPropertyZPassAsyncComputeThreadLimitSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::zPassAsyncComputeThreadLimit; } template bool ProductHelperHw::getScmPropertyPixelAsyncComputeThreadLimitSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::pixelAsyncComputeThreadLimit; } template bool ProductHelperHw::getScmPropertyLargeGrfModeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::largeGrfMode; } template bool ProductHelperHw::getScmPropertyDevicePreemptionModeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateComputeModeStateSupport::devicePreemptionMode; } template bool ProductHelperHw::getStateBaseAddressPropertyBindingTablePoolBaseAddressSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateBaseAddressStateSupport::bindingTablePoolBaseAddress; } template void ProductHelperHw::fillStateBaseAddressPropertiesSupportStructure(StateBaseAddressPropertiesSupport &propertiesSupport) const { propertiesSupport.bindingTablePoolBaseAddress = getStateBaseAddressPropertyBindingTablePoolBaseAddressSupport(); } template bool ProductHelperHw::getPreemptionDbgPropertyPreemptionModeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::PreemptionDebugSupport::preemptionMode; } template bool ProductHelperHw::getPreemptionDbgPropertyStateSipSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::PreemptionDebugSupport::stateSip; } template bool ProductHelperHw::getPreemptionDbgPropertyCsrSurfaceSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::PreemptionDebugSupport::csrSurface; } template bool ProductHelperHw::getFrontEndPropertyScratchSizeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::scratchSize; } template bool ProductHelperHw::getFrontEndPropertyPrivateScratchSizeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::privateScratchSize; } template bool ProductHelperHw::getFrontEndPropertyComputeDispatchAllWalkerSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::computeDispatchAllWalker; } template bool ProductHelperHw::getFrontEndPropertyDisableEuFusionSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::disableEuFusion; } template bool ProductHelperHw::getFrontEndPropertyDisableOverDispatchSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::disableOverdispatch; } template bool ProductHelperHw::getFrontEndPropertySingleSliceDispatchCcsModeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::FrontEndStateSupport::singleSliceDispatchCcsMode; } template void ProductHelperHw::fillFrontEndPropertiesSupportStructure(FrontEndPropertiesSupport &propertiesSupport, const HardwareInfo &hwInfo) const { propertiesSupport.computeDispatchAllWalker = isComputeDispatchAllWalkerEnableInCfeStateRequired(hwInfo); propertiesSupport.disableEuFusion = getFrontEndPropertyDisableEuFusionSupport(); propertiesSupport.disableOverdispatch = isDisableOverdispatchAvailable(hwInfo); propertiesSupport.singleSliceDispatchCcsMode = getFrontEndPropertySingleSliceDispatchCcsModeSupport(); } template bool ProductHelperHw::getPipelineSelectPropertyMediaSamplerDopClockGateSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::PipelineSelectStateSupport::mediaSamplerDopClockGate; } template bool ProductHelperHw::getPipelineSelectPropertySystolicModeSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::PipelineSelectStateSupport::systolicMode; } template void ProductHelperHw::fillPipelineSelectPropertiesSupportStructure(PipelineSelectPropertiesSupport &propertiesSupport, const HardwareInfo &hwInfo) const { propertiesSupport.mediaSamplerDopClockGate = getPipelineSelectPropertyMediaSamplerDopClockGateSupport(); propertiesSupport.systolicMode = isSystolicModeConfigurable(hwInfo); } template bool ProductHelperHw::isFusedEuDisabledForDpas(bool kernelHasDpasInstructions, const uint32_t *lws, const uint32_t *groupCount, const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::isCalculationForDisablingEuFusionWithDpasNeeded(const HardwareInfo &hwInfo) const { return false; } template bool ProductHelperHw::is48bResourceNeededForRayTracing() const { return true; } template bool ProductHelperHw::isLinearStoragePreferred(bool isImage1d, bool forceLinearStorage) const { if (debugManager.flags.ForceLinearImages.get() || forceLinearStorage || isImage1d) { return true; } return false; } template bool ProductHelperHw::isTranslationExceptionSupported() const { return false; } template uint32_t ProductHelperHw::getMaxNumSamplers() const { return 16u; } template bool ProductHelperHw::disableL3CacheForDebug(const HardwareInfo &) const { return false; } template bool ProductHelperHw::isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const { return false; } template bool ProductHelperHw::isResolvingSubDeviceIDNeeded(const ReleaseHelper *releaseHelper) const { if (releaseHelper) { return releaseHelper->isResolvingSubDeviceIDNeeded(); } return true; } template uint64_t ProductHelperHw::overridePatIndex(bool isUncachedType, uint64_t patIndex, AllocationType allocationType) const { return patIndex; } template std::vector ProductHelperHw::getSupportedNumGrfs(const ReleaseHelper *releaseHelper) const { if (releaseHelper) { return releaseHelper->getSupportedNumGrfs(); } return {128u}; } template aub_stream::EngineType ProductHelperHw::getDefaultCopyEngine() const { return aub_stream::EngineType::ENGINE_BCS; } template void ProductHelperHw::adjustEngineGroupType(EngineGroupType &engineGroupType) const {} template std::optional ProductHelperHw::getPreferredAllocationMethod(AllocationType allocationType) const { return {}; } template bool ProductHelperHw::isCachingOnCpuAvailable() const { return true; } template bool ProductHelperHw::isNewCoherencyModelSupported() const { return false; } template bool ProductHelperHw::supportReadOnlyAllocations() const { return false; } template bool ProductHelperHw::localDispatchSizeQuerySupported() const { return false; } template bool ProductHelperHw::isDeviceToHostCopySignalingFenceRequired() const { return false; } template size_t ProductHelperHw::getMaxFillPaternSizeForCopyEngine() const { return 4 * sizeof(uint32_t); } template bool ProductHelperHw::isAvailableExtendedScratch() const { return false; } template bool ProductHelperHw::isStagingBuffersEnabled() const { return false; } template uint32_t ProductHelperHw::getCacheLineSize() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::cacheLineSize; } template bool ProductHelperHw::supports2DBlockLoad() const { return false; } template bool ProductHelperHw::supports2DBlockStore() const { return false; } template uint32_t ProductHelperHw::getNumCacheRegions() const { return 0u; } template uint64_t ProductHelperHw::getPatIndex(CacheRegion cacheRegion, CachePolicy cachePolicy) const { UNRECOVERABLE_IF(true); return -1; } template bool ProductHelperHw::isEvictionIfNecessaryFlagSupported() const { return true; } } // namespace NEO