mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-02-16 17:02:32 +00:00
Merge #449
449: Fix missing memory release r=kvark a=zakorgy This fixes the issue where the underlying memory of buffers and textures not released when calling `Global::delete`. cc @kvark <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/gfx-rs/wgpu/449) <!-- Reviewable:end --> Co-authored-by: Zakor Gyula <gyula.zakor@h-lab.eu>
This commit is contained in:
commit
c0fa61a064
@ -445,11 +445,27 @@ impl<B: hal::Backend> Device<B> {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn destroy_buffer(&self, buffer: resource::Buffer<B>) {
|
||||
unsafe {
|
||||
self.mem_allocator.lock().free(&self.raw, buffer.memory);
|
||||
self.raw.destroy_buffer(buffer.raw);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn destroy_texture(&self, texture: resource::Texture<B>) {
|
||||
unsafe {
|
||||
self.mem_allocator.lock().free(&self.raw, texture.memory);
|
||||
self.raw.destroy_image(texture.raw);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn dispose(self) {
|
||||
self.com_allocator.destroy(&self.raw);
|
||||
let desc_alloc = self.desc_allocator.into_inner();
|
||||
let mem_alloc = self.mem_allocator.into_inner();
|
||||
unsafe {
|
||||
desc_alloc.dispose(&self.raw);
|
||||
mem_alloc.dispose(&self.raw);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -438,19 +438,11 @@ impl<B: hal::Backend, F> Drop for Hub<B, F> {
|
||||
}
|
||||
}
|
||||
for (_, (texture, _)) in self.textures.data.write().map.drain() {
|
||||
unsafe {
|
||||
devices[texture.device_id.value]
|
||||
.raw
|
||||
.destroy_image(texture.raw);
|
||||
}
|
||||
devices[texture.device_id.value].destroy_texture(texture);
|
||||
}
|
||||
for (_, (buffer, _)) in self.buffers.data.write().map.drain() {
|
||||
//TODO: unmap if needed
|
||||
unsafe {
|
||||
devices[buffer.device_id.value]
|
||||
.raw
|
||||
.destroy_buffer(buffer.raw);
|
||||
}
|
||||
devices[buffer.device_id.value].destroy_buffer(buffer);
|
||||
}
|
||||
for (_, (command_buffer, _)) in self.command_buffers.data.write().map.drain() {
|
||||
devices[command_buffer.device_id.value]
|
||||
|
Loading…
Reference in New Issue
Block a user