diff --git a/opencl/source/dll/linux/create_drm_memory_manager.cpp b/opencl/source/dll/linux/create_drm_memory_manager.cpp index e18c2272b3..8f290ef47a 100644 --- a/opencl/source/dll/linux/create_drm_memory_manager.cpp +++ b/opencl/source/dll/linux/create_drm_memory_manager.cpp @@ -11,7 +11,7 @@ #include "shared/source/os_interface/os_interface.h" namespace NEO { -std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { +std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) { return std::make_unique(gemCloseWorkerMode::gemCloseWorkerActive, DebugManager.flags.EnableForcePin.get(), true, diff --git a/opencl/source/dll/windows/create_wddm_memory_manager.cpp b/opencl/source/dll/windows/create_wddm_memory_manager.cpp index a0278c9b18..c7b0d9ac2e 100644 --- a/opencl/source/dll/windows/create_wddm_memory_manager.cpp +++ b/opencl/source/dll/windows/create_wddm_memory_manager.cpp @@ -12,7 +12,7 @@ #include "shared/source/os_interface/windows/wddm_memory_manager.h" namespace NEO { -std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { +std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) { return std::make_unique(executionEnvironment); } } // namespace NEO diff --git a/opencl/test/unit_test/os_interface/linux/create_drm_memory_manager.cpp b/opencl/test/unit_test/os_interface/linux/create_drm_memory_manager.cpp index 987759b529..6cc67ad118 100644 --- a/opencl/test/unit_test/os_interface/linux/create_drm_memory_manager.cpp +++ b/opencl/test/unit_test/os_interface/linux/create_drm_memory_manager.cpp @@ -13,7 +13,7 @@ namespace NEO { -std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { +std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) { if (ultHwConfig.forceOsAgnosticMemoryManager) { return std::make_unique(executionEnvironment); } diff --git a/opencl/test/unit_test/os_interface/windows/create_wddm_memory_manager.cpp b/opencl/test/unit_test/os_interface/windows/create_wddm_memory_manager.cpp index 9c43e1b3db..142a35ff0c 100644 --- a/opencl/test/unit_test/os_interface/windows/create_wddm_memory_manager.cpp +++ b/opencl/test/unit_test/os_interface/windows/create_wddm_memory_manager.cpp @@ -13,7 +13,7 @@ namespace NEO { -std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { +std::unique_ptr MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) { if (ultHwConfig.forceOsAgnosticMemoryManager) { return std::make_unique(executionEnvironment); } diff --git a/shared/source/execution_environment/execution_environment.cpp b/shared/source/execution_environment/execution_environment.cpp index 83bdd3d9c9..915b826942 100644 --- a/shared/source/execution_environment/execution_environment.cpp +++ b/shared/source/execution_environment/execution_environment.cpp @@ -55,9 +55,13 @@ bool ExecutionEnvironment::initializeMemoryManager() { break; case CommandStreamReceiverType::CSR_HW: case CommandStreamReceiverType::CSR_HW_WITH_AUB: - default: - memoryManager = MemoryManager::createMemoryManager(*this); - break; + default: { + auto driverModelType = DriverModelType::UNKNOWN; + if (this->rootDeviceEnvironments[0]->osInterface && this->rootDeviceEnvironments[0]->osInterface->getDriverModel()) { + driverModelType = this->rootDeviceEnvironments[0]->osInterface->getDriverModel()->getDriverModelType(); + } + memoryManager = MemoryManager::createMemoryManager(*this, driverModelType); + } break; } return memoryManager->isInitialized(); diff --git a/shared/source/memory_manager/memory_manager.h b/shared/source/memory_manager/memory_manager.h index 30445afd03..900dc5de91 100644 --- a/shared/source/memory_manager/memory_manager.h +++ b/shared/source/memory_manager/memory_manager.h @@ -19,6 +19,7 @@ #include "shared/source/memory_manager/host_ptr_defines.h" #include "shared/source/memory_manager/local_memory_usage.h" #include "shared/source/memory_manager/multi_graphics_allocation.h" +#include "shared/source/os_interface/os_interface.h" #include "shared/source/page_fault_manager/cpu_page_fault_manager.h" #include "engine_node.h" @@ -191,7 +192,7 @@ class MemoryManager { void setDefaultEngineIndex(uint32_t rootDeviceIndex, uint32_t engineIndex) { defaultEngineIndex[rootDeviceIndex] = engineIndex; } virtual bool copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, size_t destinationOffset, const void *memoryToCopy, size_t sizeToCopy); HeapIndex selectHeap(const GraphicsAllocation *allocation, bool hasPointer, bool isFullRangeSVM, bool useFrontWindow); - static std::unique_ptr createMemoryManager(ExecutionEnvironment &executionEnvironment); + static std::unique_ptr createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel = DriverModelType::UNKNOWN); virtual void *reserveCpuAddressRange(size_t size, uint32_t rootDeviceIndex) { return nullptr; }; virtual void releaseReservedCpuAddressRange(void *reserved, size_t size, uint32_t rootDeviceIndex){}; void *getReservedMemory(size_t size, size_t alignment); diff --git a/shared/source/os_interface/os_interface.h b/shared/source/os_interface/os_interface.h index d2e8fa7a93..b5328edd7c 100644 --- a/shared/source/os_interface/os_interface.h +++ b/shared/source/os_interface/os_interface.h @@ -16,7 +16,8 @@ namespace NEO { class ExecutionEnvironment; class MemoryManager; -enum class DriverModelType { WDDM, +enum class DriverModelType { UNKNOWN, + WDDM, DRM }; class HwDeviceId : public NonCopyableClass {