@@ -70,14 +70,18 @@ impl super::Adapter {
7070 telemetry : Option < crate :: Telemetry > ,
7171 ) -> Option < crate :: ExposedAdapter < super :: Api > > {
7272 let desc = unsafe { adapter. GetDesc2 ( ) } . unwrap ( ) ;
73- let driver_version =
74- unsafe { adapter. CheckInterfaceSupport ( & Dxgi :: IDXGIDevice :: IID ) } . unwrap ( ) as u64 ;
75- let driver_version = [
76- ( driver_version >> 48 ) as u16 ,
77- ( driver_version >> 32 ) as u16 ,
78- ( driver_version >> 16 ) as u16 ,
79- driver_version as u16 ,
80- ] ;
73+ let driver_version = unsafe { adapter. CheckInterfaceSupport ( & Dxgi :: IDXGIDevice :: IID ) } ;
74+ let driver_version = driver_version
75+ . map ( |driver_version| {
76+ let driver_version = driver_version as u64 ;
77+ [
78+ ( driver_version >> 48 ) as u16 ,
79+ ( driver_version >> 32 ) as u16 ,
80+ ( driver_version >> 16 ) as u16 ,
81+ driver_version as u16 ,
82+ ]
83+ } )
84+ . map_err ( |e| e. code ( ) ) ;
8185
8286 // Create the device so that we can get the capabilities.
8387 let res = {
@@ -124,7 +128,16 @@ impl super::Adapter {
124128 Direct3D :: D3D_FEATURE_LEVEL_12_0 => FeatureLevel :: _12_0,
125129 Direct3D :: D3D_FEATURE_LEVEL_12_1 => FeatureLevel :: _12_1,
126130 Direct3D :: D3D_FEATURE_LEVEL_12_2 => FeatureLevel :: _12_2,
127- _ => unreachable ! ( ) ,
131+ fl => {
132+ if let Some ( telemetry) = telemetry {
133+ ( telemetry. d3d12_expose_adapter ) (
134+ & desc,
135+ driver_version,
136+ crate :: D3D12ExposeAdapterResult :: UnknownFeatureLevel ( fl. 0 ) ,
137+ ) ;
138+ }
139+ return None ;
140+ }
128141 } ;
129142
130143 let device_name = auxil:: dxgi:: conv:: map_adapter_name ( desc. Description ) ;
@@ -157,10 +170,20 @@ impl super::Adapter {
157170 // use a version that starts with 10.x.x.x. Versions that ship from Nuget use 1.0.x.x.
158171 //
159172 // As far as we know, this is only an issue on the Nuget versions.
160- if is_warp && driver_version >= [ 1 , 0 , 13 , 0 ] && driver_version[ 0 ] < 10 {
161- workarounds. avoid_shader_debug_info = true ;
173+ if let Ok ( driver_version) = driver_version {
174+ if is_warp && driver_version >= [ 1 , 0 , 13 , 0 ] && driver_version[ 0 ] < 10 {
175+ workarounds. avoid_shader_debug_info = true ;
176+ }
162177 }
163178
179+ let driver_version_string = {
180+ let driver_version = driver_version. unwrap_or ( [ 0 , 0 , 0 , 0 ] ) ;
181+ format ! (
182+ "{}.{}.{}.{}" ,
183+ driver_version[ 0 ] , driver_version[ 1 ] , driver_version[ 2 ] , driver_version[ 3 ]
184+ )
185+ } ;
186+
164187 let info = wgt:: AdapterInfo {
165188 backend : wgt:: Backend :: Dx12 ,
166189 name : device_name,
@@ -176,10 +199,7 @@ impl super::Adapter {
176199 wgt:: DeviceType :: DiscreteGpu
177200 } ,
178201 device_pci_bus_id : get_adapter_pci_info ( desc. VendorId , desc. DeviceId ) ,
179- driver : format ! (
180- "{}.{}.{}.{}" ,
181- driver_version[ 0 ] , driver_version[ 1 ] , driver_version[ 2 ] , driver_version[ 3 ]
182- ) ,
202+ driver : driver_version_string,
183203 driver_info : String :: new ( ) ,
184204 subgroup_min_size : features1. WaveLaneCountMin ,
185205 subgroup_max_size : features1. WaveLaneCountMax ,
0 commit comments