diff --git a/wgpu-core/src/binding_model.rs b/wgpu-core/src/binding_model.rs index f8c4ca7b0d..7d3fa1fb06 100644 --- a/wgpu-core/src/binding_model.rs +++ b/wgpu-core/src/binding_model.rs @@ -802,28 +802,38 @@ pub type ResolvedBufferBinding = BufferBinding>; // They're different enough that it doesn't make sense to share a common type #[derive(Debug, Clone)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum BindingResource<'a> { - Buffer(BufferBinding), - BufferArray(Cow<'a, [BufferBinding]>), - Sampler(SamplerId), - SamplerArray(Cow<'a, [SamplerId]>), - TextureView(TextureViewId), - TextureViewArray(Cow<'a, [TextureViewId]>), - AccelerationStructure(TlasId), +pub enum BindingResource<'a, B = BufferId, S = SamplerId, TV = TextureViewId, TLAS = TlasId> +where + [BufferBinding]: ToOwned, + [S]: ToOwned, + [TV]: ToOwned, + <[BufferBinding] as ToOwned>::Owned: std::fmt::Debug, + <[S] as ToOwned>::Owned: std::fmt::Debug, + <[TV] as ToOwned>::Owned: std::fmt::Debug, +{ + Buffer(BufferBinding), + #[cfg_attr( + feature = "serde", + serde(bound(deserialize = "<[BufferBinding] as ToOwned>::Owned: Deserialize<'de>")) + )] + BufferArray(Cow<'a, [BufferBinding]>), + Sampler(S), + #[cfg_attr( + feature = "serde", + serde(bound(deserialize = "<[S] as ToOwned>::Owned: Deserialize<'de>")) + )] + SamplerArray(Cow<'a, [S]>), + TextureView(TV), + #[cfg_attr( + feature = "serde", + serde(bound(deserialize = "<[TV] as ToOwned>::Owned: Deserialize<'de>")) + )] + TextureViewArray(Cow<'a, [TV]>), + AccelerationStructure(TLAS), } -// Note: Duplicated in `wgpu-rs` as `BindingResource` -// They're different enough that it doesn't make sense to share a common type -#[derive(Debug, Clone)] -pub enum ResolvedBindingResource<'a> { - Buffer(ResolvedBufferBinding), - BufferArray(Cow<'a, [ResolvedBufferBinding]>), - Sampler(Arc), - SamplerArray(Cow<'a, [Arc]>), - TextureView(Arc), - TextureViewArray(Cow<'a, [Arc]>), - AccelerationStructure(Arc), -} +pub type ResolvedBindingResource<'a> = + BindingResource<'a, Arc, Arc, Arc, Arc>; #[derive(Clone, Debug, Error)] #[non_exhaustive]