Use VK_EXT_robustness2 only when not using an outdated intel iGPU driver (#4602)

This commit is contained in:
Theo Dulka
2023-12-07 13:08:21 -06:00
committed by GitHub
parent 0cbabcf229
commit cf8e11efc3
2 changed files with 41 additions and 0 deletions

View File

@@ -157,6 +157,10 @@ Passing an owned value `window` to `Surface` will return a `Surface<'static>`. S
### Bug Fixes
#### Vulkan
- Use `VK_EXT_robustness2` only when not using an outdated intel iGPU driver. By @TheoDulka in [#4602](https://github.com/gfx-rs/wgpu/pull/4602).
#### WebGPU
- Allow calling `BufferSlice::get_mapped_range` multiple times on the same buffer slice (instead of throwing a Javascript exception): By @DouglasDwyer in [#4726](https://github.com/gfx-rs/wgpu/pull/4726)

View File

@@ -943,6 +943,17 @@ impl super::InstanceShared {
unsafe {
get_device_properties.get_physical_device_properties2(phd, &mut properties2);
}
if is_intel_igpu_outdated_for_robustness2(
capabilities.properties,
capabilities.driver,
) {
use crate::auxil::cstr_from_bytes_until_nul;
capabilities.supported_extensions.retain(|&x| {
cstr_from_bytes_until_nul(&x.extension_name)
!= Some(vk::ExtRobustness2Fn::name())
});
}
};
capabilities
};
@@ -1953,3 +1964,29 @@ fn supports_bgra8unorm_storage(
&& features3.contains(vk::FormatFeatureFlags2::STORAGE_WRITE_WITHOUT_FORMAT)
}
}
// For https://github.com/gfx-rs/wgpu/issues/4599
// Intel iGPUs with outdated drivers can break rendering if `VK_EXT_robustness2` is used.
// Driver version 31.0.101.2115 works, but there's probably an earlier functional version.
fn is_intel_igpu_outdated_for_robustness2(
props: vk::PhysicalDeviceProperties,
driver: Option<vk::PhysicalDeviceDriverPropertiesKHR>,
) -> bool {
const DRIVER_VERSION_WORKING: u32 = (101 << 14) | 2115; // X.X.101.2115
let is_outdated = props.vendor_id == crate::auxil::db::intel::VENDOR
&& props.device_type == vk::PhysicalDeviceType::INTEGRATED_GPU
&& props.driver_version < DRIVER_VERSION_WORKING
&& driver
.map(|driver| driver.driver_id == vk::DriverId::INTEL_PROPRIETARY_WINDOWS)
.unwrap_or_default();
if is_outdated {
log::warn!(
"Disabling robustBufferAccess2 and robustImageAccess2: IntegratedGpu Intel Driver is outdated. Found with version 0x{:X}, less than the known good version 0x{:X} (31.0.101.2115)",
props.driver_version,
DRIVER_VERSION_WORKING
);
}
is_outdated
}