From f34f7eb658b4cffa4968c323b28b6dc528febf93 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:01:20 +0200 Subject: [PATCH] impl `ParentDevice` via macro --- wgpu-core/src/binding_model.rs | 23 +++----------- wgpu-core/src/command/bundle.rs | 7 +---- wgpu-core/src/command/mod.rs | 9 ++---- wgpu-core/src/pipeline.rs | 30 ++++--------------- wgpu-core/src/resource.rs | 53 +++++++++++---------------------- 5 files changed, 29 insertions(+), 93 deletions(-) diff --git a/wgpu-core/src/binding_model.rs b/wgpu-core/src/binding_model.rs index a0885e27e..1958068ed 100644 --- a/wgpu-core/src/binding_model.rs +++ b/wgpu-core/src/binding_model.rs @@ -8,7 +8,7 @@ use crate::{ init_tracker::{BufferInitTrackerAction, TextureInitTrackerAction}, resource::{ DestroyedResourceError, Labeled, MissingBufferUsageError, MissingTextureUsageError, - ParentDevice, ResourceErrorIdent, TrackingData, + ResourceErrorIdent, TrackingData, }, resource_log, snatch::{SnatchGuard, Snatchable}, @@ -496,15 +496,10 @@ impl Drop for BindGroupLayout { crate::impl_resource_type!(BindGroupLayout); crate::impl_labeled!(BindGroupLayout); +crate::impl_parent_device!(BindGroupLayout); crate::impl_storage_item!(BindGroupLayout); crate::impl_trackable!(BindGroupLayout); -impl ParentDevice for BindGroupLayout { - fn device(&self) -> &Arc> { - &self.device - } -} - impl BindGroupLayout { pub(crate) fn raw(&self) -> &A::BindGroupLayout { self.raw.as_ref().unwrap() @@ -722,15 +717,10 @@ impl PipelineLayout { crate::impl_resource_type!(PipelineLayout); crate::impl_labeled!(PipelineLayout); +crate::impl_parent_device!(PipelineLayout); crate::impl_storage_item!(PipelineLayout); crate::impl_trackable!(PipelineLayout); -impl ParentDevice for PipelineLayout { - fn device(&self) -> &Arc> { - &self.device - } -} - #[repr(C)] #[derive(Clone, Debug, Hash, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] @@ -933,15 +923,10 @@ impl BindGroup { crate::impl_resource_type!(BindGroup); crate::impl_labeled!(BindGroup); +crate::impl_parent_device!(BindGroup); crate::impl_storage_item!(BindGroup); crate::impl_trackable!(BindGroup); -impl ParentDevice for BindGroup { - fn device(&self) -> &Arc> { - &self.device - } -} - #[derive(Clone, Debug, Error)] #[non_exhaustive] pub enum GetBindGroupLayoutError { diff --git a/wgpu-core/src/command/bundle.rs b/wgpu-core/src/command/bundle.rs index 59a254008..d2bd39333 100644 --- a/wgpu-core/src/command/bundle.rs +++ b/wgpu-core/src/command/bundle.rs @@ -1185,15 +1185,10 @@ impl RenderBundle { crate::impl_resource_type!(RenderBundle); crate::impl_labeled!(RenderBundle); +crate::impl_parent_device!(RenderBundle); crate::impl_storage_item!(RenderBundle); crate::impl_trackable!(RenderBundle); -impl ParentDevice for RenderBundle { - fn device(&self) -> &Arc> { - &self.device - } -} - /// A render bundle's current index buffer state. /// /// [`RenderBundleEncoder::finish`] records the currently set index buffer here, diff --git a/wgpu-core/src/command/mod.rs b/wgpu-core/src/command/mod.rs index bcef4e8e6..a90ea789b 100644 --- a/wgpu-core/src/command/mod.rs +++ b/wgpu-core/src/command/mod.rs @@ -36,7 +36,7 @@ use crate::lock::{rank, Mutex}; use crate::snatch::SnatchGuard; use crate::init_tracker::BufferInitTrackerAction; -use crate::resource::{Labeled, ParentDevice}; +use crate::resource::Labeled; use crate::track::{Tracker, UsageScope}; use crate::LabelHelpers; use crate::{api_log, global::Global, hal_api::HalApi, id, resource_log, Label}; @@ -530,14 +530,9 @@ impl CommandBuffer { crate::impl_resource_type!(CommandBuffer); crate::impl_labeled!(CommandBuffer); +crate::impl_parent_device!(CommandBuffer); crate::impl_storage_item!(CommandBuffer); -impl ParentDevice for CommandBuffer { - fn device(&self) -> &Arc> { - &self.device - } -} - /// A stream of commands for a render pass or compute pass. /// /// This also contains side tables referred to by certain commands, diff --git a/wgpu-core/src/pipeline.rs b/wgpu-core/src/pipeline.rs index e22dc46f0..339d228a1 100644 --- a/wgpu-core/src/pipeline.rs +++ b/wgpu-core/src/pipeline.rs @@ -5,7 +5,7 @@ use crate::{ device::{Device, DeviceError, MissingDownlevelFlags, MissingFeatures, RenderPassContext}, hal_api::HalApi, id::{PipelineCacheId, PipelineLayoutId, ShaderModuleId}, - resource::{Labeled, ParentDevice, TrackingData}, + resource::{Labeled, TrackingData}, resource_log, validation, Label, }; use arrayvec::ArrayVec; @@ -68,14 +68,9 @@ impl Drop for ShaderModule { crate::impl_resource_type!(ShaderModule); crate::impl_labeled!(ShaderModule); +crate::impl_parent_device!(ShaderModule); crate::impl_storage_item!(ShaderModule); -impl ParentDevice for ShaderModule { - fn device(&self) -> &Arc> { - &self.device - } -} - impl ShaderModule { pub(crate) fn raw(&self) -> &A::ShaderModule { self.raw.as_ref().unwrap() @@ -228,15 +223,10 @@ impl Drop for ComputePipeline { crate::impl_resource_type!(ComputePipeline); crate::impl_labeled!(ComputePipeline); +crate::impl_parent_device!(ComputePipeline); crate::impl_storage_item!(ComputePipeline); crate::impl_trackable!(ComputePipeline); -impl ParentDevice for ComputePipeline { - fn device(&self) -> &Arc> { - &self.device - } -} - impl ComputePipeline { pub(crate) fn raw(&self) -> &A::ComputePipeline { self.raw.as_ref().unwrap() @@ -289,15 +279,10 @@ impl Drop for PipelineCache { crate::impl_resource_type!(PipelineCache); crate::impl_labeled!(PipelineCache); +crate::impl_parent_device!(PipelineCache); crate::impl_storage_item!(PipelineCache); crate::impl_trackable!(PipelineCache); -impl ParentDevice for PipelineCache { - fn device(&self) -> &Arc> { - &self.device - } -} - /// Describes how the vertex buffer is interpreted. #[derive(Clone, Debug)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -541,15 +526,10 @@ impl Drop for RenderPipeline { crate::impl_resource_type!(RenderPipeline); crate::impl_labeled!(RenderPipeline); +crate::impl_parent_device!(RenderPipeline); crate::impl_storage_item!(RenderPipeline); crate::impl_trackable!(RenderPipeline); -impl ParentDevice for RenderPipeline { - fn device(&self) -> &Arc> { - &self.device - } -} - impl RenderPipeline { pub(crate) fn raw(&self) -> &A::RenderPipeline { self.raw.as_ref().unwrap() diff --git a/wgpu-core/src/resource.rs b/wgpu-core/src/resource.rs index 193775cd4..4db9f9206 100644 --- a/wgpu-core/src/resource.rs +++ b/wgpu-core/src/resource.rs @@ -143,6 +143,17 @@ pub(crate) trait ParentDevice: Labeled { } } +#[macro_export] +macro_rules! impl_parent_device { + ($ty:ident) => { + impl $crate::resource::ParentDevice for $ty { + fn device(&self) -> &Arc> { + &self.device + } + } + }; +} + pub(crate) trait ResourceType { const TYPE: &'static str; } @@ -801,15 +812,10 @@ pub enum CreateBufferError { crate::impl_resource_type!(Buffer); crate::impl_labeled!(Buffer); +crate::impl_parent_device!(Buffer); crate::impl_storage_item!(Buffer); crate::impl_trackable!(Buffer); -impl ParentDevice for Buffer { - fn device(&self) -> &Arc> { - &self.device - } -} - /// A buffer that has been marked as destroyed and is staged for actual deletion soon. #[derive(Debug)] pub struct DestroyedBuffer { @@ -893,15 +899,10 @@ impl Labeled for StagingBuffer { "" } } +crate::impl_parent_device!(StagingBuffer); crate::impl_storage_item!(StagingBuffer); crate::impl_trackable!(StagingBuffer); -impl ParentDevice for StagingBuffer { - fn device(&self) -> &Arc> { - &self.device - } -} - pub type TextureDescriptor<'a> = wgt::TextureDescriptor, Vec>; #[derive(Debug)] @@ -1426,15 +1427,10 @@ pub enum CreateTextureError { crate::impl_resource_type!(Texture); crate::impl_labeled!(Texture); +crate::impl_parent_device!(Texture); crate::impl_storage_item!(Texture); crate::impl_trackable!(Texture); -impl ParentDevice for Texture { - fn device(&self) -> &Arc> { - &self.device - } -} - impl Borrow for Texture { fn borrow(&self) -> &TextureSelector { &self.full_range @@ -1594,15 +1590,10 @@ pub enum TextureViewDestroyError {} crate::impl_resource_type!(TextureView); crate::impl_labeled!(TextureView); +crate::impl_parent_device!(TextureView); crate::impl_storage_item!(TextureView); crate::impl_trackable!(TextureView); -impl ParentDevice for TextureView { - fn device(&self) -> &Arc> { - &self.device - } -} - /// Describes a [`Sampler`] #[derive(Clone, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] @@ -1709,15 +1700,10 @@ pub enum CreateSamplerError { crate::impl_resource_type!(Sampler); crate::impl_labeled!(Sampler); +crate::impl_parent_device!(Sampler); crate::impl_storage_item!(Sampler); crate::impl_trackable!(Sampler); -impl ParentDevice for Sampler { - fn device(&self) -> &Arc> { - &self.device - } -} - #[derive(Clone, Debug, Error)] #[non_exhaustive] pub enum CreateQuerySetError { @@ -1755,14 +1741,9 @@ impl Drop for QuerySet { } } -impl ParentDevice for QuerySet { - fn device(&self) -> &Arc> { - &self.device - } -} - crate::impl_resource_type!(QuerySet); crate::impl_labeled!(QuerySet); +crate::impl_parent_device!(QuerySet); crate::impl_storage_item!(QuerySet); crate::impl_trackable!(QuerySet);