Skip to content

Commit 26f65dd

Browse files
committed
[wgpu-hal] remove return type from Device.unmap_buffer()
It's already documented that to unmap a buffer it has to have been mapped. Vulkan was the only backend that was returning an OOM on missing `Buffer.block` but `Buffer.map_buffer` already returns an error in this case.
1 parent 5e2df14 commit 26f65dd

File tree

11 files changed

+25
-57
lines changed

11 files changed

+25
-57
lines changed

wgpu-core/src/device/global.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,7 @@ impl Global {
321321
.raw()
322322
.flush_mapped_ranges(raw_buf, iter::once(offset..offset + data.len() as u64));
323323
}
324-
device
325-
.raw()
326-
.unmap_buffer(raw_buf)
327-
.map_err(DeviceError::from)?;
324+
device.raw().unmap_buffer(raw_buf);
328325
}
329326

330327
Ok(())
@@ -370,10 +367,7 @@ impl Global {
370367
);
371368
}
372369
ptr::copy_nonoverlapping(mapping.ptr.as_ptr(), data.as_mut_ptr(), data.len());
373-
device
374-
.raw()
375-
.unmap_buffer(raw_buf)
376-
.map_err(DeviceError::from)?;
370+
device.raw().unmap_buffer(raw_buf);
377371
}
378372

379373
Ok(())

wgpu-core/src/device/queue.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -410,17 +410,14 @@ impl Global {
410410
let mut pending_writes = device.pending_writes.lock();
411411
let pending_writes = pending_writes.as_mut().unwrap();
412412

413-
if let Err(flush_error) = unsafe {
413+
unsafe {
414414
profiling::scope!("copy");
415415
ptr::copy_nonoverlapping(
416416
data.as_ptr(),
417417
staging_buffer_ptr.as_ptr(),
418418
data_size.get() as usize,
419419
);
420-
staging_buffer.flush()
421-
} {
422-
pending_writes.consume(staging_buffer);
423-
return Err(flush_error.into());
420+
staging_buffer.flush();
424421
}
425422

426423
let result = self.queue_write_staging_buffer_impl(
@@ -492,10 +489,7 @@ impl Global {
492489
// user. Platform validation requires that the staging buffer always
493490
// be freed, even if an error occurs. All paths from here must call
494491
// `device.pending_writes.consume`.
495-
if let Err(flush_error) = unsafe { staging_buffer.flush() } {
496-
pending_writes.consume(staging_buffer);
497-
return Err(flush_error.into());
498-
}
492+
unsafe { staging_buffer.flush() };
499493

500494
let result = self.queue_write_staging_buffer_impl(
501495
&queue,
@@ -823,10 +817,7 @@ impl Global {
823817
}
824818
}
825819

826-
if let Err(e) = unsafe { staging_buffer.flush() } {
827-
pending_writes.consume(staging_buffer);
828-
return Err(e.into());
829-
}
820+
unsafe { staging_buffer.flush() };
830821

831822
let regions = (0..array_layer_count).map(|rel_array_layer| {
832823
let mut texture_base = dst_base.clone();

wgpu-core/src/resource.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -672,10 +672,7 @@ impl<A: HalApi> Buffer<A> {
672672
let mut pending_writes = device.pending_writes.lock();
673673
let pending_writes = pending_writes.as_mut().unwrap();
674674

675-
if let Err(e) = unsafe { staging_buffer.flush() } {
676-
pending_writes.consume(staging_buffer);
677-
return Err(e.into());
678-
}
675+
unsafe { staging_buffer.flush() };
679676

680677
self.use_at(device.active_submission_index.load(Ordering::Relaxed) + 1);
681678
let region = wgt::BufferSize::new(self.size).map(|size| hal::BufferCopy {
@@ -730,12 +727,7 @@ impl<A: HalApi> Buffer<A> {
730727
}
731728
let _ = (ptr, range);
732729
}
733-
unsafe {
734-
device
735-
.raw()
736-
.unmap_buffer(raw_buf)
737-
.map_err(DeviceError::from)?
738-
};
730+
unsafe { device.raw().unmap_buffer(raw_buf) };
739731
}
740732
}
741733
Ok(None)
@@ -899,14 +891,13 @@ impl<A: HalApi> StagingBuffer<A> {
899891
&self.raw
900892
}
901893

902-
pub(crate) unsafe fn flush(&self) -> Result<(), DeviceError> {
894+
pub(crate) unsafe fn flush(&self) {
903895
use hal::Device;
904896
let device = self.device.raw();
905897
if !self.is_coherent {
906898
unsafe { device.flush_mapped_ranges(self.raw(), iter::once(0..self.size.get())) };
907899
}
908-
unsafe { device.unmap_buffer(self.raw())? };
909-
Ok(())
900+
unsafe { device.unmap_buffer(self.raw()) };
910901
}
911902
}
912903

wgpu-hal/examples/halmark/main.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ impl<A: hal::Api> Example<A> {
301301
mapping.ptr.as_ptr(),
302302
texture_data.len(),
303303
);
304-
device.unmap_buffer(&staging_buffer).unwrap();
304+
device.unmap_buffer(&staging_buffer);
305305
assert!(mapping.is_coherent);
306306
}
307307

@@ -410,7 +410,7 @@ impl<A: hal::Api> Example<A> {
410410
mapping.ptr.as_ptr(),
411411
mem::size_of::<Globals>(),
412412
);
413-
device.unmap_buffer(&buffer).unwrap();
413+
device.unmap_buffer(&buffer);
414414
assert!(mapping.is_coherent);
415415
buffer
416416
};
@@ -647,7 +647,7 @@ impl<A: hal::Api> Example<A> {
647647
size,
648648
);
649649
assert!(mapping.is_coherent);
650-
self.device.unmap_buffer(&self.local_buffer).unwrap();
650+
self.device.unmap_buffer(&self.local_buffer);
651651
}
652652
}
653653

wgpu-hal/examples/ray-traced-triangle/main.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ impl<A: hal::Api> Example<A> {
413413
mapping.ptr.as_ptr(),
414414
vertices_size_in_bytes,
415415
);
416-
device.unmap_buffer(&vertices_buffer).unwrap();
416+
device.unmap_buffer(&vertices_buffer);
417417
assert!(mapping.is_coherent);
418418

419419
vertices_buffer
@@ -438,7 +438,7 @@ impl<A: hal::Api> Example<A> {
438438
mapping.ptr.as_ptr(),
439439
indices_size_in_bytes,
440440
);
441-
device.unmap_buffer(&indices_buffer).unwrap();
441+
device.unmap_buffer(&indices_buffer);
442442
assert!(mapping.is_coherent);
443443

444444
indices_buffer
@@ -537,7 +537,7 @@ impl<A: hal::Api> Example<A> {
537537
mapping.ptr.as_ptr(),
538538
uniforms_size,
539539
);
540-
device.unmap_buffer(&uniform_buffer).unwrap();
540+
device.unmap_buffer(&uniform_buffer);
541541
assert!(mapping.is_coherent);
542542
uniform_buffer
543543
};
@@ -680,7 +680,7 @@ impl<A: hal::Api> Example<A> {
680680
mapping.ptr.as_ptr(),
681681
instances_buffer_size,
682682
);
683-
device.unmap_buffer(&instances_buffer).unwrap();
683+
device.unmap_buffer(&instances_buffer);
684684
assert!(mapping.is_coherent);
685685

686686
instances_buffer
@@ -848,7 +848,7 @@ impl<A: hal::Api> Example<A> {
848848
mapping.ptr.as_ptr(),
849849
instances_buffer_size,
850850
);
851-
self.device.unmap_buffer(&self.instances_buffer).unwrap();
851+
self.device.unmap_buffer(&self.instances_buffer);
852852
assert!(mapping.is_coherent);
853853
}
854854

