Skip to content

Commit 5e25785

Browse files
committed
Put shader binding data into pending writes.
1 parent 11b1d3a commit 5e25785

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

wgpu-core/src/device/queue.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use crate::{
3030
get_lowest_common_denom, hal_label,
3131
init_tracker::{has_copy_partial_init_tracker_coverage, TextureInitRange},
3232
lock::{rank, Mutex, MutexGuard, RwLock, RwLockWriteGuard},
33+
pipeline,
3334
ray_tracing::{BlasCompactReadyPendingClosure, CompactBlasError},
3435
resource::{
3536
Blas, BlasCompactState, BlasDescriptor, BlasState, Buffer, BufferAccessError,
@@ -396,6 +397,7 @@ pub(crate) struct PendingWrites {
396397
dst_buffers: FastHashMap<TrackerIndex, Arc<Buffer>>,
397398
dst_textures: FastHashMap<TrackerIndex, Arc<Texture>>,
398399
copied_blas_s: FastHashMap<TrackerIndex, Arc<Blas>>,
400+
written_shader_binding_data: Vec<Arc<pipeline::ShaderBindingData>>,
399401
instance_flags: wgt::InstanceFlags,
400402
}
401403

@@ -412,6 +414,7 @@ impl PendingWrites {
412414
dst_textures: FastHashMap::default(),
413415
copied_blas_s: FastHashMap::default(),
414416
instance_flags,
417+
written_shader_binding_data: Vec::new(),
415418
}
416419
}
417420

@@ -430,6 +433,10 @@ impl PendingWrites {
430433
.insert(blas.tracker_index(), blas.clone());
431434
}
432435

436+
pub fn use_shader_binding_data(&mut self, sbd: &Arc<pipeline::ShaderBindingData>) {
437+
self.written_shader_binding_data.push(sbd.clone())
438+
}
439+
433440
pub fn contains_buffer(&self, buffer: &Arc<Buffer>) -> bool {
434441
self.dst_buffers.contains_key(&buffer.tracker_index())
435442
}

wgpu-core/src/pipeline.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,7 +1315,7 @@ impl ShaderBindingData {
13151315
device: Arc<Device>,
13161316
pipeline: &dyn hal::DynRayTracingPipeline,
13171317
num_intersection_groups: usize,
1318-
) -> Result<Self, CreateRayTracingPipelineError> {
1318+
) -> Result<Arc<Self>, CreateRayTracingPipelineError> {
13191319
let mut base_data = Vec::new();
13201320

13211321
let ray_generation_data = unsafe {
@@ -1371,6 +1371,14 @@ impl ShaderBindingData {
13711371
}
13721372
.map_err(|e| CreateRayTracingPipelineError::Device(device.handle_hal_error(e)))?;
13731373

1374+
let sbd = Arc::new(Self {
1375+
raw: ManuallyDrop::new(buffer),
1376+
device: device.clone(),
1377+
num_intersection_groups: u32::try_from(num_intersection_groups).unwrap(),
1378+
miss_offset: padded_miss_offset,
1379+
intersection_offset: padded_intersection_offset,
1380+
});
1381+
13741382
// If there is no queue anymore, the ray tracing pipeline can't be accessed, so we don't have to worry about UB from uninitialized values
13751383
if let Some(queue) = device.get_queue() {
13761384
let mut staging = crate::resource::StagingBuffer::new(
@@ -1390,7 +1398,7 @@ impl ShaderBindingData {
13901398
unsafe {
13911399
encoder.copy_buffer_to_buffer(
13921400
staging_buf.raw(),
1393-
buffer.as_ref(),
1401+
sbd.raw.as_ref(),
13941402
&[hal::BufferCopy {
13951403
src_offset: 0,
13961404
dst_offset: 0,
@@ -1401,15 +1409,10 @@ impl ShaderBindingData {
14011409
};
14021410

14031411
writes.consume(staging_buf);
1412+
writes.use_shader_binding_data(&sbd);
14041413
}
14051414

1406-
Ok(Self {
1407-
raw: ManuallyDrop::new(buffer),
1408-
device,
1409-
num_intersection_groups: u32::try_from(num_intersection_groups).unwrap(),
1410-
miss_offset: padded_miss_offset,
1411-
intersection_offset: padded_intersection_offset,
1412-
})
1415+
Ok(sbd)
14131416
}
14141417
}
14151418

@@ -1427,7 +1430,7 @@ impl Drop for ShaderBindingData {
14271430
pub(crate) struct RayTracingPipelineState {
14281431
pub(crate) raw: ManuallyDrop<Box<dyn hal::DynRayTracingPipeline>>,
14291432
pub(crate) layout: Arc<PipelineLayout>,
1430-
pub(crate) shader_binding_data: ShaderBindingData,
1433+
pub(crate) shader_binding_data: Arc<ShaderBindingData>,
14311434
pub(crate) _shader_modules: Vec<Arc<ShaderModule>>,
14321435
}
14331436

0 commit comments

Comments
 (0)