Pass engine instanced parameter during OsContext creation

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2021-08-12 15:43:07 +00:00
committed by Compute-Runtime-Automation
parent 5d49dedf00
commit 2661962ac3
9 changed files with 29 additions and 15 deletions

View File

@ -369,6 +369,8 @@ struct EngineInstancedDeviceTests : public ::testing::Test {
return false;
}
EXPECT_EQ(EngineHelpers::isCcs(engine.getEngineType()), engine.osContext->isEngineInstanced());
auto osContext = engine.osContext;
if ((engine.getEngineType() == engineType) &&

View File

@ -311,6 +311,7 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
const auto engineUsage = engineTypeUsage.second;
const auto defaultEngineType = getChosenEngineType(hwInfo);
const bool isDefaultEngine = defaultEngineType == engineType && engineUsage == EngineUsage::Regular;
const bool createAsEngineInstanced = engineInstanced && EngineHelpers::isCcs(engineType);
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver = createCommandStreamReceiver();
if (!commandStreamReceiver) {
@ -328,7 +329,7 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
bool lowPriority = (engineTypeUsage.second == EngineUsage::LowPriority);
EngineDescriptor engineDescriptor(engineTypeUsage, getDeviceBitfield(), preemptionMode, false);
EngineDescriptor engineDescriptor(engineTypeUsage, getDeviceBitfield(), preemptionMode, false, createAsEngineInstanced);
auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(commandStreamReceiver.get(), engineDescriptor);
if (osContext->isImmediateContextInitializationEnabled(isDefaultEngine)) {

View File

@ -62,7 +62,7 @@ void RootDevice::initializeRootCommandStreamReceiver() {
auto defaultEngineType = getChosenEngineType(hwInfo);
auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(hwInfo);
EngineDescriptor engineDescriptor(EngineTypeUsage{defaultEngineType, EngineUsage::Regular}, getDeviceBitfield(), preemptionMode, true);
EngineDescriptor engineDescriptor(EngineTypeUsage{defaultEngineType, EngineUsage::Regular}, getDeviceBitfield(), preemptionMode, true, false);
auto osContext = getMemoryManager()->createAndRegisterOsContext(rootCommandStreamReceiver.get(), engineDescriptor);

View File

@ -32,13 +32,14 @@ using EngineTypeUsage = std::pair<aub_stream::EngineType, EngineUsage>;
struct EngineDescriptor {
EngineDescriptor() = delete;
constexpr EngineDescriptor(EngineTypeUsage engineTypeUsage, DeviceBitfield deviceBitfield, PreemptionMode preemptionMode, bool isRootDevice)
: engineTypeUsage(engineTypeUsage), deviceBitfield(deviceBitfield), preemptionMode(preemptionMode), isRootDevice(isRootDevice) {}
constexpr EngineDescriptor(EngineTypeUsage engineTypeUsage, DeviceBitfield deviceBitfield, PreemptionMode preemptionMode, bool isRootDevice, bool isEngineInstanced)
: engineTypeUsage(engineTypeUsage), deviceBitfield(deviceBitfield), preemptionMode(preemptionMode), isRootDevice(isRootDevice), isEngineInstanced(isEngineInstanced) {}
EngineTypeUsage engineTypeUsage;
DeviceBitfield deviceBitfield;
PreemptionMode preemptionMode;
bool isRootDevice;
bool isEngineInstanced;
};
namespace EngineHelpers {

View File

@ -61,7 +61,7 @@ void OsContextLinux::initializeContext() {
drm.setLowPriorityContextParam(drmContextId);
}
this->engineFlag = drm.bindDrmContext(drmContextId, deviceIndex, engineType, engineInstancedDevice);
this->engineFlag = drm.bindDrmContext(drmContextId, deviceIndex, engineType, isEngineInstanced());
this->drmContextIds.push_back(drmContextId);
if (drm.isPerContextVMRequired()) {

View File

@ -21,7 +21,8 @@ OsContext::OsContext(uint32_t contextId, const EngineDescriptor &engineDescripto
numSupportedDevices(static_cast<uint32_t>(engineDescriptor.deviceBitfield.count())),
engineType(engineDescriptor.engineTypeUsage.first),
engineUsage(engineDescriptor.engineTypeUsage.second),
rootDevice(engineDescriptor.isRootDevice) {}
rootDevice(engineDescriptor.isRootDevice),
engineInstancedDevice(engineDescriptor.isEngineInstanced) {}
bool OsContext::isImmediateContextInitializationEnabled(bool isDefaultEngine) const {
if (DebugManager.flags.DeferOsContextInitialization.get() == 0) {

View File

@ -41,6 +41,7 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
bool isLowPriority() const { return engineUsage == EngineUsage::LowPriority; }
bool isInternalEngine() const { return engineUsage == EngineUsage::Internal; }
bool isRootDevice() const { return rootDevice; }
bool isEngineInstanced() const { return engineInstancedDevice; }
virtual bool isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return false; }
bool isDefaultContext() const { return defaultContext; }
void setDefaultContext(bool value) { defaultContext = value; }

View File

@ -14,55 +14,63 @@ constexpr EngineDescriptor getDefaultDescriptor() {
return {{aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular},
1 /*deviceBitfield*/,
PreemptionMode::Disabled,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
constexpr EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage) {
return {engineTypeUsage,
1 /*deviceBitfield*/,
PreemptionMode::Disabled,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
constexpr EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage, bool isRootDevice) {
return {engineTypeUsage,
1 /*deviceBitfield*/,
PreemptionMode::Disabled,
isRootDevice};
isRootDevice,
false /* isEngineInstanced*/};
}
constexpr EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage, PreemptionMode preemptionMode) {
return {engineTypeUsage,
1 /*deviceBitfield*/,
preemptionMode,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
inline EngineDescriptor getDefaultDescriptor(DeviceBitfield deviceBitfield) {
return {{aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular},
deviceBitfield,
PreemptionMode::Disabled,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
inline EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage, DeviceBitfield deviceBitfield) {
return {engineTypeUsage,
deviceBitfield,
PreemptionMode::Disabled,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
inline EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage, PreemptionMode preemptionMode, DeviceBitfield deviceBitfield) {
return {engineTypeUsage,
deviceBitfield,
preemptionMode,
false /* isRootDevice*/};
false /* isRootDevice*/,
false /* isEngineInstanced*/};
}
inline EngineDescriptor getDefaultDescriptor(EngineTypeUsage engineTypeUsage, PreemptionMode preemptionMode, DeviceBitfield deviceBitfield, bool isRootDevice) {
return {engineTypeUsage,
deviceBitfield,
preemptionMode,
isRootDevice};
isRootDevice,
false /* isEngineInstanced*/};
}
} // namespace EngineDescriptorHelper

View File

@ -31,7 +31,7 @@ MockDevice::MockDevice()
commandStreamReceivers.resize(1);
commandStreamReceivers[0].reset(commandStreamReceiver);
EngineDescriptor engineDescriptor = {EngineTypeUsage{aub_stream::ENGINE_CCS, EngineUsage::Regular}, this->getDeviceBitfield(), PreemptionMode::Disabled, true};
EngineDescriptor engineDescriptor = {EngineTypeUsage{aub_stream::ENGINE_CCS, EngineUsage::Regular}, this->getDeviceBitfield(), PreemptionMode::Disabled, true, false};
OsContext *osContext = getMemoryManager()->createAndRegisterOsContext(commandStreamReceiver, engineDescriptor);
commandStreamReceiver->setupContext(*osContext);