diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index 0076872c9a..30ff4eb30e 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -208,6 +208,7 @@ if(BUILD_WITH_L0) SHARED ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${NEO_SHARED_DIRECTORY}/dll/create_command_stream.cpp + ${NEO_SHARED_DIRECTORY}/dll/direct_submission_controller_enabled.cpp ${NEO_SHARED_DIRECTORY}/dll/options_dll.cpp ${NEO_SHARED_DIRECTORY}/gmm_helper/page_table_mngr.cpp ${NEO_SHARED_DIRECTORY}/gmm_helper/resource_info.cpp diff --git a/opencl/source/dll/CMakeLists.txt b/opencl/source/dll/CMakeLists.txt index 6e220a1e68..456234342c 100644 --- a/opencl/source/dll/CMakeLists.txt +++ b/opencl/source/dll/CMakeLists.txt @@ -15,6 +15,7 @@ set(RUNTIME_SRCS_DLL_BASE ${NEO_SHARED_DIRECTORY}/dll/create_deferred_deleter.cpp ${NEO_SHARED_DIRECTORY}/dll/create_memory_manager_${DRIVER_MODEL}.cpp ${NEO_SHARED_DIRECTORY}/dll/create_tbx_sockets.cpp + ${NEO_SHARED_DIRECTORY}/dll/direct_submission_controller_enabled.cpp ${NEO_SHARED_DIRECTORY}/dll/source_level_debugger_dll.cpp ${NEO_SHARED_DIRECTORY}/dll/get_devices.cpp ${NEO_SHARED_DIRECTORY}/built_ins/sip_init.cpp diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_tests.cpp index 483779f6c7..d2ac21f6e7 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -403,7 +403,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); - auto controller = static_cast(device->executionEnvironment->getDirectSubmissionController()); + auto controller = static_cast(device->executionEnvironment->initializeDirectSubmissionController()); controller->keepControlling.store(false); EXPECT_EQ(controller->directSubmissions.size(), 0u); @@ -444,7 +444,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn EXPECT_TRUE(ret); EXPECT_TRUE(csr->isDirectSubmissionEnabled()); - auto controller = static_cast(device->executionEnvironment->getDirectSubmissionController()); + auto controller = static_cast(device->executionEnvironment->initializeDirectSubmissionController()); EXPECT_EQ(controller, nullptr); } 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 59618400f5..0867ca5f44 100644 --- a/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp +++ b/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp @@ -163,20 +163,20 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeMemoryManagerI EXPECT_EQ(enableLocalMemory, executionEnvironment->memoryManager->isLocalMemorySupported(device->getRootDeviceIndex())); } -TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetWhenGetDirectSubmissionControllerThenNotNull) { +TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetWhenInitializeDirectSubmissionControllerThenNotNull) { DebugManagerStateRestore restorer; DebugManager.flags.EnableDirectSubmissionController.set(1); - auto controller = platform()->peekExecutionEnvironment()->getDirectSubmissionController(); + auto controller = platform()->peekExecutionEnvironment()->initializeDirectSubmissionController(); EXPECT_NE(controller, nullptr); } -TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetZeroWhenGetDirectSubmissionControllerThenNull) { +TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetZeroWhenInitializeDirectSubmissionControllerThenNull) { DebugManagerStateRestore restorer; DebugManager.flags.EnableDirectSubmissionController.set(0); - auto controller = platform()->peekExecutionEnvironment()->getDirectSubmissionController(); + auto controller = platform()->peekExecutionEnvironment()->initializeDirectSubmissionController(); EXPECT_EQ(controller, nullptr); } diff --git a/opencl/test/unit_test/linux/CMakeLists.txt b/opencl/test/unit_test/linux/CMakeLists.txt index eb21679ef3..aea2d68549 100644 --- a/opencl/test/unit_test/linux/CMakeLists.txt +++ b/opencl/test/unit_test/linux/CMakeLists.txt @@ -22,6 +22,7 @@ add_executable(igdrcl_${target_name} ${CMAKE_CURRENT_SOURCE_DIR}/os_interface_linux_tests.cpp ${NEO_SHARED_DIRECTORY}/os_interface/linux/sys_calls_linux.cpp ${NEO_SHARED_DIRECTORY}/dll/create_memory_manager_drm.cpp + ${NEO_SHARED_DIRECTORY}/dll/direct_submission_controller_enabled.cpp ${NEO_SHARED_DIRECTORY}/dll/linux/drm_neo_create.cpp ${NEO_SHARED_DIRECTORY}/dll/linux/options_linux.cpp ${NEO_SHARED_DIRECTORY}/dll/linux/os_interface.cpp diff --git a/opencl/test/unit_test/linux/main_linux_dll.cpp b/opencl/test/unit_test/linux/main_linux_dll.cpp index 36792af854..7d592000e6 100644 --- a/opencl/test/unit_test/linux/main_linux_dll.cpp +++ b/opencl/test/unit_test/linux/main_linux_dll.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/source/direct_submission/direct_submission_controller.h" #include "shared/source/execution_environment/execution_environment.h" #include "shared/source/helpers/aligned_memory.h" #include "shared/source/helpers/basic_math.h" @@ -797,6 +798,10 @@ TEST_F(DrmTests, whenCreateDrmIsCalledThenProperHwInfoIsSetup) { EXPECT_LT(0u, currentHwInfo->gtSystemInfo.SubSliceCount); } +TEST(DirectSubmissionControllerTest, whenCheckDirectSubmissionControllerSupportThenReturnsTrue) { + EXPECT_TRUE(DirectSubmissionController::isSupported()); +} + TEST(PlatformsDestructor, whenGlobalPlatformsDestructorIsCalledThenGlobalPlatformsAreDestroyed) { EXPECT_NE(nullptr, platformsImpl); platformsDestructor(); diff --git a/opencl/test/unit_test/windows/CMakeLists.txt b/opencl/test/unit_test/windows/CMakeLists.txt index 966c8da16c..de796dc8d6 100644 --- a/opencl/test/unit_test/windows/CMakeLists.txt +++ b/opencl/test/unit_test/windows/CMakeLists.txt @@ -20,6 +20,7 @@ if(WIN32) ${CMAKE_CURRENT_SOURCE_DIR}/wddm_create_tests.cpp ${NEO_IGDRCL_WINDOWS_DLL_TESTS_TARGET_OBJECTS} ${NEO_SHARED_DIRECTORY}/aub/aub_stream_interface.cpp + ${NEO_SHARED_DIRECTORY}/dll/direct_submission_controller_enabled.cpp ${NEO_SHARED_DIRECTORY}/dll/get_devices.cpp ${NEO_SHARED_DIRECTORY}/dll/windows/os_interface.cpp ${NEO_SHARED_DIRECTORY}/dll/create_command_stream.cpp diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index f386f28fcf..6c396f972c 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -41,7 +41,7 @@ namespace NEO { template CommandStreamReceiverHw::~CommandStreamReceiverHw() { - auto directSubmissionController = executionEnvironment.getDirectSubmissionController(); + auto directSubmissionController = executionEnvironment.directSubmissionController.get(); if (directSubmissionController) { directSubmissionController->unregisterDirectSubmission(this); } @@ -1438,7 +1438,7 @@ inline bool CommandStreamReceiverHw::initDirectSubmission(Device &dev directSubmission = DirectSubmissionHw>::create(device, osContext); ret = directSubmission->initialize(submitOnInit); } - auto directSubmissionController = executionEnvironment.getDirectSubmissionController(); + auto directSubmissionController = executionEnvironment.initializeDirectSubmissionController(); if (directSubmissionController) { directSubmissionController->registerDirectSubmission(this); } diff --git a/shared/source/direct_submission/direct_submission_controller.h b/shared/source/direct_submission/direct_submission_controller.h index 3203721025..4ae8a338ed 100644 --- a/shared/source/direct_submission/direct_submission_controller.h +++ b/shared/source/direct_submission/direct_submission_controller.h @@ -25,6 +25,8 @@ class DirectSubmissionController { void registerDirectSubmission(CommandStreamReceiver *csr); void unregisterDirectSubmission(CommandStreamReceiver *csr); + static bool isSupported(); + protected: struct DirectSubmissionState { bool isStopped = false; diff --git a/shared/source/dll/direct_submission_controller_enabled.cpp b/shared/source/dll/direct_submission_controller_enabled.cpp new file mode 100644 index 0000000000..52ffd9bf72 --- /dev/null +++ b/shared/source/dll/direct_submission_controller_enabled.cpp @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/direct_submission/direct_submission_controller.h" + +namespace NEO { +bool DirectSubmissionController::isSupported() { + return true; +} +} // namespace NEO \ No newline at end of file diff --git a/shared/source/execution_environment/execution_environment.cpp b/shared/source/execution_environment/execution_environment.cpp index 2207135957..cd8177b830 100644 --- a/shared/source/execution_environment/execution_environment.cpp +++ b/shared/source/execution_environment/execution_environment.cpp @@ -86,8 +86,8 @@ void ExecutionEnvironment::calculateMaxOsContextCount() { } } -DirectSubmissionController *ExecutionEnvironment::getDirectSubmissionController() { - auto initializeDirectSubmissionController = false; +DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionController() { + auto initializeDirectSubmissionController = DirectSubmissionController::isSupported(); if (DebugManager.flags.EnableDirectSubmissionController.get() != -1) { initializeDirectSubmissionController = DebugManager.flags.EnableDirectSubmissionController.get(); diff --git a/shared/source/execution_environment/execution_environment.h b/shared/source/execution_environment/execution_environment.h index 400e05523b..2d14426c90 100644 --- a/shared/source/execution_environment/execution_environment.h +++ b/shared/source/execution_environment/execution_environment.h @@ -31,15 +31,14 @@ class ExecutionEnvironment : public ReferenceTrackedObject debuggingEnabled = true; } bool isDebuggingEnabled() { return debuggingEnabled; } - DirectSubmissionController *getDirectSubmissionController(); + DirectSubmissionController *initializeDirectSubmissionController(); std::unique_ptr memoryManager; + std::unique_ptr directSubmissionController; std::unique_ptr osEnvironment; std::vector> rootDeviceEnvironments; protected: - std::unique_ptr directSubmissionController; - bool debuggingEnabled = false; }; } // namespace NEO diff --git a/shared/test/common/libult/CMakeLists.txt b/shared/test/common/libult/CMakeLists.txt index 015b5402ce..5616fa3008 100644 --- a/shared/test/common/libult/CMakeLists.txt +++ b/shared/test/common/libult/CMakeLists.txt @@ -145,6 +145,7 @@ set(neo_libult_SRCS_LINUX ${NEO_SHARED_TEST_DIRECTORY}/common/libult/os_interface.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/mocks/linux/mock_drm_memory_manager.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/mocks/linux/mock_drm_memory_manager.h + ${NEO_SHARED_TEST_DIRECTORY}/common/mocks/mock_direct_submission_controller_enabled.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/os_interface/linux/create_drm_memory_manager.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/os_interface/linux/drm_neo_create.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/os_interface/linux/options.cpp @@ -154,6 +155,7 @@ set(neo_libult_SRCS_LINUX set_property(GLOBAL APPEND PROPERTY neo_libult_SRCS_LINUX ${neo_libult_SRCS_LINUX}) set(neo_libult_SRCS_WINDOWS ${NEO_SHARED_TEST_DIRECTORY}/common/libult/os_interface.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/mocks/mock_direct_submission_controller_enabled.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/mocks/mock_wddm.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/os_interface/windows/create_wddm_memory_manager.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/os_interface/windows/options.cpp diff --git a/shared/test/common/mocks/mock_direct_submission_controller_enabled.cpp b/shared/test/common/mocks/mock_direct_submission_controller_enabled.cpp new file mode 100644 index 0000000000..46d2546bce --- /dev/null +++ b/shared/test/common/mocks/mock_direct_submission_controller_enabled.cpp @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/direct_submission/direct_submission_controller.h" + +namespace NEO { +bool DirectSubmissionController::isSupported() { + return false; +} +} // namespace NEO \ No newline at end of file