[d3d12] Disable subgroup matrix on Intel driver 32.0.101.8974 Subgroup matrix produces incorrect results with Intel Windows driver version 32.0.101.8974. Bug: 547996281 Change-Id: I087bb217df6b7d08a1938d8465d181419663cb4e Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/333235 Commit-Queue: Shao, Jiawei <jiawei.shao@intel.com> Reviewed-by: James Price <jrprice@google.com> Reviewed-by: Antonio Maiorano <amaiorano@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp index 58239f9..82ffb9f 100644 --- a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp +++ b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
@@ -212,8 +212,16 @@ D3D12_FEATURE_DATA_LINEAR_ALGEBRA_SUPPORT linearAlgebraSupport = {}; hr = mD3d12Device->CheckFeatureSupport(D3D12_FEATURE_LINEAR_ALGEBRA_SUPPORT, &linearAlgebraSupport, sizeof(linearAlgebraSupport)); + // Subgroup matrix produces incorrect results on the Intel driver 101.8974, so disable the + // feature on that specific driver version. Only the last two version fields participate in + // the comparison (see IntelWindowsDriverVersion). + const gpu_info::IntelWindowsDriverVersion kBuggyDriverVersion = {32, 0, 101, 8974}; + const bool isBuggyIntelDriver = + gpu_info::IsIntel(GetVendorId()) && + gpu_info::IntelWindowsDriverVersion(GetDriverVersion()) <= kBuggyDriverVersion; if (mDeviceInfo.supportsWaveOps && SUCCEEDED(hr) && - linearAlgebraSupport.LinearAlgebraTier >= D3D12_LINEAR_ALGEBRA_TIER_1_0) { + linearAlgebraSupport.LinearAlgebraTier >= D3D12_LINEAR_ALGEBRA_TIER_1_0 && + !isBuggyIntelDriver) { EnableFeature(Feature::ChromiumExperimentalSubgroupMatrix); } }