Skip to content

Commit b710936

Browse files
committed
Deploying to master from @ gfx-rs/wgpu@6f5014f 🚀
1 parent 70f4205 commit b710936

File tree

132 files changed

+963
-890
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

132 files changed

+963
-890
lines changed

doc/search-index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

doc/src/wgpu_core/command/ray_tracing.rs.html

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,14 +1293,17 @@
12931293
<a href="#1292" id="1292">1292</a>
12941294
<a href="#1293" id="1293">1293</a>
12951295
<a href="#1294" id="1294">1294</a>
1296+
<a href="#1295" id="1295">1295</a>
1297+
<a href="#1296" id="1296">1296</a>
1298+
<a href="#1297" id="1297">1297</a>
12961299
</pre></div><pre class="rust"><code><span class="kw">use crate</span>::{
12971300
device::{queue::TempResource, Device},
12981301
global::Global,
12991302
hub::Hub,
13001303
id::CommandEncoderId,
13011304
init_tracker::MemoryInitKind,
13021305
ray_tracing::{
1303-
tlas_instance_into_bytes, BlasAction, BlasBuildEntry, BlasGeometries, BlasTriangleGeometry,
1306+
BlasAction, BlasBuildEntry, BlasGeometries, BlasTriangleGeometry,
13041307
BuildAccelerationStructureError, TlasAction, TlasBuildEntry, TlasInstance, TlasPackage,
13051308
TraceBlasBuildEntry, TraceBlasGeometries, TraceBlasTriangleGeometry, TraceTlasInstance,
13061309
TraceTlasPackage, ValidateBlasActionsError, ValidateTlasActionsError,
@@ -1355,9 +1358,6 @@
13551358
entry: TlasBuildEntry,
13561359
}
13571360

1358-
<span class="comment">// TODO: Get this from the device (e.g. VkPhysicalDeviceAccelerationStructurePropertiesKHR.minAccelerationStructureScratchOffsetAlignment) this is currently the largest possible some devices have 0, 64, 128 (lower limits) so this could create excess allocation (Note: dx12 has 256).
1359-
</span><span class="kw">const </span>SCRATCH_BUFFER_ALIGNMENT: u32 = <span class="number">256</span>;
1360-
13611361
<span class="kw">impl </span>Global {
13621362
<span class="comment">// Currently this function is very similar to its safe counterpart, however certain parts of it are very different,
13631363
// making for the two to be implemented differently, the main difference is this function has separate buffers for each
@@ -1488,6 +1488,7 @@
14881488
<span class="kw-2">&amp;mut </span>scratch_buffer_blas_size,
14891489
<span class="kw-2">&amp;mut </span>blas_storage,
14901490
hub,
1491+
device.alignments.ray_tracing_scratch_buffer_alignment,
14911492
)<span class="question-mark">?</span>;
14921493

14931494
<span class="kw">let </span><span class="kw-2">mut </span>scratch_buffer_tlas_size = <span class="number">0</span>;
@@ -1555,7 +1556,7 @@
15551556
<span class="kw">let </span>scratch_buffer_offset = scratch_buffer_tlas_size;
15561557
scratch_buffer_tlas_size += align_to(
15571558
tlas.size_info.build_scratch_size <span class="kw">as </span>u32,
1558-
SCRATCH_BUFFER_ALIGNMENT,
1559+
device.alignments.ray_tracing_scratch_buffer_alignment,
15591560
) <span class="kw">as </span>u64;
15601561

15611562
tlas_storage.push(UnsafeTlasStore {
@@ -1803,6 +1804,7 @@
18031804
<span class="kw-2">&amp;mut </span>scratch_buffer_blas_size,
18041805
<span class="kw-2">&amp;mut </span>blas_storage,
18051806
hub,
1807+
device.alignments.ray_tracing_scratch_buffer_alignment,
18061808
)<span class="question-mark">?</span>;
18071809
<span class="kw">let </span><span class="kw-2">mut </span>tlas_lock_store = Vec::&lt;(<span class="prelude-ty">Option</span>&lt;TlasPackage&gt;, Arc&lt;Tlas&gt;)&gt;::new();
18081810

@@ -1830,7 +1832,7 @@
18301832
<span class="kw">let </span>scratch_buffer_offset = scratch_buffer_tlas_size;
18311833
scratch_buffer_tlas_size += align_to(
18321834
tlas.size_info.build_scratch_size <span class="kw">as </span>u32,
1833-
SCRATCH_BUFFER_ALIGNMENT,
1835+
device.alignments.ray_tracing_scratch_buffer_alignment,
18341836
) <span class="kw">as </span>u64;
18351837

18361838
<span class="kw">let </span>first_byte_index = instance_buffer_staging_source.len();
@@ -1853,10 +1855,13 @@
18531855

18541856
cmd_buf_data.trackers.blas_s.set_single(blas.clone());
18551857

1856-
instance_buffer_staging_source.extend(tlas_instance_into_bytes(
1857-
<span class="kw-2">&amp;</span>instance,
1858-
blas.handle,
1859-
device.backend(),
1858+
instance_buffer_staging_source.extend(device.raw().tlas_instance_to_bytes(
1859+
hal::TlasInstance {
1860+
transform: <span class="kw-2">*</span>instance.transform,
1861+
custom_index: instance.custom_index,
1862+
mask: instance.mask,
1863+
blas_address: blas.handle,
1864+
},
18601865
));
18611866

18621867
instance_count += <span class="number">1</span>;
@@ -2308,6 +2313,7 @@
23082313
scratch_buffer_blas_size: <span class="kw-2">&amp;mut </span>u64,
23092314
blas_storage: <span class="kw-2">&amp;mut </span>Vec&lt;BlasStore&lt;<span class="lifetime">'a</span>&gt;&gt;,
23102315
hub: <span class="kw-2">&amp;</span>Hub,
2316+
ray_tracing_scratch_buffer_alignment: u32,
23112317
) -&gt; <span class="prelude-ty">Result</span>&lt;(), BuildAccelerationStructureError&gt; {
23122318
<span class="kw">let </span><span class="kw-2">mut </span>triangle_entries =
23132319
Vec::&lt;hal::AccelerationStructureTriangles&lt;<span class="kw">dyn </span>hal::DynBuffer&gt;&gt;::new();
@@ -2487,7 +2493,7 @@
24872493
<span class="kw">let </span>scratch_buffer_offset = <span class="kw-2">*</span>scratch_buffer_blas_size;
24882494
<span class="kw-2">*</span>scratch_buffer_blas_size += align_to(
24892495
blas.size_info.build_scratch_size <span class="kw">as </span>u32,
2490-
SCRATCH_BUFFER_ALIGNMENT,
2496+
ray_tracing_scratch_buffer_alignment,
24912497
) <span class="kw">as </span>u64;
24922498

24932499
blas_storage.push(BlasStore {

doc/src/wgpu_core/device/ray_tracing.rs.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@
368368
global::Global,
369369
id::{<span class="self">self</span>, BlasId, TlasId},
370370
lock::RwLock,
371-
ray_tracing::{get_raw_tlas_instance_size, CreateBlasError, CreateTlasError},
371+
ray_tracing::{CreateBlasError, CreateTlasError},
372372
resource, LabelHelpers,
373373
};
374374
<span class="kw">use </span>hal::AccelerationStructureTriangleIndices;
@@ -491,7 +491,7 @@
491491
.map_err(DeviceError::from_hal)<span class="question-mark">?</span>;
492492

493493
<span class="kw">let </span>instance_buffer_size =
494-
get_raw_tlas_instance_size(<span class="self">self</span>.backend()) * desc.max_instances.max(<span class="number">1</span>) <span class="kw">as </span>usize;
494+
<span class="self">self</span>.alignments.raw_tlas_instance_size * desc.max_instances.max(<span class="number">1</span>) <span class="kw">as </span>usize;
495495
<span class="kw">let </span>instance_buffer = <span class="kw">unsafe </span>{
496496
<span class="self">self</span>.raw().create_buffer(<span class="kw-2">&amp;</span>hal::BufferDescriptor {
497497
label: <span class="prelude-val">Some</span>(<span class="string">"(wgpu-core) instances_buffer"</span>),

doc/src/wgpu_core/ray_tracing.rs.html

Lines changed: 2 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -277,51 +277,6 @@
277277
<a href="#276" id="276">276</a>
278278
<a href="#277" id="277">277</a>
279279
<a href="#278" id="278">278</a>
280-
<a href="#279" id="279">279</a>
281-
<a href="#280" id="280">280</a>
282-
<a href="#281" id="281">281</a>
283-
<a href="#282" id="282">282</a>
284-
<a href="#283" id="283">283</a>
285-
<a href="#284" id="284">284</a>
286-
<a href="#285" id="285">285</a>
287-
<a href="#286" id="286">286</a>
288-
<a href="#287" id="287">287</a>
289-
<a href="#288" id="288">288</a>
290-
<a href="#289" id="289">289</a>
291-
<a href="#290" id="290">290</a>
292-
<a href="#291" id="291">291</a>
293-
<a href="#292" id="292">292</a>
294-
<a href="#293" id="293">293</a>
295-
<a href="#294" id="294">294</a>
296-
<a href="#295" id="295">295</a>
297-
<a href="#296" id="296">296</a>
298-
<a href="#297" id="297">297</a>
299-
<a href="#298" id="298">298</a>
300-
<a href="#299" id="299">299</a>
301-
<a href="#300" id="300">300</a>
302-
<a href="#301" id="301">301</a>
303-
<a href="#302" id="302">302</a>
304-
<a href="#303" id="303">303</a>
305-
<a href="#304" id="304">304</a>
306-
<a href="#305" id="305">305</a>
307-
<a href="#306" id="306">306</a>
308-
<a href="#307" id="307">307</a>
309-
<a href="#308" id="308">308</a>
310-
<a href="#309" id="309">309</a>
311-
<a href="#310" id="310">310</a>
312-
<a href="#311" id="311">311</a>
313-
<a href="#312" id="312">312</a>
314-
<a href="#313" id="313">313</a>
315-
<a href="#314" id="314">314</a>
316-
<a href="#315" id="315">315</a>
317-
<a href="#316" id="316">316</a>
318-
<a href="#317" id="317">317</a>
319-
<a href="#318" id="318">318</a>
320-
<a href="#319" id="319">319</a>
321-
<a href="#320" id="320">320</a>
322-
<a href="#321" id="321">321</a>
323-
<a href="#322" id="322">322</a>
324-
<a href="#323" id="323">323</a>
325280
</pre></div><pre class="rust"><code><span class="comment">// Ray tracing
326281
// Major missing optimizations (no api surface changes needed):
327282
// - use custom tracker to track build state
@@ -337,8 +292,8 @@
337292
id::{BlasId, BufferId, TlasId},
338293
resource::CreateBufferError,
339294
};
340-
<span class="kw">use </span>std::{mem::size_of, sync::Arc};
341-
<span class="kw">use </span>std::{num::NonZeroU64, slice};
295+
<span class="kw">use </span>std::num::NonZeroU64;
296+
<span class="kw">use </span>std::sync::Arc;
342297

343298
<span class="kw">use </span><span class="kw">crate</span>::resource::{Blas, ResourceErrorIdent, Tlas};
344299
<span class="kw">use </span>thiserror::Error;
@@ -600,49 +555,4 @@
600555
<span class="kw">pub </span>instances: Vec&lt;<span class="prelude-ty">Option</span>&lt;TraceTlasInstance&gt;&gt;,
601556
<span class="kw">pub </span>lowest_unmodified: u32,
602557
}
603-
604-
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_raw_tlas_instance_size(backend: wgt::Backend) -&gt; usize {
605-
<span class="comment">// TODO: this should be provided by the backend
606-
</span><span class="kw">match </span>backend {
607-
wgt::Backend::Empty =&gt; <span class="number">0</span>,
608-
wgt::Backend::Vulkan =&gt; <span class="number">64</span>,
609-
<span class="kw">_ </span>=&gt; <span class="macro">unimplemented!</span>(),
610-
}
611-
}
612-
613-
<span class="attr">#[derive(Clone)]
614-
#[repr(C)]
615-
</span><span class="kw">struct </span>RawTlasInstance {
616-
transform: [f32; <span class="number">12</span>],
617-
custom_index_and_mask: u32,
618-
shader_binding_table_record_offset_and_flags: u32,
619-
acceleration_structure_reference: u64,
620-
}
621-
622-
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>tlas_instance_into_bytes(
623-
instance: <span class="kw-2">&amp;</span>TlasInstance,
624-
blas_address: u64,
625-
backend: wgt::Backend,
626-
) -&gt; Vec&lt;u8&gt; {
627-
<span class="comment">// TODO: get the device to do this
628-
</span><span class="kw">match </span>backend {
629-
wgt::Backend::Empty =&gt; <span class="macro">vec!</span>[],
630-
wgt::Backend::Vulkan =&gt; {
631-
<span class="kw">const </span>MAX_U24: u32 = (<span class="number">1u32 </span>&lt;&lt; <span class="number">24u32</span>) - <span class="number">1u32</span>;
632-
<span class="kw">let </span>temp = RawTlasInstance {
633-
transform: <span class="kw-2">*</span>instance.transform,
634-
custom_index_and_mask: (instance.custom_index &amp; MAX_U24)
635-
| (u32::from(instance.mask) &lt;&lt; <span class="number">24</span>),
636-
shader_binding_table_record_offset_and_flags: <span class="number">0</span>,
637-
acceleration_structure_reference: blas_address,
638-
};
639-
<span class="kw">let </span>temp: <span class="kw-2">*const </span><span class="kw">_ </span>= <span class="kw-2">&amp;</span>temp;
640-
<span class="kw">unsafe </span>{
641-
slice::from_raw_parts::&lt;u8&gt;(temp.cast::&lt;u8&gt;(), size_of::&lt;RawTlasInstance&gt;())
642-
.to_vec()
643-
}
644-
}
645-
<span class="kw">_ </span>=&gt; <span class="macro">unimplemented!</span>(),
646-
}
647-
}
648558
</code></pre></div></section></main></body></html>

doc/src/wgpu_hal/dynamic/device.rs.html

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,14 +529,19 @@
529529
<a href="#528" id="528">528</a>
530530
<a href="#529" id="529">529</a>
531531
<a href="#530" id="530">530</a>
532+
<a href="#531" id="531">531</a>
533+
<a href="#532" id="532">532</a>
534+
<a href="#533" id="533">533</a>
535+
<a href="#534" id="534">534</a>
536+
<a href="#535" id="535">535</a>
532537
</pre></div><pre class="rust"><code><span class="kw">use crate</span>::{
533538
AccelerationStructureBuildSizes, AccelerationStructureDescriptor, Api, BindGroupDescriptor,
534539
BindGroupLayoutDescriptor, BufferDescriptor, BufferMapping, CommandEncoderDescriptor,
535540
ComputePipelineDescriptor, Device, DeviceError, FenceValue,
536541
GetAccelerationStructureBuildSizesDescriptor, Label, MemoryRange, PipelineCacheDescriptor,
537542
PipelineCacheError, PipelineError, PipelineLayoutDescriptor, RenderPipelineDescriptor,
538543
SamplerDescriptor, ShaderError, ShaderInput, ShaderModuleDescriptor, TextureDescriptor,
539-
TextureViewDescriptor,
544+
TextureViewDescriptor, TlasInstance,
540545
};
541546

542547
<span class="kw">use super</span>::{
@@ -689,6 +694,7 @@
689694
<span class="kw-2">&amp;</span><span class="self">self</span>,
690695
acceleration_structure: Box&lt;<span class="kw">dyn </span>DynAccelerationStructure&gt;,
691696
);
697+
<span class="kw">fn </span>tlas_instance_to_bytes(<span class="kw-2">&amp;</span><span class="self">self</span>, instance: TlasInstance) -&gt; Vec&lt;u8&gt;;
692698

693699
<span class="kw">fn </span>get_internal_counters(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; wgt::HalCounters;
694700
<span class="kw">fn </span>generate_allocator_report(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;wgt::AllocatorReport&gt;;
@@ -1051,6 +1057,10 @@
10511057
<span class="kw">unsafe </span>{ D::destroy_acceleration_structure(<span class="self">self</span>, acceleration_structure.unbox()) }
10521058
}
10531059

1060+
<span class="kw">fn </span>tlas_instance_to_bytes(<span class="kw-2">&amp;</span><span class="self">self</span>, instance: TlasInstance) -&gt; Vec&lt;u8&gt; {
1061+
D::tlas_instance_to_bytes(<span class="self">self</span>, instance)
1062+
}
1063+
10541064
<span class="kw">fn </span>get_internal_counters(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; wgt::HalCounters {
10551065
D::get_internal_counters(<span class="self">self</span>)
10561066
}

doc/src/wgpu_hal/empty.rs.html

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,9 +508,15 @@
508508
<a href="#507" id="507">507</a>
509509
<a href="#508" id="508">508</a>
510510
<a href="#509" id="509">509</a>
511+
<a href="#510" id="510">510</a>
512+
<a href="#511" id="511">511</a>
513+
<a href="#512" id="512">512</a>
514+
<a href="#513" id="513">513</a>
515+
<a href="#514" id="514">514</a>
511516
</pre></div><pre class="rust"><code><span class="attr">#![allow(unused_variables)]
512517

513-
</span><span class="kw">use </span>std::ops::Range;
518+
</span><span class="kw">use </span><span class="kw">crate</span>::TlasInstance;
519+
<span class="kw">use </span>std::ops::Range;
514520

515521
<span class="attr">#[derive(Clone, Debug)]
516522
</span><span class="kw">pub struct </span>Api;
@@ -816,6 +822,10 @@
816822
}
817823
<span class="kw">unsafe fn </span>destroy_acceleration_structure(<span class="kw-2">&amp;</span><span class="self">self</span>, _acceleration_structure: Resource) {}
818824

825+
<span class="kw">fn </span>tlas_instance_to_bytes(<span class="kw-2">&amp;</span><span class="self">self</span>, instance: TlasInstance) -&gt; Vec&lt;u8&gt; {
826+
<span class="macro">vec!</span>[]
827+
}
828+
819829
<span class="kw">fn </span>get_internal_counters(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; wgt::HalCounters {
820830
Default::default()
821831
}

doc/src/wgpu_hal/gles/adapter.rs.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,8 @@
12791279
<a href="#1278" id="1278">1278</a>
12801280
<a href="#1279" id="1279">1279</a>
12811281
<a href="#1280" id="1280">1280</a>
1282+
<a href="#1281" id="1281">1281</a>
1283+
<a href="#1282" id="1282">1282</a>
12821284
</pre></div><pre class="rust"><code><span class="kw">use </span>glow::HasContext;
12831285
<span class="kw">use </span>parking_lot::Mutex;
12841286
<span class="kw">use </span>std::sync::{atomic::AtomicU8, Arc};
@@ -2132,6 +2134,8 @@
21322134
// being, provide 1 as the value here, to cause as little
21332135
// trouble as possible.
21342136
</span>uniform_bounds_check_alignment: wgt::BufferSize::new(<span class="number">1</span>).unwrap(),
2137+
raw_tlas_instance_size: <span class="number">0</span>,
2138+
ray_tracing_scratch_buffer_alignment: <span class="number">0</span>,
21352139
},
21362140
},
21372141
})

doc/src/wgpu_hal/gles/device.rs.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1643,6 +1643,10 @@
16431643
<a href="#1642" id="1642">1642</a>
16441644
<a href="#1643" id="1643">1643</a>
16451645
<a href="#1644" id="1644">1644</a>
1646+
<a href="#1645" id="1645">1645</a>
1647+
<a href="#1646" id="1646">1646</a>
1648+
<a href="#1647" id="1647">1647</a>
1649+
<a href="#1648" id="1648">1648</a>
16461650
</pre></div><pre class="rust"><code><span class="kw">use super</span>::{conv, PrivateCapabilities};
16471651
<span class="kw">use </span><span class="kw">crate</span>::auxil::map_naga_stage;
16481652
<span class="kw">use </span>glow::HasContext;
@@ -1653,7 +1657,7 @@
16531657
sync::{Arc, Mutex},
16541658
};
16551659

1656-
<span class="kw">use </span><span class="kw">crate</span>::AtomicFenceValue;
1660+
<span class="kw">use crate</span>::{AtomicFenceValue, TlasInstance};
16571661
<span class="kw">use </span>arrayvec::ArrayVec;
16581662
<span class="kw">use </span>std::sync::atomic::Ordering;
16591663

@@ -3278,6 +3282,10 @@
32783282
) {
32793283
}
32803284

3285+
<span class="kw">fn </span>tlas_instance_to_bytes(<span class="kw-2">&amp;</span><span class="self">self</span>, _instance: TlasInstance) -&gt; Vec&lt;u8&gt; {
3286+
<span class="macro">unimplemented!</span>()
3287+
}
3288+
32813289
<span class="kw">fn </span>get_internal_counters(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; wgt::HalCounters {
32823290
<span class="self">self</span>.counters.clone()
32833291
}

0 commit comments

Comments
 (0)