/* * Copyright (C) 2020-2023 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/execution_environment/root_device_environment.h" #include "shared/source/helpers/cache_policy.h" #include "shared/source/helpers/constants.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_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 namespace NEO { template int ProductHelperHw::configureHardwareCustom(HardwareInfo *hwInfo, OSInterface *osIface) const { enableCompression(hwInfo); enableBlitterOperationsSupport(hwInfo); return 0; } template void ProductHelperHw::getKernelExtendedProperties(uint32_t *fp16, uint32_t *fp32, uint32_t *fp64) const { *fp16 = (0u | FpAtomicExtFlags::globalMinMax | FpAtomicExtFlags::localMinMax | FpAtomicExtFlags::globalLoadStore | FpAtomicExtFlags::localLoadStore); *fp32 = (0u | FpAtomicExtFlags::globalMinMax | FpAtomicExtFlags::localMinMax | FpAtomicExtFlags::globalAdd | FpAtomicExtFlags::localAdd | FpAtomicExtFlags::globalLoadStore | FpAtomicExtFlags::localLoadStore); *fp64 = (0u | FpAtomicExtFlags::globalMinMax | FpAtomicExtFlags::localMinMax | FpAtomicExtFlags::globalAdd | FpAtomicExtFlags::localAdd | FpAtomicExtFlags::globalLoadStore | FpAtomicExtFlags::localLoadStore); } 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 { constexpr bool enabled = false; return enabled; } 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 std::string ProductHelperHw::getDeviceMemoryName() const { return "DDR"; } 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::isAllocationSizeAdjustmentRequired(const HardwareInfo &hwInfo) const { return false; } 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::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::blitEnqueueAllowed() const { return true; } template bool ProductHelperHw::isKmdMigrationSupported() const { return false; } template bool ProductHelperHw::isDcFlushAllowed() const { return true; } 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 bool ProductHelperHw::isAdjustProgrammableIdPreferredSlmSizeRequired(const HardwareInfo &hwInfo) const { return false; } 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::isTimestampWaitSupportedForEvents() 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 bool ProductHelperHw::isMidThreadPreemptionDisallowedForRayTracingKernels() const { return false; } template bool ProductHelperHw::isBufferPoolAllocatorSupported() const { return false; } 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::getStateBaseAddressPropertyGlobalAtomicsSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateBaseAddressStateSupport::globalAtomics; } template bool ProductHelperHw::getStateBaseAddressPropertyBindingTablePoolBaseAddressSupport() const { using GfxProduct = typename HwMapper::GfxProduct; return GfxProduct::StateBaseAddressStateSupport::bindingTablePoolBaseAddress; } template void ProductHelperHw::fillStateBaseAddressPropertiesSupportStructure(StateBaseAddressPropertiesSupport &propertiesSupport) const { propertiesSupport.globalAtomics = getStateBaseAddressPropertyGlobalAtomicsSupport(); 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::isDummyBlitWaRequired() const { return false; } template bool ProductHelperHw::getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const { if (releaseHelper) { return releaseHelper->getMediaFrequencyTileIndex(tileIndex); } 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 uint32_t ProductHelperHw::getCommandBuffersPreallocatedPerCommandQueue() const { return 0u; } template uint32_t ProductHelperHw::getInternalHeapsPreallocated() const { if (debugManager.flags.SetAmountOfInternalHeapsToPreallocate.get() != -1) { return debugManager.flags.SetAmountOfInternalHeapsToPreallocate.get(); } return 0u; } 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) 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; } } // namespace NEO