impl intel driver version

Junkui Zhang created

Change summary

crates/gpui/src/platform/windows/directx_renderer.rs | 23 ++++++++++++-
1 file changed, 21 insertions(+), 2 deletions(-)

Detailed changes

crates/gpui/src/platform/windows/directx_renderer.rs 🔗

@@ -412,11 +412,12 @@ impl DirectXRenderer {
             _ => "Unknown Vendor".to_string(),
         };
         let driver_version = match desc.VendorId {
-            0x10DE => nvidia::get_driver_version().context("Failed to get NVIDIA driver info"),
+            0x10DE => nvidia::get_driver_version(),
             0x1002 => Err(anyhow::anyhow!("AMD driver info not implemented yet")),
-            0x8086 => Err(anyhow::anyhow!("Intel driver info not implemented yet")),
+            0x8086 => intel::get_driver_version(&self.devices.adapter),
             _ => Err(anyhow::anyhow!("Unknown vendor detected.")),
         }
+        .context("Failed to get gpu driver info")
         .log_err()
         .unwrap_or("Unknown Driver".to_string());
         Ok(GpuSpecs {
@@ -1443,3 +1444,21 @@ mod nvidia {
         }
     }
 }
+
+mod intel {
+    use windows::{
+        Win32::Graphics::Dxgi::{IDXGIAdapter1, IDXGIDevice},
+        core::Interface,
+    };
+
+    pub(super) fn get_driver_version(adapter: &IDXGIAdapter1) -> anyhow::Result<String> {
+        let number = unsafe { adapter.CheckInterfaceSupport(&IDXGIDevice::IID as _) }?;
+        Ok(format!(
+            "{}.{}.{}.{}",
+            number >> 48,
+            (number >> 32) & 0xFFFF,
+            (number >> 16) & 0xFFFF,
+            number & 0xFFFF
+        ))
+    }
+}