Skip to content

Commit 0432792

Browse files
committed
refactor(render): move WgpuWrapper into bevy_utils
1 parent 0ff44c9 commit 0432792

File tree

15 files changed

+71
-53
lines changed

15 files changed

+71
-53
lines changed

crates/bevy_render/Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,6 @@ bevy_reflect = { path = "../bevy_reflect", version = "0.16.0-dev", default-featu
151151
"web",
152152
] }
153153

154-
[target.'cfg(all(target_arch = "wasm32", target_feature = "atomics"))'.dependencies]
155-
send_wrapper = "0.6.0"
156-
157154
[lints]
158155
workspace = true
159156

crates/bevy_render/src/diagnostic/internal.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ use wgpu::{
1515
PipelineStatisticsTypes, QuerySet, QuerySetDescriptor, QueryType, RenderPass,
1616
};
1717

18-
use crate::renderer::{RenderAdapterInfo, RenderDevice, RenderQueue, WgpuWrapper};
18+
use crate::renderer::{RenderAdapterInfo, RenderDevice, RenderQueue};
19+
use bevy_utils::WgpuWrapper;
1920

2021
use super::RecordDiagnostics;
2122

crates/bevy_render/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ use crate::{
103103
mesh::{MeshPlugin, MorphPlugin, RenderMesh},
104104
render_asset::prepare_assets,
105105
render_resource::{PipelineCache, Shader, ShaderLoader},
106-
renderer::{render_system, RenderInstance, WgpuWrapper},
106+
renderer::{render_system, RenderInstance},
107107
settings::RenderCreation,
108108
storage::StoragePlugin,
109109
view::{ViewPlugin, WindowRenderPlugin},
@@ -112,6 +112,7 @@ use alloc::sync::Arc;
112112
use bevy_app::{App, AppLabel, Plugin, SubApp};
113113
use bevy_asset::{AssetApp, AssetServer};
114114
use bevy_ecs::{prelude::*, schedule::ScheduleLabel};
115+
use bevy_utils::WgpuWrapper;
115116
use bitflags::bitflags;
116117
use core::ops::{Deref, DerefMut};
117118
use std::sync::Mutex;

crates/bevy_render/src/render_resource/bind_group.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::renderer::WgpuWrapper;
21
use crate::{
32
define_atomic_id,
43
render_asset::RenderAssets,
@@ -9,6 +8,7 @@ use crate::{
98
use bevy_derive::{Deref, DerefMut};
109
use bevy_ecs::system::{SystemParam, SystemParamItem};
1110
pub use bevy_render_macros::AsBindGroup;
11+
use bevy_utils::WgpuWrapper;
1212
use core::ops::Deref;
1313
use encase::ShaderType;
1414
use thiserror::Error;

crates/bevy_render/src/render_resource/bind_group_layout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::define_atomic_id;
2-
use crate::renderer::WgpuWrapper;
2+
use bevy_utils::WgpuWrapper;
33
use core::ops::Deref;
44

55
define_atomic_id!(BindGroupLayoutId);

crates/bevy_render/src/render_resource/buffer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::define_atomic_id;
2-
use crate::renderer::WgpuWrapper;
2+
use bevy_utils::WgpuWrapper;
33
use core::ops::{Bound, Deref, RangeBounds};
44

55
define_atomic_id!(BufferId);

crates/bevy_render/src/render_resource/pipeline.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use super::ShaderDefVal;
22
use crate::mesh::VertexBufferLayout;
3-
use crate::renderer::WgpuWrapper;
43
use crate::{
54
define_atomic_id,
65
render_resource::{BindGroupLayout, Shader},
76
};
87
use alloc::borrow::Cow;
98
use bevy_asset::Handle;
9+
use bevy_utils::WgpuWrapper;
1010
use core::ops::Deref;
1111
use wgpu::{
1212
ColorTargetState, DepthStencilState, MultisampleState, PrimitiveState, PushConstantRange,

crates/bevy_render/src/render_resource/pipeline_cache.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::renderer::WgpuWrapper;
21
use crate::{
32
render_resource::*,
43
renderer::{RenderAdapter, RenderDevice},
@@ -14,6 +13,7 @@ use bevy_ecs::{
1413
use bevy_platform::collections::{hash_map::EntryRef, HashMap, HashSet};
1514
use bevy_tasks::Task;
1615
use bevy_utils::default;
16+
use bevy_utils::WgpuWrapper;
1717
use core::{future::Future, hash::Hash, mem, ops::Deref};
1818
use naga::valid::Capabilities;
1919
use std::sync::{Mutex, PoisonError};

crates/bevy_render/src/render_resource/texture.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::define_atomic_id;
2-
use crate::renderer::WgpuWrapper;
32
use bevy_derive::{Deref, DerefMut};
43
use bevy_ecs::resource::Resource;
4+
use bevy_utils::WgpuWrapper;
55
use core::ops::Deref;
66

77
define_atomic_id!(TextureId);

crates/bevy_render/src/renderer/mod.rs

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod render_device;
44
use bevy_derive::{Deref, DerefMut};
55
#[cfg(not(all(target_arch = "wasm32", target_feature = "atomics")))]
66
use bevy_tasks::ComputeTaskPool;
7+
use bevy_utils::WgpuWrapper;
78
pub use graph_runner::*;
89
pub use render_device::*;
910
use tracing::{error, info, info_span, warn};
@@ -120,46 +121,6 @@ pub fn render_system(world: &mut World, state: &mut SystemState<Query<Entity, Wi
120121
}
121122
}
122123

123-
/// A wrapper to safely make `wgpu` types Send / Sync on web with atomics enabled.
124-
///
125-
/// On web with `atomics` enabled the inner value can only be accessed
126-
/// or dropped on the `wgpu` thread or else a panic will occur.
127-
/// On other platforms the wrapper simply contains the wrapped value.
128-
#[cfg(not(all(target_arch = "wasm32", target_feature = "atomics")))]
129-
#[derive(Debug, Clone, Deref, DerefMut)]
130-
pub struct WgpuWrapper<T>(T);
131-
#[cfg(all(target_arch = "wasm32", target_feature = "atomics"))]
132-
#[derive(Debug, Clone, Deref, DerefMut)]
133-
pub struct WgpuWrapper<T>(send_wrapper::SendWrapper<T>);
134-
135-
// SAFETY: SendWrapper is always Send + Sync.
136-
#[cfg(all(target_arch = "wasm32", target_feature = "atomics"))]
137-
unsafe impl<T> Send for WgpuWrapper<T> {}
138-
#[cfg(all(target_arch = "wasm32", target_feature = "atomics"))]
139-
unsafe impl<T> Sync for WgpuWrapper<T> {}
140-
141-
#[cfg(not(all(target_arch = "wasm32", target_feature = "atomics")))]
142-
impl<T> WgpuWrapper<T> {
143-
pub fn new(t: T) -> Self {
144-
Self(t)
145-
}
146-
147-
pub fn into_inner(self) -> T {
148-
self.0
149-
}
150-
}
151-
152-
#[cfg(all(target_arch = "wasm32", target_feature = "atomics"))]
153-
impl<T> WgpuWrapper<T> {
154-
pub fn new(t: T) -> Self {
155-
Self(send_wrapper::SendWrapper::new(t))
156-
}
157-
158-
pub fn into_inner(self) -> T {
159-
self.0.take()
160-
}
161-
}
162-
163124
/// This queue is used to enqueue tasks for the GPU to execute asynchronously.
164125
#[derive(Resource, Clone, Deref, DerefMut)]
165126
pub struct RenderQueue(pub Arc<WgpuWrapper<Queue>>);

0 commit comments

Comments
 (0)