From 0e937c8cd086e13dc07bf49636096cf04e38dffd Mon Sep 17 00:00:00 2001 From: i509VCB Date: Wed, 9 Nov 2022 14:48:07 -0600 Subject: [PATCH] make Ids a u64 internally (#3178) --- wgpu-core/src/id.rs | 5 +++++ wgpu/Cargo.toml | 2 +- wgpu/src/backend/direct.rs | 32 ++++++++++++++++++-------------- wgpu/src/backend/mod.rs | 4 ++-- wgpu/src/backend/web.rs | 6 ++---- wgpu/src/lib.rs | 6 +++--- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/wgpu-core/src/id.rs b/wgpu-core/src/id.rs index 3f5ec0e3a0..b31e7b4c48 100644 --- a/wgpu-core/src/id.rs +++ b/wgpu-core/src/id.rs @@ -167,6 +167,7 @@ pub(crate) struct Valid(pub I); pub trait TypedId: Copy { fn zip(index: Index, epoch: Epoch, backend: Backend) -> Self; fn unzip(self) -> (Index, Epoch, Backend); + fn into_raw(self) -> NonZeroId; } #[allow(trivial_numeric_casts)] @@ -187,6 +188,10 @@ impl TypedId for Id { self.backend(), ) } + + fn into_raw(self) -> NonZeroId { + self.0 + } } pub type AdapterId = Id>; diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index d1568d67c0..36272c0fda 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -76,7 +76,7 @@ name = "water" test = true [features] -default = ["wgsl"] +default = ["wgsl", "expose-ids"] spirv = ["naga/spv-in"] glsl = ["naga/glsl-in"] wgsl = ["wgc?/wgsl"] diff --git a/wgpu/src/backend/direct.rs b/wgpu/src/backend/direct.rs index b103658acd..6548ce710a 100644 --- a/wgpu/src/backend/direct.rs +++ b/wgpu/src/backend/direct.rs @@ -832,46 +832,50 @@ pub(crate) struct CommandEncoder { open: bool, } -pub(crate) type Id = (u32, u32, wgt::Backend); - impl crate::GlobalId for T { - fn global_id(&self) -> Id { - self.unzip() + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { + T::into_raw(*self).get().into() } } impl crate::GlobalId for Surface { - fn global_id(&self) -> Id { + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { use wgc::id::TypedId; - self.id.unzip() + self.id.into_raw().get().into() } } impl crate::GlobalId for Device { - fn global_id(&self) -> Id { + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { use wgc::id::TypedId; - self.id.unzip() + self.id.into_raw().get().into() } } impl crate::GlobalId for Buffer { - fn global_id(&self) -> Id { + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { use wgc::id::TypedId; - self.id.unzip() + self.id.into_raw().get().into() } } impl crate::GlobalId for Texture { - fn global_id(&self) -> Id { + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { use wgc::id::TypedId; - self.id.unzip() + self.id.into_raw().get().into() } } impl crate::GlobalId for CommandEncoder { - fn global_id(&self) -> Id { + #[allow(clippy::useless_conversion)] // because not(id32) + fn global_id(&self) -> u64 { use wgc::id::TypedId; - self.id.unzip() + self.id.into_raw().get().into() } } diff --git a/wgpu/src/backend/mod.rs b/wgpu/src/backend/mod.rs index 1e5adc26e5..d3f88c6928 100644 --- a/wgpu/src/backend/mod.rs +++ b/wgpu/src/backend/mod.rs @@ -1,9 +1,9 @@ #[cfg(all(target_arch = "wasm32", not(feature = "webgl")))] mod web; #[cfg(all(target_arch = "wasm32", not(feature = "webgl")))] -pub(crate) use web::{BufferMappedRange, Context, Id, QueueWriteBuffer}; +pub(crate) use web::{BufferMappedRange, Context, QueueWriteBuffer}; #[cfg(any(not(target_arch = "wasm32"), feature = "webgl"))] mod direct; #[cfg(any(not(target_arch = "wasm32"), feature = "webgl"))] -pub(crate) use direct::{BufferMappedRange, Context, Id, QueueWriteBuffer}; +pub(crate) use direct::{BufferMappedRange, Context, QueueWriteBuffer}; diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index 38f2419a16..776727b7a6 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -32,18 +32,16 @@ unsafe impl Sync for Identified {} impl crate::GlobalId for Identified { #[cfg(not(feature = "expose-ids"))] - fn global_id(&self) -> Id { + fn global_id(&self) -> u64 { 0 } #[cfg(feature = "expose-ids")] - fn global_id(&self) -> Id { + fn global_id(&self) -> u64 { self.1 } } -pub(crate) type Id = u64; - #[cfg(feature = "expose-ids")] static NEXT_ID: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index b2e6ce8cee..3a9f048df6 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -43,7 +43,7 @@ pub use wgt::{ QUERY_RESOLVE_BUFFER_ALIGNMENT, QUERY_SET_MAX_QUERIES, QUERY_SIZE, VERTEX_STRIDE_ALIGNMENT, }; -use backend::{BufferMappedRange, Context as C, Id as BackendId, QueueWriteBuffer}; +use backend::{BufferMappedRange, Context as C, QueueWriteBuffer}; /// Filter for error scopes. #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd)] @@ -165,7 +165,7 @@ trait RenderPassInner: RenderInner { } trait GlobalId { - fn global_id(&self) -> BackendId; + fn global_id(&self) -> u64; } trait Context: Debug + Send + Sized + Sync { @@ -3805,7 +3805,7 @@ impl Surface { #[cfg_attr(docsrs, doc(cfg(feature = "expose-ids")))] #[repr(transparent)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub struct Id(BackendId); +pub struct Id(u64); #[cfg(feature = "expose-ids")] impl Adapter {