mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-21 22:33:49 +00:00
remove Hub.clear()
This commit is contained in:
parent
3eb9c781cf
commit
c0e39721a2
@ -24,9 +24,10 @@ impl GlobalReport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Global {
|
pub struct Global {
|
||||||
pub instance: Instance,
|
|
||||||
pub(crate) surfaces: Registry<Arc<Surface>>,
|
pub(crate) surfaces: Registry<Arc<Surface>>,
|
||||||
pub(crate) hub: Hub,
|
pub(crate) hub: Hub,
|
||||||
|
// the instance must be dropped last
|
||||||
|
pub instance: Instance,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Global {
|
impl Global {
|
||||||
@ -88,12 +89,10 @@ impl Drop for Global {
|
|||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
profiling::scope!("Global::drop");
|
profiling::scope!("Global::drop");
|
||||||
resource_log!("Global::drop");
|
resource_log!("Global::drop");
|
||||||
let mut surfaces_locked = self.surfaces.write();
|
|
||||||
|
|
||||||
// destroy hub before the instance gets dropped
|
for (_, device) in self.hub.devices.read().iter() {
|
||||||
self.hub.clear(&surfaces_locked);
|
device.prepare_to_die();
|
||||||
|
}
|
||||||
surfaces_locked.map.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,11 +104,10 @@ use crate::{
|
|||||||
binding_model::{BindGroup, BindGroupLayout, PipelineLayout},
|
binding_model::{BindGroup, BindGroupLayout, PipelineLayout},
|
||||||
command::{CommandBuffer, RenderBundle},
|
command::{CommandBuffer, RenderBundle},
|
||||||
device::{queue::Queue, Device},
|
device::{queue::Queue, Device},
|
||||||
instance::{Adapter, Surface},
|
instance::Adapter,
|
||||||
pipeline::{ComputePipeline, PipelineCache, RenderPipeline, ShaderModule},
|
pipeline::{ComputePipeline, PipelineCache, RenderPipeline, ShaderModule},
|
||||||
registry::{Registry, RegistryReport},
|
registry::{Registry, RegistryReport},
|
||||||
resource::{Buffer, Fallible, QuerySet, Sampler, StagingBuffer, Texture, TextureView},
|
resource::{Buffer, Fallible, QuerySet, Sampler, StagingBuffer, Texture, TextureView},
|
||||||
storage::{Element, Storage},
|
|
||||||
};
|
};
|
||||||
use std::{fmt::Debug, sync::Arc};
|
use std::{fmt::Debug, sync::Arc};
|
||||||
|
|
||||||
@ -159,8 +158,7 @@ impl HubReport {
|
|||||||
/// Inside the `Registry` there are `Arc<T>` where `T` is a Resource
|
/// Inside the `Registry` there are `Arc<T>` where `T` is a Resource
|
||||||
/// Lock of `Registry` happens only when accessing to get the specific resource
|
/// Lock of `Registry` happens only when accessing to get the specific resource
|
||||||
///
|
///
|
||||||
///
|
/// [`Storage`]: crate::storage::Storage
|
||||||
/// [`A::hub(global)`]: HalApi::hub
|
|
||||||
pub struct Hub {
|
pub struct Hub {
|
||||||
pub(crate) adapters: Registry<Arc<Adapter>>,
|
pub(crate) adapters: Registry<Arc<Adapter>>,
|
||||||
pub(crate) devices: Registry<Arc<Device>>,
|
pub(crate) devices: Registry<Arc<Device>>,
|
||||||
@ -206,46 +204,6 @@ impl Hub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn clear(&self, surface_guard: &Storage<Arc<Surface>>) {
|
|
||||||
let mut devices = self.devices.write();
|
|
||||||
for element in devices.map.iter() {
|
|
||||||
if let Element::Occupied(ref device, _) = *element {
|
|
||||||
device.prepare_to_die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.command_buffers.write().map.clear();
|
|
||||||
self.samplers.write().map.clear();
|
|
||||||
self.texture_views.write().map.clear();
|
|
||||||
self.textures.write().map.clear();
|
|
||||||
self.buffers.write().map.clear();
|
|
||||||
self.bind_groups.write().map.clear();
|
|
||||||
self.shader_modules.write().map.clear();
|
|
||||||
self.bind_group_layouts.write().map.clear();
|
|
||||||
self.pipeline_layouts.write().map.clear();
|
|
||||||
self.compute_pipelines.write().map.clear();
|
|
||||||
self.render_pipelines.write().map.clear();
|
|
||||||
self.pipeline_caches.write().map.clear();
|
|
||||||
self.query_sets.write().map.clear();
|
|
||||||
|
|
||||||
for element in surface_guard.map.iter() {
|
|
||||||
if let Element::Occupied(ref surface, _epoch) = *element {
|
|
||||||
if let Some(ref mut present) = surface.presentation.lock().take() {
|
|
||||||
let suf = surface.raw(present.device.backend());
|
|
||||||
unsafe {
|
|
||||||
suf.unwrap().unconfigure(present.device.raw());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.queues.write().map.clear();
|
|
||||||
devices.map.clear();
|
|
||||||
|
|
||||||
drop(devices);
|
|
||||||
self.adapters.write().map.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn generate_report(&self) -> HubReport {
|
pub fn generate_report(&self) -> HubReport {
|
||||||
HubReport {
|
HubReport {
|
||||||
adapters: self.adapters.generate_report(),
|
adapters: self.adapters.generate_report(),
|
||||||
|
Loading…
Reference in New Issue
Block a user