mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 05:24:02 +08:00
fix: Move first submission programming to a separate function
Call the new function after debugger and sip kernel are initialized. Related-To: HSD-18038645398, HSD-18038819112 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
bbe11205e3
commit
230d3e903b
@@ -245,6 +245,10 @@ bool Device::createDeviceImpl() {
|
||||
UNRECOVERABLE_IF(!ret);
|
||||
}
|
||||
|
||||
if (!initializeEngines()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getDefaultEngine().osContext->setDefaultContext(true);
|
||||
|
||||
for (auto &engine : allEngines) {
|
||||
@@ -303,15 +307,14 @@ bool Device::createDeviceImpl() {
|
||||
|
||||
bool Device::createEngines() {
|
||||
if (engineInstanced) {
|
||||
return createEngine(0, {engineInstancedType, EngineUsage::regular});
|
||||
return createEngine({engineInstancedType, EngineUsage::regular});
|
||||
}
|
||||
|
||||
auto &gfxCoreHelper = getGfxCoreHelper();
|
||||
auto gpgpuEngines = gfxCoreHelper.getGpgpuEngineInstances(getRootDeviceEnvironment());
|
||||
|
||||
uint32_t deviceCsrIndex = 0;
|
||||
for (auto &engine : gpgpuEngines) {
|
||||
if (!createEngine(deviceCsrIndex++, engine)) {
|
||||
if (!createEngine(engine)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -401,7 +404,7 @@ std::unique_ptr<CommandStreamReceiver> Device::createCommandStreamReceiver() con
|
||||
return std::unique_ptr<CommandStreamReceiver>(createCommandStream(*executionEnvironment, getRootDeviceIndex(), getDeviceBitfield()));
|
||||
}
|
||||
|
||||
bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsage) {
|
||||
bool Device::createEngine(EngineTypeUsage engineTypeUsage) {
|
||||
const auto &hwInfo = getHardwareInfo();
|
||||
auto &gfxCoreHelper = getGfxCoreHelper();
|
||||
const auto engineType = engineTypeUsage.first;
|
||||
@@ -439,6 +442,8 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
|
||||
|
||||
auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(commandStreamReceiver.get(), engineDescriptor);
|
||||
osContext->setContextGroup(useContextGroup);
|
||||
osContext->setIsPrimaryEngine(isPrimaryEngine);
|
||||
osContext->setIsDefaultEngine(isDefaultEngine);
|
||||
|
||||
commandStreamReceiver->setupContext(*osContext);
|
||||
|
||||
@@ -460,34 +465,6 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
|
||||
return false;
|
||||
}
|
||||
|
||||
bool firstSubmissionDone = false;
|
||||
if (isDefaultEngine) {
|
||||
bool defaultEngineAlreadySet = (allEngines.size() > defaultEngineIndex) && (allEngines[defaultEngineIndex].getEngineType() == engineType);
|
||||
|
||||
if (!defaultEngineAlreadySet) {
|
||||
defaultEngineIndex = deviceCsrIndex;
|
||||
|
||||
if (osContext->isDebuggableContext() ||
|
||||
this->isInitDeviceWithFirstSubmissionSupported(commandStreamReceiver->getType())) {
|
||||
if (SubmissionStatus::success != commandStreamReceiver->initializeDeviceWithFirstSubmission(*this)) {
|
||||
return false;
|
||||
}
|
||||
firstSubmissionDone = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto &compilerProductHelper = this->getCompilerProductHelper();
|
||||
auto heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled();
|
||||
|
||||
bool isHeaplessStateInit = isPrimaryEngine && compilerProductHelper.isHeaplessStateInitEnabled(heaplessEnabled);
|
||||
bool initializeDevice = (useContextGroup || isHeaplessStateInit) && !firstSubmissionDone;
|
||||
|
||||
if (initializeDevice) {
|
||||
commandStreamReceiver->initializeResources(false);
|
||||
commandStreamReceiver->initializeDeviceWithFirstSubmission(*this);
|
||||
}
|
||||
|
||||
EngineControl engine{commandStreamReceiver.get(), osContext};
|
||||
allEngines.push_back(engine);
|
||||
if (engineUsage == EngineUsage::regular) {
|
||||
@@ -499,6 +476,39 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Device::initializeEngines() {
|
||||
uint32_t deviceCsrIndex = 0;
|
||||
bool defaultEngineAlreadySet = false;
|
||||
for (auto &engine : allEngines) {
|
||||
bool firstSubmissionDone = false;
|
||||
if (engine.osContext->getIsDefaultEngine() && !defaultEngineAlreadySet) {
|
||||
defaultEngineAlreadySet = true;
|
||||
defaultEngineIndex = deviceCsrIndex;
|
||||
|
||||
if (engine.osContext->isDebuggableContext() ||
|
||||
this->isInitDeviceWithFirstSubmissionSupported(engine.commandStreamReceiver->getType())) {
|
||||
if (SubmissionStatus::success != engine.commandStreamReceiver->initializeDeviceWithFirstSubmission(*this)) {
|
||||
return false;
|
||||
}
|
||||
firstSubmissionDone = true;
|
||||
}
|
||||
}
|
||||
|
||||
auto &compilerProductHelper = this->getCompilerProductHelper();
|
||||
auto heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled();
|
||||
|
||||
bool isHeaplessStateInit = engine.osContext->getIsPrimaryEngine() && compilerProductHelper.isHeaplessStateInitEnabled(heaplessEnabled);
|
||||
bool initializeDevice = (engine.osContext->isPartOfContextGroup() || isHeaplessStateInit) && !firstSubmissionDone;
|
||||
|
||||
if (initializeDevice) {
|
||||
engine.commandStreamReceiver->initializeResources(false);
|
||||
engine.commandStreamReceiver->initializeDeviceWithFirstSubmission(*this);
|
||||
}
|
||||
deviceCsrIndex++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Device::createSecondaryEngine(CommandStreamReceiver *primaryCsr, EngineTypeUsage engineTypeUsage) {
|
||||
auto engineUsage = engineTypeUsage.second;
|
||||
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver = createCommandStreamReceiver();
|
||||
|
||||
Reference in New Issue
Block a user