|
1591 | 1591 | <span id="1591">1591</span> |
1592 | 1592 | <span id="1592">1592</span> |
1593 | 1593 | <span id="1593">1593</span> |
| 1594 | +<span id="1594">1594</span> |
| 1595 | +<span id="1595">1595</span> |
1594 | 1596 | </pre><pre class="rust"><code><span class="kw">use </span><span class="kw">super</span>::conv; |
1595 | 1597 |
|
1596 | 1598 | <span class="kw">use </span>ash::{extensions::khr, vk}; |
|
2131 | 2133 | } |
2132 | 2134 |
|
2133 | 2135 | <span class="kw">pub fn </span>supports_extension(<span class="kw-2">&</span><span class="self">self</span>, extension: <span class="kw-2">&</span>CStr) -> bool { |
| 2136 | + <span class="kw">use </span><span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul; |
2134 | 2137 | <span class="self">self</span>.supported_extensions |
2135 | 2138 | .iter() |
2136 | | - .any(|ep| <span class="kw">unsafe </span>{ CStr::from_ptr(ep.extension_name.as_ptr()) } == extension) |
| 2139 | + .any(|ep| cstr_from_bytes_until_nul(<span class="kw-2">&</span>ep.extension_name) == <span class="prelude-val">Some</span>(extension)) |
2137 | 2140 | } |
2138 | 2141 |
|
2139 | 2142 | <span class="doccomment">/// Map `requested_features` to the list of Vulkan extension strings required to create the logical device. |
|
2478 | 2481 | <span class="kw-2">&</span><span class="self">self</span>, |
2479 | 2482 | phd: vk::PhysicalDevice, |
2480 | 2483 | ) -> <span class="prelude-ty">Option</span><<span class="kw">crate</span>::ExposedAdapter<<span class="kw">super</span>::Api>> { |
| 2484 | + <span class="kw">use </span><span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul; |
2481 | 2485 | <span class="kw">use </span><span class="kw">crate</span>::auxil::db; |
2482 | 2486 |
|
2483 | 2487 | <span class="kw">let </span>(phd_capabilities, phd_features) = <span class="self">self</span>.shared.inspect(phd); |
2484 | 2488 |
|
2485 | 2489 | <span class="kw">let </span>info = wgt::AdapterInfo { |
2486 | | - name: <span class="kw">unsafe </span>{ |
2487 | | - CStr::from_ptr(phd_capabilities.properties.device_name.as_ptr()) |
2488 | | - .to_str() |
| 2490 | + name: { |
| 2491 | + cstr_from_bytes_until_nul(<span class="kw-2">&</span>phd_capabilities.properties.device_name) |
| 2492 | + .and_then(|info| info.to_str().ok()) |
2489 | 2493 | .unwrap_or(<span class="string">"?"</span>) |
2490 | 2494 | .to_owned() |
2491 | 2495 | }, |
|
2499 | 2503 | ash::vk::PhysicalDeviceType::CPU => wgt::DeviceType::Cpu, |
2500 | 2504 | <span class="kw">_ </span>=> wgt::DeviceType::Other, |
2501 | 2505 | }, |
2502 | | - driver: <span class="kw">unsafe </span>{ |
2503 | | - <span class="kw">let </span>driver_name = <span class="kw">if let </span><span class="prelude-val">Some</span>(driver) = phd_capabilities.driver { |
2504 | | - CStr::from_ptr(driver.driver_name.as_ptr()).to_str().ok() |
2505 | | - } <span class="kw">else </span>{ |
2506 | | - <span class="prelude-val">None |
2507 | | - </span>}; |
2508 | | - |
2509 | | - driver_name.unwrap_or(<span class="string">"?"</span>).to_owned() |
| 2506 | + driver: { |
| 2507 | + phd_capabilities |
| 2508 | + .driver |
| 2509 | + .as_ref() |
| 2510 | + .and_then(|driver| cstr_from_bytes_until_nul(<span class="kw-2">&</span>driver.driver_name)) |
| 2511 | + .and_then(|name| name.to_str().ok()) |
| 2512 | + .unwrap_or(<span class="string">"?"</span>) |
| 2513 | + .to_owned() |
2510 | 2514 | }, |
2511 | | - driver_info: <span class="kw">unsafe </span>{ |
2512 | | - <span class="kw">let </span>driver_info = <span class="kw">if let </span><span class="prelude-val">Some</span>(driver) = phd_capabilities.driver { |
2513 | | - CStr::from_ptr(driver.driver_info.as_ptr()).to_str().ok() |
2514 | | - } <span class="kw">else </span>{ |
2515 | | - <span class="prelude-val">None |
2516 | | - </span>}; |
2517 | | - |
2518 | | - driver_info.unwrap_or(<span class="string">"?"</span>).to_owned() |
| 2515 | + driver_info: { |
| 2516 | + phd_capabilities |
| 2517 | + .driver |
| 2518 | + .as_ref() |
| 2519 | + .and_then(|driver| cstr_from_bytes_until_nul(<span class="kw-2">&</span>driver.driver_info)) |
| 2520 | + .and_then(|name| name.to_str().ok()) |
| 2521 | + .unwrap_or(<span class="string">"?"</span>) |
| 2522 | + .to_owned() |
2519 | 2523 | }, |
2520 | 2524 | backend: wgt::Backend::Vulkan, |
2521 | 2525 | }; |
|
0 commit comments