feature: Support for Engine APIs with zesinit

Related-To: LOCI-4199

Signed-off-by: Kumar, Shubham <shubham.kumar@intel.com>
This commit is contained in:
Kumar, Shubham
2023-05-02 12:06:39 +00:00
committed by Compute-Runtime-Automation
parent 375f212b2d
commit e8e2bdc900
5 changed files with 325 additions and 5 deletions

View File

@@ -7,16 +7,104 @@
#include "level_zero/sysman/source/engine/windows/os_engine_imp.h"
#include "level_zero/sysman/source/windows/kmd_sys.h"
#include "level_zero/sysman/source/windows/kmd_sys_manager.h"
namespace L0 {
namespace Sysman {
ze_result_t WddmEngineImp::getActivity(zes_engine_stats_t *pStats) {
uint64_t activeTime = 0;
uint64_t timeStamp = 0;
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::ActivityComponent;
switch (this->engineGroup) {
case ZES_ENGINE_GROUP_ALL:
request.paramInfo = KmdSysman::ActivityDomainsType::ActitvityDomainGT;
break;
case ZES_ENGINE_GROUP_COMPUTE_ALL:
request.paramInfo = KmdSysman::ActivityDomainsType::ActivityDomainRenderCompute;
break;
case ZES_ENGINE_GROUP_MEDIA_ALL:
request.paramInfo = KmdSysman::ActivityDomainsType::ActivityDomainMedia;
break;
default:
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
break;
}
request.requestId = KmdSysman::Requests::Activity::CurrentActivityCounter;
ze_result_t status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
memcpy_s(&activeTime, sizeof(uint64_t), response.dataBuffer, sizeof(uint64_t));
memcpy_s(&timeStamp, sizeof(uint64_t), (response.dataBuffer + sizeof(uint64_t)), sizeof(uint64_t));
pStats->activeTime = activeTime;
pStats->timestamp = timeStamp;
return status;
}
ze_result_t WddmEngineImp::getProperties(zes_engine_properties_t &properties) {
properties.type = engineGroup;
properties.onSubdevice = false;
properties.subdeviceId = 0;
return ZE_RESULT_SUCCESS;
}
bool WddmEngineImp::isEngineModuleSupported() {
return true;
}
WddmEngineImp::WddmEngineImp(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t subDeviceId) {
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
this->engineGroup = engineType;
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
}
std::unique_ptr<OsEngine> OsEngine::create(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t subDeviceId, ze_bool_t onSubDevice) {
std::unique_ptr<WddmEngineImp> pWddmEngineImp = std::make_unique<WddmEngineImp>(pOsSysman, engineType, engineInstance, subDeviceId);
return pWddmEngineImp;
}
ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> &engineGroupInstance, OsSysman *pOsSysman) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
KmdSysManager *pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::ActivityComponent;
request.requestId = KmdSysman::Requests::Activity::NumActivityDomains;
ze_result_t status = pKmdSysManager->requestSingle(request, response);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
uint32_t maxNumEnginesSupported = 0;
memcpy_s(&maxNumEnginesSupported, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
if (maxNumEnginesSupported == 0) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
for (uint32_t i = 0; i < maxNumEnginesSupported; i++) {
engineGroupInstance.insert({static_cast<zes_engine_group_t>(i), {0, 0}});
}
return status;
}
} // namespace Sysman

View File

@@ -13,15 +13,20 @@
namespace L0 {
namespace Sysman {
class KmdSysManager;
class WddmEngineImp : public OsEngine, NEO::NonCopyableOrMovableClass {
public:
ze_result_t getActivity(zes_engine_stats_t *pStats) override { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; }
ze_result_t getProperties(zes_engine_properties_t &properties) override { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; };
bool isEngineModuleSupported() override { return false; };
ze_result_t getActivity(zes_engine_stats_t *pStats) override;
ze_result_t getProperties(zes_engine_properties_t &properties) override;
bool isEngineModuleSupported() override;
WddmEngineImp() = default;
WddmEngineImp(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t subDeviceId) {}
WddmEngineImp(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t subDeviceId);
~WddmEngineImp() override = default;
protected:
KmdSysManager *pKmdSysManager = nullptr;
zes_engine_group_t engineGroup = ZES_ENGINE_GROUP_ALL;
};
} // namespace Sysman
} // namespace L0