|
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