mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-02-16 17:02:32 +00:00
move code after calls to FutureId.assign
inside Device
fns
This commit is contained in:
parent
40022c1584
commit
7f3e1bba14
@ -347,7 +347,7 @@ impl RenderBundleEncoder {
|
|||||||
desc: &RenderBundleDescriptor,
|
desc: &RenderBundleDescriptor,
|
||||||
device: &Arc<Device<A>>,
|
device: &Arc<Device<A>>,
|
||||||
hub: &Hub<A>,
|
hub: &Hub<A>,
|
||||||
) -> Result<RenderBundle<A>, RenderBundleError> {
|
) -> Result<Arc<RenderBundle<A>>, RenderBundleError> {
|
||||||
let scope = PassErrorScope::Bundle;
|
let scope = PassErrorScope::Bundle;
|
||||||
|
|
||||||
device.check_is_valid().map_pass_err(scope)?;
|
device.check_is_valid().map_pass_err(scope)?;
|
||||||
@ -562,7 +562,7 @@ impl RenderBundleEncoder {
|
|||||||
.instance_flags
|
.instance_flags
|
||||||
.contains(wgt::InstanceFlags::DISCARD_HAL_LABELS);
|
.contains(wgt::InstanceFlags::DISCARD_HAL_LABELS);
|
||||||
|
|
||||||
Ok(RenderBundle {
|
let render_bundle = RenderBundle {
|
||||||
base: BasePass {
|
base: BasePass {
|
||||||
label: desc.label.as_ref().map(|cow| cow.to_string()),
|
label: desc.label.as_ref().map(|cow| cow.to_string()),
|
||||||
commands,
|
commands,
|
||||||
@ -572,7 +572,7 @@ impl RenderBundleEncoder {
|
|||||||
},
|
},
|
||||||
is_depth_read_only: self.is_depth_read_only,
|
is_depth_read_only: self.is_depth_read_only,
|
||||||
is_stencil_read_only: self.is_stencil_read_only,
|
is_stencil_read_only: self.is_stencil_read_only,
|
||||||
device,
|
device: device.clone(),
|
||||||
used: trackers,
|
used: trackers,
|
||||||
buffer_memory_init_actions,
|
buffer_memory_init_actions,
|
||||||
texture_memory_init_actions,
|
texture_memory_init_actions,
|
||||||
@ -580,7 +580,17 @@ impl RenderBundleEncoder {
|
|||||||
label: desc.label.to_string(),
|
label: desc.label.to_string(),
|
||||||
tracking_data: TrackingData::new(tracker_indices),
|
tracking_data: TrackingData::new(tracker_indices),
|
||||||
discard_hal_labels,
|
discard_hal_labels,
|
||||||
})
|
};
|
||||||
|
|
||||||
|
let render_bundle = Arc::new(render_bundle);
|
||||||
|
|
||||||
|
device
|
||||||
|
.trackers
|
||||||
|
.lock()
|
||||||
|
.bundles
|
||||||
|
.insert_single(render_bundle.clone());
|
||||||
|
|
||||||
|
Ok(render_bundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_index_buffer(
|
pub fn set_index_buffer(
|
||||||
|
@ -487,15 +487,9 @@ impl Global {
|
|||||||
Err(error) => break 'error error,
|
Err(error) => break 'error error,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(texture));
|
let (id, _) = fid.assign(texture);
|
||||||
api_log!("Device::create_texture({desc:?}) -> {id:?}");
|
api_log!("Device::create_texture({desc:?}) -> {id:?}");
|
||||||
|
|
||||||
device
|
|
||||||
.trackers
|
|
||||||
.lock()
|
|
||||||
.textures
|
|
||||||
.insert_single(&resource, hal::TextureUses::UNINITIALIZED);
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -541,15 +535,9 @@ impl Global {
|
|||||||
Err(error) => break 'error error,
|
Err(error) => break 'error error,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(texture));
|
let (id, _) = fid.assign(texture);
|
||||||
api_log!("Device::create_texture({desc:?}) -> {id:?}");
|
api_log!("Device::create_texture({desc:?}) -> {id:?}");
|
||||||
|
|
||||||
device
|
|
||||||
.trackers
|
|
||||||
.lock()
|
|
||||||
.textures
|
|
||||||
.insert_single(&resource, hal::TextureUses::UNINITIALIZED);
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -591,15 +579,9 @@ impl Global {
|
|||||||
|
|
||||||
let buffer = device.create_buffer_from_hal(hal_buffer, desc);
|
let buffer = device.create_buffer_from_hal(hal_buffer, desc);
|
||||||
|
|
||||||
let (id, buffer) = fid.assign(Arc::new(buffer));
|
let (id, _) = fid.assign(buffer);
|
||||||
api_log!("Device::create_buffer -> {id:?}");
|
api_log!("Device::create_buffer -> {id:?}");
|
||||||
|
|
||||||
device
|
|
||||||
.trackers
|
|
||||||
.lock()
|
|
||||||
.buffers
|
|
||||||
.insert_single(&buffer, hal::BufferUses::empty());
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -711,19 +693,10 @@ impl Global {
|
|||||||
Err(e) => break 'error e,
|
Err(e) => break 'error e,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(view));
|
let (id, _) = fid.assign(view);
|
||||||
|
|
||||||
{
|
|
||||||
let mut views = texture.views.lock();
|
|
||||||
|
|
||||||
// Remove stale weak references
|
|
||||||
views.retain(|view| view.strong_count() > 0);
|
|
||||||
|
|
||||||
views.push(Arc::downgrade(&resource));
|
|
||||||
}
|
|
||||||
|
|
||||||
api_log!("Texture::create_view({texture_id:?}) -> {id:?}");
|
api_log!("Texture::create_view({texture_id:?}) -> {id:?}");
|
||||||
device.trackers.lock().views.insert_single(resource);
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -795,9 +768,8 @@ impl Global {
|
|||||||
Err(e) => break 'error e,
|
Err(e) => break 'error e,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(sampler));
|
let (id, _) = fid.assign(sampler);
|
||||||
api_log!("Device::create_sampler -> {id:?}");
|
api_log!("Device::create_sampler -> {id:?}");
|
||||||
device.trackers.lock().samplers.insert_single(resource);
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
@ -1132,29 +1104,10 @@ impl Global {
|
|||||||
Err(e) => break 'error e,
|
Err(e) => break 'error e,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(bind_group));
|
let (id, _) = fid.assign(bind_group);
|
||||||
|
|
||||||
let weak_ref = Arc::downgrade(&resource);
|
|
||||||
for range in &resource.used_texture_ranges {
|
|
||||||
let mut bind_groups = range.texture.bind_groups.lock();
|
|
||||||
|
|
||||||
// Remove stale weak references
|
|
||||||
bind_groups.retain(|bg| bg.strong_count() > 0);
|
|
||||||
|
|
||||||
bind_groups.push(weak_ref.clone());
|
|
||||||
}
|
|
||||||
for range in &resource.used_buffer_ranges {
|
|
||||||
let mut bind_groups = range.buffer.bind_groups.lock();
|
|
||||||
|
|
||||||
// Remove stale weak references
|
|
||||||
bind_groups.retain(|bg| bg.strong_count() > 0);
|
|
||||||
|
|
||||||
bind_groups.push(weak_ref.clone());
|
|
||||||
}
|
|
||||||
|
|
||||||
api_log!("Device::create_bind_group -> {id:?}");
|
api_log!("Device::create_bind_group -> {id:?}");
|
||||||
|
|
||||||
device.trackers.lock().bind_groups.insert_single(resource);
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1449,9 +1402,9 @@ impl Global {
|
|||||||
Err(e) => break 'error e,
|
Err(e) => break 'error e,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(render_bundle));
|
let (id, _) = fid.assign(render_bundle);
|
||||||
api_log!("RenderBundleEncoder::finish -> {id:?}");
|
api_log!("RenderBundleEncoder::finish -> {id:?}");
|
||||||
device.trackers.lock().bundles.insert_single(resource);
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1510,9 +1463,8 @@ impl Global {
|
|||||||
Err(err) => break 'error err,
|
Err(err) => break 'error err,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (id, resource) = fid.assign(Arc::new(query_set));
|
let (id, _) = fid.assign(query_set);
|
||||||
api_log!("Device::create_query_set -> {id:?}");
|
api_log!("Device::create_query_set -> {id:?}");
|
||||||
device.trackers.lock().query_sets.insert_single(resource);
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
@ -1707,15 +1659,9 @@ impl Global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let (id, resource) = fid.assign(pipeline);
|
let (id, _) = fid.assign(pipeline);
|
||||||
api_log!("Device::create_render_pipeline -> {id:?}");
|
api_log!("Device::create_render_pipeline -> {id:?}");
|
||||||
|
|
||||||
device
|
|
||||||
.trackers
|
|
||||||
.lock()
|
|
||||||
.render_pipelines
|
|
||||||
.insert_single(resource);
|
|
||||||
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1915,14 +1861,9 @@ impl Global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let (id, resource) = fid.assign(pipeline);
|
let (id, _) = fid.assign(pipeline);
|
||||||
api_log!("Device::create_compute_pipeline -> {id:?}");
|
api_log!("Device::create_compute_pipeline -> {id:?}");
|
||||||
|
|
||||||
device
|
|
||||||
.trackers
|
|
||||||
.lock()
|
|
||||||
.compute_pipelines
|
|
||||||
.insert_single(resource);
|
|
||||||
return (id, None);
|
return (id, None);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -735,7 +735,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
hal_texture: A::Texture,
|
hal_texture: A::Texture,
|
||||||
desc: &resource::TextureDescriptor,
|
desc: &resource::TextureDescriptor,
|
||||||
) -> Result<Texture<A>, resource::CreateTextureError> {
|
) -> Result<Arc<Texture<A>>, resource::CreateTextureError> {
|
||||||
let format_features = self
|
let format_features = self
|
||||||
.describe_format_features(&self.adapter, desc.format)
|
.describe_format_features(&self.adapter, desc.format)
|
||||||
.map_err(|error| resource::CreateTextureError::MissingFeatures(desc.format, error))?;
|
.map_err(|error| resource::CreateTextureError::MissingFeatures(desc.format, error))?;
|
||||||
@ -750,6 +750,13 @@ impl<A: HalApi> Device<A> {
|
|||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let texture = Arc::new(texture);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.textures
|
||||||
|
.insert_single(&texture, hal::TextureUses::UNINITIALIZED);
|
||||||
|
|
||||||
Ok(texture)
|
Ok(texture)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -757,8 +764,8 @@ impl<A: HalApi> Device<A> {
|
|||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
hal_buffer: A::Buffer,
|
hal_buffer: A::Buffer,
|
||||||
desc: &resource::BufferDescriptor,
|
desc: &resource::BufferDescriptor,
|
||||||
) -> Buffer<A> {
|
) -> Arc<Buffer<A>> {
|
||||||
Buffer {
|
let buffer = Buffer {
|
||||||
raw: Snatchable::new(hal_buffer),
|
raw: Snatchable::new(hal_buffer),
|
||||||
device: self.clone(),
|
device: self.clone(),
|
||||||
usage: desc.usage,
|
usage: desc.usage,
|
||||||
@ -772,14 +779,23 @@ impl<A: HalApi> Device<A> {
|
|||||||
label: desc.label.to_string(),
|
label: desc.label.to_string(),
|
||||||
tracking_data: TrackingData::new(self.tracker_indices.buffers.clone()),
|
tracking_data: TrackingData::new(self.tracker_indices.buffers.clone()),
|
||||||
bind_groups: Mutex::new(rank::BUFFER_BIND_GROUPS, Vec::new()),
|
bind_groups: Mutex::new(rank::BUFFER_BIND_GROUPS, Vec::new()),
|
||||||
}
|
};
|
||||||
|
|
||||||
|
let buffer = Arc::new(buffer);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.buffers
|
||||||
|
.insert_single(&buffer, hal::BufferUses::empty());
|
||||||
|
|
||||||
|
buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn create_texture(
|
pub(crate) fn create_texture(
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
adapter: &Adapter<A>,
|
adapter: &Adapter<A>,
|
||||||
desc: &resource::TextureDescriptor,
|
desc: &resource::TextureDescriptor,
|
||||||
) -> Result<Texture<A>, resource::CreateTextureError> {
|
) -> Result<Arc<Texture<A>>, resource::CreateTextureError> {
|
||||||
use resource::{CreateTextureError, TextureDimensionError};
|
use resource::{CreateTextureError, TextureDimensionError};
|
||||||
|
|
||||||
self.check_is_valid()?;
|
self.check_is_valid()?;
|
||||||
@ -1057,6 +1073,13 @@ impl<A: HalApi> Device<A> {
|
|||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let texture = Arc::new(texture);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.textures
|
||||||
|
.insert_single(&texture, hal::TextureUses::UNINITIALIZED);
|
||||||
|
|
||||||
Ok(texture)
|
Ok(texture)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1064,7 +1087,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
texture: &Arc<Texture<A>>,
|
texture: &Arc<Texture<A>>,
|
||||||
desc: &resource::TextureViewDescriptor,
|
desc: &resource::TextureViewDescriptor,
|
||||||
) -> Result<TextureView<A>, resource::CreateTextureViewError> {
|
) -> Result<Arc<TextureView<A>>, resource::CreateTextureViewError> {
|
||||||
let snatch_guard = texture.device.snatchable_lock.read();
|
let snatch_guard = texture.device.snatchable_lock.read();
|
||||||
|
|
||||||
let texture_raw = texture.try_raw(&snatch_guard)?;
|
let texture_raw = texture.try_raw(&snatch_guard)?;
|
||||||
@ -1339,7 +1362,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
layers: desc.range.base_array_layer..array_layer_end,
|
layers: desc.range.base_array_layer..array_layer_end,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(TextureView {
|
let view = TextureView {
|
||||||
raw: Snatchable::new(raw),
|
raw: Snatchable::new(raw),
|
||||||
parent: texture.clone(),
|
parent: texture.clone(),
|
||||||
device: self.clone(),
|
device: self.clone(),
|
||||||
@ -1355,13 +1378,28 @@ impl<A: HalApi> Device<A> {
|
|||||||
selector,
|
selector,
|
||||||
label: desc.label.to_string(),
|
label: desc.label.to_string(),
|
||||||
tracking_data: TrackingData::new(self.tracker_indices.texture_views.clone()),
|
tracking_data: TrackingData::new(self.tracker_indices.texture_views.clone()),
|
||||||
})
|
};
|
||||||
|
|
||||||
|
let view = Arc::new(view);
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut views = texture.views.lock();
|
||||||
|
|
||||||
|
// Remove stale weak references
|
||||||
|
views.retain(|view| view.strong_count() > 0);
|
||||||
|
|
||||||
|
views.push(Arc::downgrade(&view));
|
||||||
|
}
|
||||||
|
|
||||||
|
self.trackers.lock().views.insert_single(view.clone());
|
||||||
|
|
||||||
|
Ok(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn create_sampler(
|
pub(crate) fn create_sampler(
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
desc: &resource::SamplerDescriptor,
|
desc: &resource::SamplerDescriptor,
|
||||||
) -> Result<Sampler<A>, resource::CreateSamplerError> {
|
) -> Result<Arc<Sampler<A>>, resource::CreateSamplerError> {
|
||||||
self.check_is_valid()?;
|
self.check_is_valid()?;
|
||||||
|
|
||||||
if desc
|
if desc
|
||||||
@ -1457,7 +1495,8 @@ impl<A: HalApi> Device<A> {
|
|||||||
.create_sampler(&hal_desc)
|
.create_sampler(&hal_desc)
|
||||||
.map_err(DeviceError::from)?
|
.map_err(DeviceError::from)?
|
||||||
};
|
};
|
||||||
Ok(Sampler {
|
|
||||||
|
let sampler = Sampler {
|
||||||
raw: Some(raw),
|
raw: Some(raw),
|
||||||
device: self.clone(),
|
device: self.clone(),
|
||||||
label: desc.label.to_string(),
|
label: desc.label.to_string(),
|
||||||
@ -1465,7 +1504,13 @@ impl<A: HalApi> Device<A> {
|
|||||||
comparison: desc.compare.is_some(),
|
comparison: desc.compare.is_some(),
|
||||||
filtering: desc.min_filter == wgt::FilterMode::Linear
|
filtering: desc.min_filter == wgt::FilterMode::Linear
|
||||||
|| desc.mag_filter == wgt::FilterMode::Linear,
|
|| desc.mag_filter == wgt::FilterMode::Linear,
|
||||||
})
|
};
|
||||||
|
|
||||||
|
let sampler = Arc::new(sampler);
|
||||||
|
|
||||||
|
self.trackers.lock().samplers.insert_single(sampler.clone());
|
||||||
|
|
||||||
|
Ok(sampler)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn create_shader_module<'a>(
|
pub(crate) fn create_shader_module<'a>(
|
||||||
@ -2152,7 +2197,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
pub(crate) fn create_bind_group(
|
pub(crate) fn create_bind_group(
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
desc: binding_model::ResolvedBindGroupDescriptor<A>,
|
desc: binding_model::ResolvedBindGroupDescriptor<A>,
|
||||||
) -> Result<BindGroup<A>, binding_model::CreateBindGroupError> {
|
) -> Result<Arc<BindGroup<A>>, binding_model::CreateBindGroupError> {
|
||||||
use crate::binding_model::{CreateBindGroupError as Error, ResolvedBindingResource as Br};
|
use crate::binding_model::{CreateBindGroupError as Error, ResolvedBindingResource as Br};
|
||||||
|
|
||||||
let layout = desc.layout;
|
let layout = desc.layout;
|
||||||
@ -2327,7 +2372,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
.flat_map(|binding| late_buffer_binding_sizes.get(&binding).cloned())
|
.flat_map(|binding| late_buffer_binding_sizes.get(&binding).cloned())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
Ok(BindGroup {
|
let bind_group = BindGroup {
|
||||||
raw: Snatchable::new(raw),
|
raw: Snatchable::new(raw),
|
||||||
device: self.clone(),
|
device: self.clone(),
|
||||||
layout,
|
layout,
|
||||||
@ -2338,7 +2383,34 @@ impl<A: HalApi> Device<A> {
|
|||||||
used_texture_ranges,
|
used_texture_ranges,
|
||||||
dynamic_binding_info,
|
dynamic_binding_info,
|
||||||
late_buffer_binding_sizes,
|
late_buffer_binding_sizes,
|
||||||
})
|
};
|
||||||
|
|
||||||
|
let bind_group = Arc::new(bind_group);
|
||||||
|
|
||||||
|
let weak_ref = Arc::downgrade(&bind_group);
|
||||||
|
for range in &bind_group.used_texture_ranges {
|
||||||
|
let mut bind_groups = range.texture.bind_groups.lock();
|
||||||
|
|
||||||
|
// Remove stale weak references
|
||||||
|
bind_groups.retain(|bg| bg.strong_count() > 0);
|
||||||
|
|
||||||
|
bind_groups.push(weak_ref.clone());
|
||||||
|
}
|
||||||
|
for range in &bind_group.used_buffer_ranges {
|
||||||
|
let mut bind_groups = range.buffer.bind_groups.lock();
|
||||||
|
|
||||||
|
// Remove stale weak references
|
||||||
|
bind_groups.retain(|bg| bg.strong_count() > 0);
|
||||||
|
|
||||||
|
bind_groups.push(weak_ref.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.bind_groups
|
||||||
|
.insert_single(bind_group.clone());
|
||||||
|
|
||||||
|
Ok(bind_group)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn check_array_binding(
|
pub(crate) fn check_array_binding(
|
||||||
@ -2758,6 +2830,11 @@ impl<A: HalApi> Device<A> {
|
|||||||
|
|
||||||
let pipeline = Arc::new(pipeline);
|
let pipeline = Arc::new(pipeline);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.compute_pipelines
|
||||||
|
.insert_single(pipeline.clone());
|
||||||
|
|
||||||
if is_auto_layout {
|
if is_auto_layout {
|
||||||
for bgl in pipeline.layout.bind_group_layouts.iter() {
|
for bgl in pipeline.layout.bind_group_layouts.iter() {
|
||||||
bgl.exclusive_pipeline
|
bgl.exclusive_pipeline
|
||||||
@ -3385,6 +3462,11 @@ impl<A: HalApi> Device<A> {
|
|||||||
|
|
||||||
let pipeline = Arc::new(pipeline);
|
let pipeline = Arc::new(pipeline);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.render_pipelines
|
||||||
|
.insert_single(pipeline.clone());
|
||||||
|
|
||||||
if is_auto_layout {
|
if is_auto_layout {
|
||||||
for bgl in pipeline.layout.bind_group_layouts.iter() {
|
for bgl in pipeline.layout.bind_group_layouts.iter() {
|
||||||
bgl.exclusive_pipeline
|
bgl.exclusive_pipeline
|
||||||
@ -3525,7 +3607,7 @@ impl<A: HalApi> Device<A> {
|
|||||||
pub(crate) fn create_query_set(
|
pub(crate) fn create_query_set(
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
desc: &resource::QuerySetDescriptor,
|
desc: &resource::QuerySetDescriptor,
|
||||||
) -> Result<QuerySet<A>, resource::CreateQuerySetError> {
|
) -> Result<Arc<QuerySet<A>>, resource::CreateQuerySetError> {
|
||||||
use resource::CreateQuerySetError as Error;
|
use resource::CreateQuerySetError as Error;
|
||||||
|
|
||||||
self.check_is_valid()?;
|
self.check_is_valid()?;
|
||||||
@ -3552,13 +3634,23 @@ impl<A: HalApi> Device<A> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let hal_desc = desc.map_label(|label| label.to_hal(self.instance_flags));
|
let hal_desc = desc.map_label(|label| label.to_hal(self.instance_flags));
|
||||||
Ok(QuerySet {
|
|
||||||
|
let query_set = QuerySet {
|
||||||
raw: Some(unsafe { self.raw().create_query_set(&hal_desc).unwrap() }),
|
raw: Some(unsafe { self.raw().create_query_set(&hal_desc).unwrap() }),
|
||||||
device: self.clone(),
|
device: self.clone(),
|
||||||
label: desc.label.to_string(),
|
label: desc.label.to_string(),
|
||||||
tracking_data: TrackingData::new(self.tracker_indices.query_sets.clone()),
|
tracking_data: TrackingData::new(self.tracker_indices.query_sets.clone()),
|
||||||
desc: desc.map_label(|_| ()),
|
desc: desc.map_label(|_| ()),
|
||||||
})
|
};
|
||||||
|
|
||||||
|
let query_set = Arc::new(query_set);
|
||||||
|
|
||||||
|
self.trackers
|
||||||
|
.lock()
|
||||||
|
.query_sets
|
||||||
|
.insert_single(query_set.clone());
|
||||||
|
|
||||||
|
Ok(query_set)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn lose(&self, message: &str) {
|
pub(crate) fn lose(&self, message: &str) {
|
||||||
|
Loading…
Reference in New Issue
Block a user