Check if direct submission available once
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
parent
b6da6471f2
commit
70a7840da3
|
@ -30,6 +30,7 @@
|
|||
#include "shared/test/common/mocks/mock_gmm.h"
|
||||
#include "shared/test/common/mocks/mock_gmm_page_table_mngr.h"
|
||||
#include "shared/test/common/mocks/mock_host_ptr_manager.h"
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/mocks/mock_submissions_aggregator.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
||||
|
@ -725,6 +726,7 @@ struct DrmCommandStreamDirectSubmissionTest : public DrmCommandStreamEnhancedTes
|
|||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
auto engineType = device->getDefaultEngine().osContext->getEngineType();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[engineType].engineSupported = true;
|
||||
static_cast<MockOsContext *>(device->getDefaultEngine().osContext)->directSubmissionAvailableChecked = false;
|
||||
csr->initDirectSubmission(*device.get(), *device->getDefaultEngine().osContext);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &su
|
|||
enableDirectSubmission = DebugManager.flags.EnableDirectSubmission.get();
|
||||
}
|
||||
|
||||
if (enableDirectSubmission) {
|
||||
if (enableDirectSubmission && !directSubmissionAvailableChecked) {
|
||||
auto contextEngineType = this->getEngineType();
|
||||
const DirectSubmissionProperties &directSubmissionProperty =
|
||||
hwInfo.capabilityTable.directSubmissionEngines.data[contextEngineType];
|
||||
|
@ -95,9 +95,10 @@ bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &su
|
|||
this->setDirectSubmissionActive();
|
||||
}
|
||||
|
||||
return engineSupported && startDirect;
|
||||
this->directSubmissionAvailableChecked = true;
|
||||
}
|
||||
return false;
|
||||
|
||||
return this->directSubmissionActive;
|
||||
}
|
||||
|
||||
bool OsContext::checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty, aub_stream::EngineType contextEngineType, bool &startOnInit, bool &startInContext) {
|
||||
|
|
|
@ -67,6 +67,7 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
|
|||
const bool rootDevice = false;
|
||||
bool defaultContext = false;
|
||||
bool directSubmissionActive = false;
|
||||
bool directSubmissionAvailableChecked = false;
|
||||
std::once_flag contextInitializedFlag = {};
|
||||
bool contextInitialized = false;
|
||||
bool engineInstancedDevice = false;
|
||||
|
|
|
@ -12,6 +12,8 @@ namespace NEO {
|
|||
class MockOsContext : public OsContext {
|
||||
public:
|
||||
using OsContext::checkDirectSubmissionSupportsEngine;
|
||||
using OsContext::directSubmissionActive;
|
||||
using OsContext::directSubmissionAvailableChecked;
|
||||
using OsContext::engineType;
|
||||
using OsContext::engineUsage;
|
||||
using OsContext::getDeviceBitfield;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "shared/test/common/mocks/mock_csr.h"
|
||||
#include "shared/test/common/mocks/mock_execution_environment.h"
|
||||
#include "shared/test/common/mocks/mock_memory_manager.h"
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/mocks/ult_device_factory.h"
|
||||
#include "shared/test/common/test_macros/matchers.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
@ -391,6 +392,7 @@ HWTEST_F(CommandStreamReceiverTest, givenUpdateTaskCountFromWaitWhenCheckTaskCou
|
|||
struct InitDirectSubmissionFixture {
|
||||
void SetUp() {
|
||||
DebugManager.flags.EnableDirectSubmission.set(1);
|
||||
DebugManager.flags.EnableGemCloseWorker.set(0);
|
||||
executionEnvironment = new MockExecutionEnvironment();
|
||||
DeviceFactory::prepareDeviceEnvironments(*executionEnvironment);
|
||||
VariableBackup<UltHwConfig> backup(&ultHwConfig);
|
||||
|
@ -423,6 +425,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni
|
|||
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -450,6 +453,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn
|
|||
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -469,6 +473,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -481,6 +486,26 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
|
|||
csr.reset();
|
||||
}
|
||||
|
||||
HWTEST_F(InitDirectSubmissionTest, givenCheckIfDirectSubmissionEnableWhenCallItMultipleTimesThenCheckDirectSubmissionEnablingConditionsOnce) {
|
||||
std::unique_ptr<OsContext> osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0,
|
||||
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular},
|
||||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
bool submitOnInit = false;
|
||||
|
||||
auto ret = osContext->isDirectSubmissionAvailable(*hwInfo, submitOnInit);
|
||||
EXPECT_TRUE(ret);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionActive = false;
|
||||
ret = osContext->isDirectSubmissionAvailable(*hwInfo, submitOnInit);
|
||||
EXPECT_FALSE(ret);
|
||||
}
|
||||
|
||||
template <class Type>
|
||||
class CommandStreamReceiverHwDirectSubmissionMock : public CommandStreamReceiverHw<Type> {
|
||||
public:
|
||||
|
@ -501,6 +526,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotR
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -527,6 +553,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) {
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -542,6 +569,8 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionActive = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = false;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
|
||||
|
@ -560,7 +589,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFea
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].submitOnInit = false;
|
||||
|
@ -580,7 +609,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = false;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].submitOnInit = false;
|
||||
|
@ -600,7 +629,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDi
|
|||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useLowPriority = false;
|
||||
|
@ -619,7 +648,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEn
|
|||
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority},
|
||||
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useLowPriority = true;
|
||||
|
@ -638,7 +667,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisab
|
|||
device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useInternal = false;
|
||||
|
@ -657,7 +686,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabl
|
|||
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
|
||||
device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useInternal = true;
|
||||
|
@ -677,7 +706,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDis
|
|||
device->getDeviceBitfield(), true)));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(true);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useRootDevice = false;
|
||||
|
@ -696,7 +725,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEna
|
|||
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
|
||||
device->getDeviceBitfield(), true)));
|
||||
osContext->ensureContextInitialized();
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useRootDevice = true;
|
||||
|
@ -716,7 +745,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDis
|
|||
device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(false);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useNonDefault = false;
|
||||
|
@ -736,7 +765,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextContextWhenDirectSubmis
|
|||
device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(false);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useNonDefault = true;
|
||||
|
@ -759,7 +788,7 @@ HWTEST_F(InitDirectSubmissionTest, GivenBlitterOverrideEnabledWhenBlitterIsNonDe
|
|||
device->getDeviceBitfield())));
|
||||
osContext->ensureContextInitialized();
|
||||
osContext->setDefaultContext(false);
|
||||
|
||||
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
|
||||
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = false;
|
||||
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].useNonDefault = false;
|
||||
|
|
Loading…
Reference in New Issue