diff --git a/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp b/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp index e83051d6ad..07c2f32718 100644 --- a/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp +++ b/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp @@ -172,6 +172,15 @@ TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetWhenInitializ EXPECT_NE(controller, nullptr); } +TEST(ExecutionEnvironment, givenSetCsrFlagSetWhenInitializeDirectSubmissionControllerThenNull) { + DebugManagerStateRestore restorer; + DebugManager.flags.SetCommandStreamReceiver.set(1); + + auto controller = platform()->peekExecutionEnvironment()->initializeDirectSubmissionController(); + + EXPECT_EQ(controller, nullptr); +} + TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetZeroWhenInitializeDirectSubmissionControllerThenNull) { DebugManagerStateRestore restorer; DebugManager.flags.EnableDirectSubmissionController.set(0); diff --git a/shared/source/execution_environment/execution_environment.cpp b/shared/source/execution_environment/execution_environment.cpp index faef939d21..20aabbd918 100644 --- a/shared/source/execution_environment/execution_environment.cpp +++ b/shared/source/execution_environment/execution_environment.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -96,6 +96,10 @@ void ExecutionEnvironment::calculateMaxOsContextCount() { DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionController() { auto initializeDirectSubmissionController = DirectSubmissionController::isSupported(); + if (DebugManager.flags.SetCommandStreamReceiver.get() > 0) { + initializeDirectSubmissionController = false; + } + if (DebugManager.flags.EnableDirectSubmissionController.get() != -1) { initializeDirectSubmissionController = DebugManager.flags.EnableDirectSubmissionController.get(); } diff --git a/shared/source/os_interface/os_context.cpp b/shared/source/os_interface/os_context.cpp index 8aa280db5b..e56bb8c315 100644 --- a/shared/source/os_interface/os_context.cpp +++ b/shared/source/os_interface/os_context.cpp @@ -62,6 +62,10 @@ void OsContext::ensureContextInitialized() { bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &submitOnInit) { bool enableDirectSubmission = this->isDirectSubmissionSupported(hwInfo); + if (DebugManager.flags.SetCommandStreamReceiver.get() > 0) { + enableDirectSubmission = false; + } + if (DebugManager.flags.EnableDirectSubmission.get() != -1) { enableDirectSubmission = DebugManager.flags.EnableDirectSubmission.get(); } diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index be005b2b80..7b94734c9a 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -619,6 +619,29 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn EXPECT_EQ(controller, nullptr); } +HWTEST_F(InitDirectSubmissionTest, givenSetCsrFlagSetWhenInitDirectSubmissionThenControllerIsNotCreatedAndCsrIsNotRegistered) { + DebugManagerStateRestore restorer; + DebugManager.flags.SetCommandStreamReceiver.set(1); + + auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); + std::unique_ptr 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); + 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 ret = csr->initDirectSubmission(*device, *osContext.get()); + EXPECT_TRUE(ret); + EXPECT_TRUE(csr->isDirectSubmissionEnabled()); + + auto controller = static_cast(device->executionEnvironment->initializeDirectSubmissionController()); + EXPECT_EQ(controller, nullptr); +} + HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0,