Skip to content

Commit 058f2dd

Browse files
committed
Deploying to master from @ f3d455b617a3ae670a24dc97e173aa4228449cd7 🚀
1 parent 0419952 commit 058f2dd

File tree

4 files changed

+78
-32
lines changed

4 files changed

+78
-32
lines changed

‎doc/src/wgpu_hal/auxil/mod.rs.html

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,27 @@
115115
<span id="115">115</span>
116116
<span id="116">116</span>
117117
<span id="117">117</span>
118+
<span id="118">118</span>
119+
<span id="119">119</span>
120+
<span id="120">120</span>
121+
<span id="121">121</span>
122+
<span id="122">122</span>
123+
<span id="123">123</span>
124+
<span id="124">124</span>
125+
<span id="125">125</span>
126+
<span id="126">126</span>
127+
<span id="127">127</span>
128+
<span id="128">128</span>
129+
<span id="129">129</span>
130+
<span id="130">130</span>
131+
<span id="131">131</span>
132+
<span id="132">132</span>
133+
<span id="133">133</span>
134+
<span id="134">134</span>
135+
<span id="135">135</span>
136+
<span id="136">136</span>
137+
<span id="137">137</span>
138+
<span id="138">138</span>
118139
</pre><pre class="rust"><code><span class="attribute">#[cfg(any(feature = <span class="string">&quot;dx11&quot;</span>, feature = <span class="string">&quot;dx12&quot;</span>))]
119140
</span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">mod </span>dxgi;
120141

@@ -232,5 +253,26 @@
232253
<span class="self">self</span>.size = <span class="self">self</span>.size.min(<span class="kw-2">&amp;</span>max_src_size).min(<span class="kw-2">&amp;</span>max_dst_size);
233254
}
234255
}
256+
257+
<span class="doccomment">/// Construct a `CStr` from a byte slice, up to the first zero byte.
258+
///
259+
/// Return a `CStr` extending from the start of `bytes` up to and
260+
/// including the first zero byte. If there is no zero byte in
261+
/// `bytes`, return `None`.
262+
///
263+
/// This can be removed when `CStr::from_bytes_until_nul` is stabilized.
264+
/// ([#95027](https://github.com/rust-lang/rust/issues/95027))
265+
</span><span class="attribute">#[allow(dead_code)]
266+
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>cstr_from_bytes_until_nul(bytes: <span class="kw-2">&amp;</span>[std::os::raw::c_char]) -&gt; <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>std::ffi::CStr&gt; {
267+
<span class="kw">if </span>bytes.contains(<span class="kw-2">&amp;</span><span class="number">0</span>) {
268+
<span class="comment">// Safety for `CStr::from_ptr`:
269+
// - We&#39;ve ensured that the slice does contain a null terminator.
270+
// - The range is valid to read, because the slice covers it.
271+
// - The memory won&#39;t be changed, because the slice borrows it.
272+
</span><span class="kw">unsafe </span>{ <span class="prelude-val">Some</span>(std::ffi::CStr::from_ptr(bytes.as_ptr())) }
273+
} <span class="kw">else </span>{
274+
<span class="prelude-val">None
275+
</span>}
276+
}
235277
</code></pre></div>
236278
</section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="wgpu_hal" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (db0597f56 2022-10-11)" ></div></body></html>

‎doc/src/wgpu_hal/vulkan/adapter.rs.html

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,8 @@
15911591
<span id="1591">1591</span>
15921592
<span id="1592">1592</span>
15931593
<span id="1593">1593</span>
1594+
<span id="1594">1594</span>
1595+
<span id="1595">1595</span>
15941596
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">super</span>::conv;
15951597

15961598
<span class="kw">use </span>ash::{extensions::khr, vk};
@@ -2131,9 +2133,10 @@
21312133
}
21322134

21332135
<span class="kw">pub fn </span>supports_extension(<span class="kw-2">&amp;</span><span class="self">self</span>, extension: <span class="kw-2">&amp;</span>CStr) -&gt; bool {
2136+
<span class="kw">use </span><span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul;
21342137
<span class="self">self</span>.supported_extensions
21352138
.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">&amp;</span>ep.extension_name) == <span class="prelude-val">Some</span>(extension))
21372140
}
21382141

