diff --git a/unified-runtime/source/adapters/level_zero/device.cpp b/unified-runtime/source/adapters/level_zero/device.cpp index 04fa911b9ed73..078923503ef11 100644 --- a/unified-runtime/source/adapters/level_zero/device.cpp +++ b/unified-runtime/source/adapters/level_zero/device.cpp @@ -1512,12 +1512,23 @@ ur_device_handle_t_::useImmediateCommandLists() { bool isDG2OrNewer = this->isIntelDG2OrNewer(); bool isDG2SupportedDriver = this->Platform->isDriverVersionNewerOrSimilar(1, 5, 30820); - if ((isDG2SupportedDriver && isDG2OrNewer) || isPVC()) { + // Disable immediate command lists for DG2 devices on Windows due to driver + // limitations. + bool isLinux = true; +#ifdef _WIN32 + isLinux = false; +#endif + if ((isDG2SupportedDriver && isDG2OrNewer && isLinux) || isPVC() || + isNewerThanIntelDG2()) { return PerQueue; } else { return NotUsed; } } + + logger::info("NOTE: L0 Immediate CommandList Setting: {}", + ImmediateCommandlistsSetting); + switch (ImmediateCommandlistsSetting) { case 0: return NotUsed; diff --git a/unified-runtime/source/adapters/level_zero/device.hpp b/unified-runtime/source/adapters/level_zero/device.hpp index 615b5884d18ee..381381145103d 100644 --- a/unified-runtime/source/adapters/level_zero/device.hpp +++ b/unified-runtime/source/adapters/level_zero/device.hpp @@ -195,6 +195,11 @@ struct ur_device_handle_t_ : _ur_object { ZeDeviceIpVersionExt->ipVersion >= 0x030dc000); } + bool isNewerThanIntelDG2() { + return (ZeDeviceProperties->vendorId == 0x8086 && + ZeDeviceIpVersionExt->ipVersion >= 0x030f0000); + } + bool isIntegrated() { return (ZeDeviceProperties->flags & ZE_DEVICE_PROPERTY_FLAG_INTEGRATED); }