wgpu-hal/src/dx12/device.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,9 +437,8 @@ impl crate::Device for super::Device {
437437
})
438438
}
439439

440-
unsafe fn unmap_buffer(&self, buffer: &super::Buffer) -> Result<(), DeviceError> {
440+
unsafe fn unmap_buffer(&self, buffer: &super::Buffer) {
441441
unsafe { (*buffer.resource).Unmap(0, ptr::null()) };
442-
Ok(())
443442
}
444443

445444
unsafe fn flush_mapped_ranges<I>(&self, _buffer: &super::Buffer, _ranges: I) {}

wgpu-hal/src/empty.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,7 @@ impl crate::Device for Context {
151151
) -> DeviceResult<crate::BufferMapping> {
152152
Err(crate::DeviceError::Lost)
153153
}
154-
unsafe fn unmap_buffer(&self, buffer: &Resource) -> DeviceResult<()> {
155-
Ok(())
156-
}
154+
unsafe fn unmap_buffer(&self, buffer: &Resource) {}
157155
unsafe fn flush_mapped_ranges<I>(&self, buffer: &Resource, ranges: I) {}
158156
unsafe fn invalidate_mapped_ranges<I>(&self, buffer: &Resource, ranges: I) {}
159157

wgpu-hal/src/gles/device.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ impl crate::Device for super::Device {
691691
is_coherent,
692692
})
693693
}
694-
unsafe fn unmap_buffer(&self, buffer: &super::Buffer) -> Result<(), crate::DeviceError> {
694+
unsafe fn unmap_buffer(&self, buffer: &super::Buffer) {
695695
if let Some(raw) = buffer.raw {
696696
if buffer.data.is_none() {
697697
let gl = &self.shared.context.lock();
@@ -700,7 +700,6 @@ impl crate::Device for super::Device {
700700
unsafe { gl.bind_buffer(buffer.target, None) };
701701
}
702702
}
703-
Ok(())
704703
}
705704
unsafe fn flush_mapped_ranges<I>(&self, buffer: &super::Buffer, ranges: I)
706705
where

wgpu-hal/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ pub trait Device: WasmNotSendSync {
728728
/// # Safety
729729
///
730730
/// - The given `buffer` must be currently mapped.
731-
unsafe fn unmap_buffer(&self, buffer: &<Self::A as Api>::Buffer) -> Result<(), DeviceError>;
731+
unsafe fn unmap_buffer(&self, buffer: &<Self::A as Api>::Buffer);
732732

733733
/// Indicate that CPU writes to mapped buffer memory should be made visible to the GPU.
734734
///

wgpu-hal/src/metal/device.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,7 @@ impl crate::Device for super::Device {
370370
})
371371
}
372372

373-
unsafe fn unmap_buffer(&self, _buffer: &super::Buffer) -> DeviceResult<()> {
374-
Ok(())
375-
}
373+
unsafe fn unmap_buffer(&self, _buffer: &super::Buffer) {}
376374
unsafe fn flush_mapped_ranges<I>(&self, _buffer: &super::Buffer, _ranges: I) {}
377375
unsafe fn invalidate_mapped_ranges<I>(&self, _buffer: &super::Buffer, _ranges: I) {}
378376

0 commit comments

Comments
 (0)