diff --git a/unified-runtime/source/adapters/level_zero/device.cpp b/unified-runtime/source/adapters/level_zero/device.cpp index eb19063999159..223d3b84106e0 100644 --- a/unified-runtime/source/adapters/level_zero/device.cpp +++ b/unified-runtime/source/adapters/level_zero/device.cpp @@ -1790,12 +1790,19 @@ ur_device_handle_t_::useImmediateCommandLists() { bool isDG2OrNewer = this->isIntelDG2OrNewer(); bool isDG2SupportedDriver = this->Platform->isDriverVersionNewerOrSimilar(1, 5, 30820); + bool isIntelMTLDevice = this->isIntelMTL(); + bool isIntelARLDevice = this->isIntelARL(); // Disable immediate command lists for DG2 devices on Windows due to driver // limitations. bool isLinux = true; #ifdef _WIN32 isLinux = false; #endif + // Disable immediate command lists for Intel MTL/ARL devices on Linux by + // default due to driver limitations. + if ((isIntelMTLDevice || isIntelARLDevice) && isLinux) { + return NotUsed; + } if ((isDG2SupportedDriver && isDG2OrNewer && isLinux) || isPVC() || isNewerThanIntelDG2()) { return PerQueue; diff --git a/unified-runtime/source/adapters/level_zero/device.hpp b/unified-runtime/source/adapters/level_zero/device.hpp index 05e65fe3170e5..4e0df03ae07ed 100644 --- a/unified-runtime/source/adapters/level_zero/device.hpp +++ b/unified-runtime/source/adapters/level_zero/device.hpp @@ -188,6 +188,18 @@ struct ur_device_handle_t_ : ur_object { // Checks if this GPU is an Intel Flex GPU or Intel Arc Alchemist bool isDG2() { return (ZeDeviceProperties->deviceId & 0xff00) == 0x5600; } + bool isIntelMTL() { + return (ZeDeviceProperties->vendorId == 0x8086 && + ZeDeviceIpVersionExt->ipVersion >= 0x03118000 && + ZeDeviceIpVersionExt->ipVersion <= 0x0311c004); + } + + bool isIntelARL() { + return (ZeDeviceProperties->vendorId == 0x8086 && + ZeDeviceIpVersionExt->ipVersion >= 0x03128000 && + ZeDeviceIpVersionExt->ipVersion <= 0x03128004); + } + bool isIntelDG2OrNewer() { return (ZeDeviceProperties->vendorId == 0x8086 && ZeDeviceIpVersionExt->ipVersion >= 0x030dc000);