21392142
<span class="doccomment">/// Map `requested_features` to the list of Vulkan extension strings required to create the logical device.
@@ -2478,14 +2481,15 @@
24782481
<span class="kw-2">&amp;</span><span class="self">self</span>,
24792482
phd: vk::PhysicalDevice,
24802483
) -&gt; <span class="prelude-ty">Option</span>&lt;<span class="kw">crate</span>::ExposedAdapter&lt;<span class="kw">super</span>::Api&gt;&gt; {
2484+
<span class="kw">use </span><span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul;
24812485
<span class="kw">use </span><span class="kw">crate</span>::auxil::db;
24822486

24832487
<span class="kw">let </span>(phd_capabilities, phd_features) = <span class="self">self</span>.shared.inspect(phd);
24842488

24852489
<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">&amp;</span>phd_capabilities.properties.device_name)
2492+
.and_then(|info| info.to_str().ok())
24892493
.unwrap_or(<span class="string">&quot;?&quot;</span>)
24902494
.to_owned()
24912495
},
@@ -2499,23 +2503,23 @@
24992503
ash::vk::PhysicalDeviceType::CPU =&gt; wgt::DeviceType::Cpu,
25002504
<span class="kw">_ </span>=&gt; wgt::DeviceType::Other,
25012505
},
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">&quot;?&quot;</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">&amp;</span>driver.driver_name))
2511+
.and_then(|name| name.to_str().ok())
2512+
.unwrap_or(<span class="string">&quot;?&quot;</span>)
2513+
.to_owned()
25102514
},
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">&quot;?&quot;</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">&amp;</span>driver.driver_info))
2520+
.and_then(|name| name.to_str().ok())
2521+
.unwrap_or(<span class="string">&quot;?&quot;</span>)
2522+
.to_owned()
25192523
},
25202524
backend: wgt::Backend::Vulkan,
25212525
};

‎doc/src/wgpu_hal/vulkan/instance.rs.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,10 +1009,9 @@
10091009

10101010
<span class="comment">// Only keep available extensions.
10111011
</span>extensions.retain(|<span class="kw-2">&amp;</span>ext| {
1012-
<span class="kw">if </span>instance_extensions
1013-
.iter()
1014-
.any(|inst_ext| <span class="kw">unsafe </span>{ CStr::from_ptr(inst_ext.extension_name.as_ptr()) == ext })
1015-
{
1012+
<span class="kw">if </span>instance_extensions.iter().any(|inst_ext| {
1013+
<span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul(<span class="kw-2">&amp;</span>inst_ext.extension_name) == <span class="prelude-val">Some</span>(ext)
1014+
}) {
10161015
<span class="bool-val">true
10171016
</span>} <span class="kw">else </span>{
10181017
<span class="macro">log::info!</span>(<span class="string">&quot;Unable to find extension: {}&quot;</span>, ext.to_string_lossy());
@@ -1291,6 +1290,8 @@
12911290

12921291
<span class="kw">impl </span><span class="kw">crate</span>::Instance&lt;<span class="kw">super</span>::Api&gt; <span class="kw">for </span><span class="kw">super</span>::Instance {
12931292
<span class="kw">unsafe fn </span>init(desc: <span class="kw-2">&amp;</span><span class="kw">crate</span>::InstanceDescriptor) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="self">Self</span>, <span class="kw">crate</span>::InstanceError&gt; {
1293+
<span class="kw">use </span><span class="kw">crate</span>::auxil::cstr_from_bytes_until_nul;
1294+
12941295
<span class="kw">let </span>entry = <span class="kw">match </span>ash::Entry::load() {
12951296
<span class="prelude-val">Ok</span>(entry) =&gt; entry,
12961297
<span class="prelude-val">Err</span>(err) =&gt; {
@@ -1339,9 +1340,9 @@
13391340
})<span class="question-mark">?</span>;
13401341

13411342
<span class="kw">let </span>nv_optimus_layer = CStr::from_bytes_with_nul(<span class="string">b&quot;VK_LAYER_NV_optimus\0&quot;</span>).unwrap();
1342-
<span class="kw">let </span>has_nv_optimus = instance_layers
1343-
.iter()
1344-
.any(|inst_layer| CStr::from_ptr(inst_layer.layer_name.as_ptr()) == nv_optimus_layer);
1343+
<span class="kw">let </span>has_nv_optimus = instance_layers.iter().any(|inst_layer| {
1344+
cstr_from_bytes_until_nul(<span class="kw-2">&amp;</span>inst_layer.layer_name) == <span class="prelude-val">Some</span>(nv_optimus_layer)
1345+
});
13451346

13461347
<span class="comment">// Check requested layers against the available layers
13471348
</span><span class="kw">let </span>layers = {
@@ -1352,10 +1353,9 @@
13521353

13531354
<span class="comment">// Only keep available layers.
13541355
</span>layers.retain(|<span class="kw-2">&amp;</span>layer| {
1355-
<span class="kw">if </span>instance_layers
1356-
.iter()
1357-
.any(|inst_layer| CStr::from_ptr(inst_layer.layer_name.as_ptr()) == layer)
1358-
{
1356+
<span class="kw">if </span>instance_layers.iter().any(|inst_layer| {
1357+
cstr_from_bytes_until_nul(<span class="kw-2">&amp;</span>inst_layer.layer_name) == <span class="prelude-val">Some</span>(layer)
1358+
}) {
13591359
<span class="bool-val">true
13601360
</span>} <span class="kw">else </span>{
13611361
<span class="macro">log::warn!</span>(<span class="string">&quot;Unable to find layer: {}&quot;</span>, layer.to_string_lossy());

0 commit comments

Comments
 (0)