From 2fbda5a3c13bb525364b908d602eda4592e0fa40 Mon Sep 17 00:00:00 2001 From: Zakor Gyula Date: Mon, 13 Jan 2020 15:43:53 +0100 Subject: [PATCH] Fix missing memory release --- wgpu-core/src/device/mod.rs | 14 ++++++++++++++ wgpu-core/src/hub.rs | 12 ++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index e938fe9055..c2f8140752 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -445,6 +445,20 @@ impl Device { } } + pub(crate) fn destroy_buffer(&self, buffer: resource::Buffer) { + 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) { + 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(); diff --git a/wgpu-core/src/hub.rs b/wgpu-core/src/hub.rs index 73f324f543..d27a43b9df 100644 --- a/wgpu-core/src/hub.rs +++ b/wgpu-core/src/hub.rs @@ -438,19 +438,11 @@ impl Drop for Hub { } } 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]