From 5764ada320d6321f7e69d3f9d8a2bb6edcd8a0c2 Mon Sep 17 00:00:00 2001 From: sagudev <16504129+sagudev@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:57:40 +0100 Subject: [PATCH] Unofy `ResolvedBindingResource` into `BindingResource` Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com> --- wgpu-core/src/binding_model.rs | 50 ++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 20 deletions(-) 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]