Skip to content

Commit f986ce9

Browse files
committed
Use RenderDevice for wgpu::Limits in SpecializedMaterial(2d)
1 parent 14b6f0a commit f986ce9

File tree

7 files changed

+26
-21
lines changed

7 files changed

+26
-21
lines changed

crates/bevy_pbr/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ use bevy_asset::{load_internal_asset, Assets, Handle, HandleUntyped};
3737
use bevy_ecs::prelude::*;
3838
use bevy_reflect::TypeUuid;
3939
use bevy_render::{
40-
options::WgpuOptions,
4140
prelude::Color,
4241
render_graph::RenderGraph,
4342
render_phase::{sort_phase_system, AddRenderCommand, DrawFunctions},
4443
render_resource::{Shader, SpecializedPipelines},
44+
renderer::RenderDevice,
4545
view::VisibilitySystems,
4646
RenderApp, RenderStage,
4747
};
@@ -140,9 +140,9 @@ impl Plugin for PbrPlugin {
140140
// stage?
141141
let use_storage_buffers = app
142142
.world
143-
.get_resource::<WgpuOptions>()
143+
.get_resource::<RenderDevice>()
144144
.unwrap()
145-
.limits
145+
.limits()
146146
.max_storage_buffers_per_shader_stage
147147
>= 3;
148148

crates/bevy_pbr/src/material.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use bevy_ecs::{
1616
};
1717
use bevy_render::{
1818
mesh::Mesh,
19-
options::WgpuOptions,
2019
render_asset::{RenderAsset, RenderAssetPlugin, RenderAssets},
2120
render_component::ExtractComponentPlugin,
2221
render_phase::{
@@ -80,7 +79,7 @@ impl<M: Material> SpecializedMaterial for M {
8079

8180
#[inline]
8281
fn key(
83-
_wgpu_options: &WgpuOptions,
82+
_render_device: &RenderDevice,
8483
_material: &<Self as RenderAsset>::PreparedAsset,
8584
) -> Self::Key {
8685
}
@@ -133,7 +132,7 @@ pub trait SpecializedMaterial: Asset + RenderAsset {
133132
/// passed in to the [`SpecializedMaterial::specialize`] function when compiling the [`RenderPipeline`](bevy_render::render_resource::RenderPipeline)
134133
/// for a given entity's material.
135134
fn key(
136-
wgpu_options: &WgpuOptions,
135+
render_device: &RenderDevice,
137136
material: &<Self as RenderAsset>::PreparedAsset,
138137
) -> Self::Key;
139138

@@ -279,13 +278,13 @@ impl<M: SpecializedMaterial, const I: usize> EntityRenderCommand for SetMaterial
279278

280279
#[allow(clippy::too_many_arguments)]
281280
pub fn queue_material_meshes<M: SpecializedMaterial>(
282-
wgpu_options: Res<WgpuOptions>,
283281
opaque_draw_functions: Res<DrawFunctions<Opaque3d>>,
284282
alpha_mask_draw_functions: Res<DrawFunctions<AlphaMask3d>>,
285283
transparent_draw_functions: Res<DrawFunctions<Transparent3d>>,
286284
material_pipeline: Res<MaterialPipeline<M>>,
287285
mut pipelines: ResMut<SpecializedPipelines<MaterialPipeline<M>>>,
288286
mut pipeline_cache: ResMut<RenderPipelineCache>,
287+
render_device: Res<RenderDevice>,
289288
msaa: Res<Msaa>,
290289
render_meshes: Res<RenderAssets<Mesh>>,
291290
render_materials: Res<RenderAssets<M>>,
@@ -298,7 +297,7 @@ pub fn queue_material_meshes<M: SpecializedMaterial>(
298297
&mut RenderPhase<Transparent3d>,
299298
)>,
300299
) {
301-
let wgpu_options = wgpu_options.into_inner();
300+
let render_device = render_device.into_inner();
302301
for (view, visible_entities, mut opaque_phase, mut alpha_mask_phase, mut transparent_phase) in
303302
views.iter_mut()
304303
{
@@ -337,7 +336,7 @@ pub fn queue_material_meshes<M: SpecializedMaterial>(
337336
mesh_key |= MeshPipelineKey::TRANSPARENT_MAIN_PASS;
338337
}
339338

340-
let specialized_key = M::key(wgpu_options, material);
339+
let specialized_key = M::key(render_device, material);
341340
let pipeline_id = pipelines.specialize(
342341
&mut pipeline_cache,
343342
&material_pipeline,

crates/bevy_pbr/src/pbr_material.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use bevy_math::Vec4;
55
use bevy_reflect::TypeUuid;
66
use bevy_render::{
77
color::Color,
8-
options::WgpuOptions,
98
prelude::Shader,
109
render_asset::{PrepareAssetError, RenderAsset, RenderAssets},
1110
render_resource::{
@@ -335,12 +334,12 @@ impl SpecializedMaterial for StandardMaterial {
335334
type Key = StandardMaterialKey;
336335

337336
fn key(
338-
wgpu_options: &WgpuOptions,
337+
render_device: &RenderDevice,
339338
render_asset: &<Self as RenderAsset>::PreparedAsset,
340339
) -> Self::Key {
341340
StandardMaterialKey {
342341
normal_map: render_asset.has_normal_map,
343-
storage_buffers: wgpu_options.limits.max_storage_buffers_per_shader_stage >= 3,
342+
storage_buffers: render_device.limits().max_storage_buffers_per_shader_stage >= 3,
344343
}
345344
}
346345

crates/bevy_pbr/src/render/light.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,7 +1210,6 @@ impl ViewClusterBindings {
12101210

12111211
pub fn prepare_clusters(
12121212
mut commands: Commands,
1213-
wgpu_options: Res<WgpuOptions>,
12141213
render_device: Res<RenderDevice>,
12151214
render_queue: Res<RenderQueue>,
12161215
global_light_meta: Res<GlobalLightMeta>,
@@ -1223,7 +1222,7 @@ pub fn prepare_clusters(
12231222
With<RenderPhase<Transparent3d>>,
12241223
>,
12251224
) {
1226-
let use_storage_buffers = wgpu_options.limits.max_storage_buffers_per_shader_stage >= 3;
1225+
let use_storage_buffers = render_device.limits().max_storage_buffers_per_shader_stage >= 3;
12271226
for (entity, cluster_config, extracted_clusters) in views.iter() {
12281227
let mut view_clusters_bindings = ViewClusterBindings::new(use_storage_buffers);
12291228
view_clusters_bindings.reserve_and_clear();

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use bevy_math::{Mat4, Size};
1212
use bevy_reflect::TypeUuid;
1313
use bevy_render::{
1414
mesh::{GpuBufferInfo, Mesh},
15-
options::WgpuOptions,
1615
render_asset::RenderAssets,
1716
render_component::{ComponentUniforms, DynamicUniformIndex, UniformComponentPlugin},
1817
render_phase::{EntityRenderCommand, RenderCommandResult, TrackedRenderPass},
@@ -168,9 +167,9 @@ impl FromWorld for MeshPipeline {
168167
fn from_world(world: &mut World) -> Self {
169168
let render_device = world.get_resource::<RenderDevice>().unwrap();
170169
let (cluster_buffer_binding_type, cluster_min_binding_size) = if world
171-
.get_resource::<WgpuOptions>()
170+
.get_resource::<RenderDevice>()
172171
.unwrap()
173-
.limits
172+
.limits()
174173
.max_storage_buffers_per_shader_stage
175174
>= 3
176175
{

crates/bevy_sprite/src/mesh2d/material.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ impl<M: Material2d> SpecializedMaterial2d for M {
7575
type Key = ();
7676

7777
#[inline]
78-
fn key(_material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key {}
78+
fn key(
79+
_render_device: &RenderDevice,
80+
_material: &<Self as RenderAsset>::PreparedAsset,
81+
) -> Self::Key {
82+
}
7983

8084
#[inline]
8185
fn specialize(_key: Self::Key, _descriptor: &mut RenderPipelineDescriptor) {}
@@ -119,7 +123,10 @@ pub trait SpecializedMaterial2d: Asset + RenderAsset {
119123
/// Extract the [`SpecializedMaterial2d::Key`] for the "prepared" version of this material. This key will be
120124
/// passed in to the [`SpecializedMaterial2d::specialize`] function when compiling the [`RenderPipeline`](bevy_render::render_resource::RenderPipeline)
121125
/// for a given entity's material.
122-
fn key(material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key;
126+
fn key(
127+
render_device: &RenderDevice,
128+
material: &<Self as RenderAsset>::PreparedAsset,
129+
) -> Self::Key;
123130

124131
/// Specializes the given `descriptor` according to the given `key`.
125132
fn specialize(key: Self::Key, descriptor: &mut RenderPipelineDescriptor);
@@ -261,6 +268,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
261268
material2d_pipeline: Res<Material2dPipeline<M>>,
262269
mut pipelines: ResMut<SpecializedPipelines<Material2dPipeline<M>>>,
263270
mut pipeline_cache: ResMut<RenderPipelineCache>,
271+
render_device: Res<RenderDevice>,
264272
msaa: Res<Msaa>,
265273
render_meshes: Res<RenderAssets<Mesh>>,
266274
render_materials: Res<RenderAssets<M>>,
@@ -270,6 +278,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
270278
if material2d_meshes.is_empty() {
271279
return;
272280
}
281+
let render_device = render_device.into_inner();
273282
for (visible_entities, mut transparent_phase) in views.iter_mut() {
274283
let draw_transparent_pbr = transparent_draw_functions
275284
.read()
@@ -292,7 +301,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
292301
Mesh2dPipelineKey::from_primitive_topology(mesh.primitive_topology);
293302
}
294303

295-
let specialized_key = M::key(material2d);
304+
let specialized_key = M::key(render_device, material2d);
296305
let pipeline_id = pipelines.specialize(
297306
&mut pipeline_cache,
298307
&material2d_pipeline,

examples/shader/shader_material_glsl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ impl RenderAsset for CustomMaterial {
9393
impl SpecializedMaterial for CustomMaterial {
9494
type Key = ();
9595

96-
fn key(_: &<CustomMaterial as RenderAsset>::PreparedAsset) -> Self::Key {}
96+
fn key(_: &RenderDevice, _: &<CustomMaterial as RenderAsset>::PreparedAsset) -> Self::Key {}
9797

9898
fn specialize(_: Self::Key, descriptor: &mut RenderPipelineDescriptor) {
9999
descriptor.vertex.entry_point = "main".into();

0 commit comments

Comments
 (0)