mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
For all of the devices, preferredPlatformName is initialized with nullptr by default and platform name will be initialized to driver's default platform name, at the moment this is "Intel(R) OpenCL Graphics". When Platform is initialized and preferredPlatformName is not nullptr then Platform name will be set to the value stored in preferredPlatformName. Add ENABLE_LEGACY_PLATFORM_NAME AIL enum related to added functionality. Move PlatformInfo to NEO namespace. Related-To: HSD-22018809561 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
174 lines
8.6 KiB
C++
174 lines
8.6 KiB
C++
/*
|
|
* Copyright (C) 2018-2023 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
#include "shared/source/direct_submission/direct_submission_properties.h"
|
|
#include "shared/source/helpers/hw_ip_version.h"
|
|
#include "shared/source/helpers/kmd_notify_properties.h"
|
|
|
|
#include "gtsysinfo.h"
|
|
#include "igfxfmid.h"
|
|
#include "sku_info.h"
|
|
|
|
namespace NEO {
|
|
|
|
enum PreemptionMode : uint32_t;
|
|
class CompilerProductHelper;
|
|
|
|
struct RuntimeCapabilityTable {
|
|
DirectSubmissionProperyEngines directSubmissionEngines;
|
|
KmdNotifyProperties kmdNotifyProperties;
|
|
uint64_t gpuAddressSpace;
|
|
uint64_t sharedSystemMemCapabilities;
|
|
double defaultProfilingTimerResolution;
|
|
size_t requiredPreemptionSurfaceSize;
|
|
const char *deviceName;
|
|
const char *preferredPlatformName;
|
|
PreemptionMode defaultPreemptionMode;
|
|
aub_stream::EngineType defaultEngineType;
|
|
uint32_t maxRenderFrequency;
|
|
unsigned int clVersionSupport;
|
|
uint32_t aubDeviceId;
|
|
uint32_t extraQuantityThreadsPerEU;
|
|
uint32_t slmSize;
|
|
uint32_t grfSize;
|
|
uint32_t timestampValidBits;
|
|
uint32_t kernelTimestampValidBits;
|
|
bool blitterOperationsSupported;
|
|
bool ftrSupportsInteger64BitAtomics;
|
|
bool ftrSupportsFP64;
|
|
bool ftrSupportsFP64Emulation;
|
|
bool ftrSupports64BitMath;
|
|
bool ftrSvm;
|
|
bool ftrSupportsCoherency;
|
|
bool ftrSupportsVmeAvcTextureSampler;
|
|
bool ftrSupportsVmeAvcPreemption;
|
|
bool ftrRenderCompressedBuffers;
|
|
bool ftrRenderCompressedImages;
|
|
bool ftr64KBpages;
|
|
bool instrumentationEnabled;
|
|
bool supportsVme;
|
|
bool supportCacheFlushAfterWalker;
|
|
bool supportsImages;
|
|
bool supportsDeviceEnqueue;
|
|
bool supportsPipes;
|
|
bool supportsOcl21Features;
|
|
bool supportsOnDemandPageFaults;
|
|
bool supportsIndependentForwardProgress;
|
|
bool hostPtrTrackingEnabled;
|
|
bool levelZeroSupported;
|
|
bool isIntegratedDevice;
|
|
bool supportsMediaBlock;
|
|
bool p2pAccessSupported;
|
|
bool p2pAtomicAccessSupported;
|
|
bool fusedEuEnabled;
|
|
bool l0DebuggerSupported;
|
|
bool supportsFloatAtomics;
|
|
};
|
|
|
|
inline bool operator==(const RuntimeCapabilityTable &lhs, const RuntimeCapabilityTable &rhs) {
|
|
bool result = 1;
|
|
|
|
for (size_t i = 0; i < (sizeof(lhs.directSubmissionEngines.data) / sizeof(*lhs.directSubmissionEngines.data)); ++i) {
|
|
result &= (lhs.directSubmissionEngines.data[i].engineSupported == rhs.directSubmissionEngines.data[i].engineSupported);
|
|
result &= (lhs.directSubmissionEngines.data[i].submitOnInit == rhs.directSubmissionEngines.data[i].submitOnInit);
|
|
result &= (lhs.directSubmissionEngines.data[i].useNonDefault == rhs.directSubmissionEngines.data[i].useNonDefault);
|
|
result &= (lhs.directSubmissionEngines.data[i].useRootDevice == rhs.directSubmissionEngines.data[i].useRootDevice);
|
|
result &= (lhs.directSubmissionEngines.data[i].useInternal == rhs.directSubmissionEngines.data[i].useInternal);
|
|
result &= (lhs.directSubmissionEngines.data[i].useLowPriority == rhs.directSubmissionEngines.data[i].useLowPriority);
|
|
}
|
|
|
|
result &= (lhs.kmdNotifyProperties.delayKmdNotifyMicroseconds == rhs.kmdNotifyProperties.delayKmdNotifyMicroseconds);
|
|
result &= (lhs.kmdNotifyProperties.delayQuickKmdSleepMicroseconds == rhs.kmdNotifyProperties.delayQuickKmdSleepMicroseconds);
|
|
result &= (lhs.kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds == rhs.kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
|
|
result &= (lhs.kmdNotifyProperties.enableQuickKmdSleepForDirectSubmission == rhs.kmdNotifyProperties.enableQuickKmdSleepForDirectSubmission);
|
|
result &= (lhs.kmdNotifyProperties.delayQuickKmdSleepForDirectSubmissionMicroseconds == rhs.kmdNotifyProperties.delayQuickKmdSleepForDirectSubmissionMicroseconds);
|
|
result &= (lhs.kmdNotifyProperties.enableKmdNotify == rhs.kmdNotifyProperties.enableKmdNotify);
|
|
result &= (lhs.kmdNotifyProperties.enableQuickKmdSleep == rhs.kmdNotifyProperties.enableQuickKmdSleep);
|
|
result &= (lhs.kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits == rhs.kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
|
|
result &= (lhs.gpuAddressSpace == rhs.gpuAddressSpace);
|
|
result &= (lhs.sharedSystemMemCapabilities == rhs.sharedSystemMemCapabilities);
|
|
result &= (lhs.defaultProfilingTimerResolution == rhs.defaultProfilingTimerResolution);
|
|
result &= (lhs.requiredPreemptionSurfaceSize == rhs.requiredPreemptionSurfaceSize);
|
|
result &= (lhs.defaultPreemptionMode == rhs.defaultPreemptionMode);
|
|
result &= (lhs.defaultEngineType == rhs.defaultEngineType);
|
|
result &= (lhs.maxRenderFrequency == rhs.maxRenderFrequency);
|
|
result &= (lhs.clVersionSupport == rhs.clVersionSupport);
|
|
result &= (lhs.aubDeviceId == rhs.aubDeviceId);
|
|
result &= (lhs.extraQuantityThreadsPerEU == rhs.extraQuantityThreadsPerEU);
|
|
result &= (lhs.slmSize == rhs.slmSize);
|
|
result &= (lhs.grfSize == rhs.grfSize);
|
|
result &= (lhs.timestampValidBits == rhs.timestampValidBits);
|
|
result &= (lhs.kernelTimestampValidBits == rhs.kernelTimestampValidBits);
|
|
result &= (lhs.blitterOperationsSupported == rhs.blitterOperationsSupported);
|
|
result &= (lhs.ftrSupportsInteger64BitAtomics == rhs.ftrSupportsInteger64BitAtomics);
|
|
result &= (lhs.ftrSupportsFP64 == rhs.ftrSupportsFP64);
|
|
result &= (lhs.ftrSupportsFP64Emulation == rhs.ftrSupportsFP64Emulation);
|
|
result &= (lhs.ftrSupports64BitMath == rhs.ftrSupports64BitMath);
|
|
result &= (lhs.ftrSvm == rhs.ftrSvm);
|
|
result &= (lhs.ftrSupportsCoherency == rhs.ftrSupportsCoherency);
|
|
result &= (lhs.ftrSupportsVmeAvcTextureSampler == rhs.ftrSupportsVmeAvcTextureSampler);
|
|
result &= (lhs.ftrSupportsVmeAvcPreemption == rhs.ftrSupportsVmeAvcPreemption);
|
|
result &= (lhs.ftrRenderCompressedBuffers == rhs.ftrRenderCompressedBuffers);
|
|
result &= (lhs.ftrRenderCompressedImages == rhs.ftrRenderCompressedImages);
|
|
result &= (lhs.ftr64KBpages == rhs.ftr64KBpages);
|
|
result &= (lhs.instrumentationEnabled == rhs.instrumentationEnabled);
|
|
result &= (lhs.deviceName == rhs.deviceName);
|
|
result &= (lhs.supportsVme == rhs.supportsVme);
|
|
result &= (lhs.supportCacheFlushAfterWalker == rhs.supportCacheFlushAfterWalker);
|
|
result &= (lhs.supportsImages == rhs.supportsImages);
|
|
result &= (lhs.supportsDeviceEnqueue == rhs.supportsDeviceEnqueue);
|
|
result &= (lhs.supportsPipes == rhs.supportsPipes);
|
|
result &= (lhs.supportsOcl21Features == rhs.supportsOcl21Features);
|
|
result &= (lhs.supportsOnDemandPageFaults == rhs.supportsOnDemandPageFaults);
|
|
result &= (lhs.supportsIndependentForwardProgress == rhs.supportsIndependentForwardProgress);
|
|
result &= (lhs.hostPtrTrackingEnabled == rhs.hostPtrTrackingEnabled);
|
|
result &= (lhs.levelZeroSupported == rhs.levelZeroSupported);
|
|
result &= (lhs.isIntegratedDevice == rhs.isIntegratedDevice);
|
|
result &= (lhs.supportsMediaBlock == rhs.supportsMediaBlock);
|
|
result &= (lhs.fusedEuEnabled == rhs.fusedEuEnabled);
|
|
result &= (lhs.l0DebuggerSupported == rhs.l0DebuggerSupported);
|
|
result &= (lhs.supportsFloatAtomics == rhs.supportsFloatAtomics);
|
|
|
|
return result;
|
|
}
|
|
|
|
struct HardwareInfo {
|
|
HardwareInfo() = default;
|
|
HardwareInfo(const PLATFORM *platform, const FeatureTable *featureTable, const WorkaroundTable *workaroundTable,
|
|
const GT_SYSTEM_INFO *gtSystemInfo, const RuntimeCapabilityTable &capabilityTable);
|
|
|
|
PLATFORM platform{};
|
|
FeatureTable featureTable{};
|
|
WorkaroundTable workaroundTable{};
|
|
alignas(4) GT_SYSTEM_INFO gtSystemInfo{};
|
|
alignas(8) RuntimeCapabilityTable capabilityTable{};
|
|
alignas(8) HardwareIpVersion ipVersion{};
|
|
uint8_t reserved[4]{}; // to keep optimal alignment
|
|
};
|
|
|
|
// Global table of hardware prefixes
|
|
extern bool familyEnabled[IGFX_MAX_CORE];
|
|
extern const char *hardwarePrefix[IGFX_MAX_PRODUCT];
|
|
extern const HardwareInfo *hardwareInfoTable[IGFX_MAX_PRODUCT];
|
|
extern void (*hardwareInfoSetup[IGFX_MAX_PRODUCT])(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable, uint64_t hwInfoConfig, const CompilerProductHelper &compilerProductHelper);
|
|
extern void (*hardwareInfoBaseSetup[IGFX_MAX_PRODUCT])(HardwareInfo *hwInfo, bool setupFeatureTableAndWorkaroundTable, const CompilerProductHelper &);
|
|
|
|
template <GFXCORE_FAMILY gfxFamily>
|
|
struct EnableGfxFamilyHw {
|
|
EnableGfxFamilyHw() {
|
|
familyEnabled[gfxFamily] = true;
|
|
}
|
|
};
|
|
|
|
bool getHwInfoForPlatformString(std::string &platform, const HardwareInfo *&hwInfoIn);
|
|
void setHwInfoValuesFromConfig(const uint64_t hwInfoConfig, HardwareInfo &hwInfoIn);
|
|
bool parseHwInfoConfigString(const std::string &hwInfoConfigStr, uint64_t &hwInfoConfig);
|
|
aub_stream::EngineType getChosenEngineType(const HardwareInfo &hwInfo);
|
|
|
|
} // namespace NEO
|