Skip to content

Commit 06ada2e

Browse files
NateSaxoSjael
andcommitted
Changed Msaa to Enum (#7292)
# Objective Fixes #6931 Continues #6954 by squashing `Msaa` to a flat enum Helps out #7215 # Solution ``` pub enum Msaa { Off = 1, #[default] Sample4 = 4, } ``` # Changelog - Modified - `Msaa` is now enum - Defaults to 4 samples - Uses `.samples()` method to get the sample number as `u32` # Migration Guide ``` let multi = Msaa { samples: 4 } // is now let multi = Msaa::Sample4 multi.samples // is now multi.samples() ``` Co-authored-by: Sjael <[email protected]>
1 parent 5d5a504 commit 06ada2e

File tree

13 files changed

+52
-44
lines changed

13 files changed

+52
-44
lines changed

crates/bevy_core_pipeline/src/core_3d/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ pub fn prepare_core_3d_depth_textures(
303303
label: Some("view_depth_texture"),
304304
size,
305305
mip_level_count: 1,
306-
sample_count: msaa.samples,
306+
sample_count: msaa.samples(),
307307
dimension: TextureDimension::D2,
308308
// PERF: vulkan docs recommend using 24 bit depth for better performance
309309
format: TextureFormat::Depth32Float,

crates/bevy_pbr/src/material.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,8 @@ pub fn queue_material_meshes<M: Material>(
391391
let draw_alpha_mask_pbr = alpha_mask_draw_functions.read().id::<DrawMaterial<M>>();
392392
let draw_transparent_pbr = transparent_draw_functions.read().id::<DrawMaterial<M>>();
393393

394-
let mut view_key =
395-
MeshPipelineKey::from_msaa_samples(msaa.samples) | MeshPipelineKey::from_hdr(view.hdr);
394+
let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
395+
| MeshPipelineKey::from_hdr(view.hdr);
396396

397397
if let Some(Tonemapping::Enabled { deband_dither }) = tonemapping {
398398
if !view.hdr {

crates/bevy_pbr/src/prepass/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ pub fn prepare_prepass_textures(
395395
label: Some("prepass_depth_texture"),
396396
size,
397397
mip_level_count: 1,
398-
sample_count: msaa.samples,
398+
sample_count: msaa.samples(),
399399
dimension: TextureDimension::D2,
400400
format: DEPTH_PREPASS_FORMAT,
401401
usage: TextureUsages::COPY_DST
@@ -417,7 +417,7 @@ pub fn prepare_prepass_textures(
417417
label: Some("prepass_normal_texture"),
418418
size,
419419
mip_level_count: 1,
420-
sample_count: msaa.samples,
420+
sample_count: msaa.samples(),
421421
dimension: TextureDimension::D2,
422422
format: NORMAL_PREPASS_FORMAT,
423423
usage: TextureUsages::RENDER_ATTACHMENT
@@ -499,7 +499,7 @@ pub fn queue_prepass_material_meshes<M: Material>(
499499
normal_prepass,
500500
) in &mut views
501501
{
502-
let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples);
502+
let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
503503
if depth_prepass.is_some() {
504504
view_key |= MeshPipelineKey::DEPTH_PREPASS;
505505
}

crates/bevy_pbr/src/render/mesh.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ pub fn queue_mesh_view_bind_groups(
877877
globals_buffer.buffer.binding(),
878878
) {
879879
for (entity, view_shadow_bindings, view_cluster_bindings, prepass_textures) in &views {
880-
let layout = if msaa.samples > 1 {
880+
let layout = if msaa.samples() > 1 {
881881
&mesh_pipeline.view_layout_multisampled
882882
} else {
883883
&mesh_pipeline.view_layout
@@ -937,7 +937,7 @@ pub fn queue_mesh_view_bind_groups(
937937
Some(texture) => &texture.default_view,
938938
None => {
939939
&fallback_depths
940-
.image_for_samplecount(msaa.samples)
940+
.image_for_samplecount(msaa.samples())
941941
.texture_view
942942
}
943943
};
@@ -950,7 +950,7 @@ pub fn queue_mesh_view_bind_groups(
950950
Some(texture) => &texture.default_view,
951951
None => {
952952
&fallback_images
953-
.image_for_samplecount(msaa.samples)
953+
.image_for_samplecount(msaa.samples())
954954
.texture_view
955955
}
956956
};

crates/bevy_pbr/src/wireframe.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ fn queue_wireframes(
117117
mut views: Query<(&ExtractedView, &VisibleEntities, &mut RenderPhase<Opaque3d>)>,
118118
) {
119119
let draw_custom = opaque_3d_draw_functions.read().id::<DrawWireframes>();
120-
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples);
120+
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
121121
for (view, visible_entities, mut opaque_phase) in &mut views {
122122
let rangefinder = view.rangefinder3d();
123123

crates/bevy_render/src/view/mod.rs

+20-16
Original file line numberDiff line numberDiff line change
@@ -56,30 +56,34 @@ impl Plugin for ViewPlugin {
5656

5757
/// Configuration resource for [Multi-Sample Anti-Aliasing](https://en.wikipedia.org/wiki/Multisample_anti-aliasing).
5858
///
59+
/// The number of samples to run for Multi-Sample Anti-Aliasing. Higher numbers result in
60+
/// smoother edges.
61+
/// Defaults to 4.
62+
///
63+
/// Note that WGPU currently only supports 1 or 4 samples.
64+
/// Ultimately we plan on supporting whatever is natively supported on a given device.
65+
/// Check out this issue for more info: <https://github.com/gfx-rs/wgpu/issues/1832>
66+
///
5967
/// # Example
6068
/// ```
6169
/// # use bevy_app::prelude::App;
6270
/// # use bevy_render::prelude::Msaa;
6371
/// App::new()
64-
/// .insert_resource(Msaa { samples: 4 })
72+
/// .insert_resource(Msaa::default())
6573
/// .run();
6674
/// ```
67-
#[derive(Resource, Clone, ExtractResource, Reflect)]
75+
#[derive(Resource, Default, Clone, Copy, ExtractResource, Reflect, PartialEq, PartialOrd)]
6876
#[reflect(Resource)]
69-
pub struct Msaa {
70-
/// The number of samples to run for Multi-Sample Anti-Aliasing. Higher numbers result in
71-
/// smoother edges.
72-
/// Defaults to 4.
73-
///
74-
/// Note that WGPU currently only supports 1 or 4 samples.
75-
/// Ultimately we plan on supporting whatever is natively supported on a given device.
76-
/// Check out this issue for more info: <https://github.com/gfx-rs/wgpu/issues/1832>
77-
pub samples: u32,
77+
pub enum Msaa {
78+
Off = 1,
79+
#[default]
80+
Sample4 = 4,
7881
}
7982

80-
impl Default for Msaa {
81-
fn default() -> Self {
82-
Self { samples: 4 }
83+
impl Msaa {
84+
#[inline]
85+
pub fn samples(&self) -> u32 {
86+
*self as u32
8387
}
8488
}
8589

@@ -334,15 +338,15 @@ fn prepare_view_targets(
334338
},
335339
)
336340
.default_view,
337-
sampled: (msaa.samples > 1).then(|| {
341+
sampled: (msaa.samples() > 1).then(|| {
338342
texture_cache
339343
.get(
340344
&render_device,
341345
TextureDescriptor {
342346
label: Some("main_texture_sampled"),
343347
size,
344348
mip_level_count: 1,
345-
sample_count: msaa.samples,
349+
sample_count: msaa.samples(),
346350
dimension: TextureDimension::D2,
347351
format: main_texture_format,
348352
usage: TextureUsages::RENDER_ATTACHMENT,

crates/bevy_sprite/src/mesh2d/material.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ pub fn queue_material2d_meshes<M: Material2d>(
340340
for (view, visible_entities, tonemapping, mut transparent_phase) in &mut views {
341341
let draw_transparent_pbr = transparent_draw_functions.read().id::<DrawMaterial2d<M>>();
342342

343-
let mut view_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples)
343+
let mut view_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples())
344344
| Mesh2dPipelineKey::from_hdr(view.hdr);
345345

346346
if let Some(Tonemapping::Enabled { deband_dither }) = tonemapping {

crates/bevy_sprite/src/render/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ pub fn queue_sprites(
474474
};
475475
}
476476

477-
let msaa_key = SpritePipelineKey::from_msaa_samples(msaa.samples);
477+
let msaa_key = SpritePipelineKey::from_msaa_samples(msaa.samples());
478478

479479
if let Some(view_binding) = view_uniforms.uniforms.binding() {
480480
let sprite_meta = &mut sprite_meta;

examples/2d/mesh2d_manual.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ pub fn queue_colored_mesh2d(
329329
for (visible_entities, mut transparent_phase, view) in &mut views {
330330
let draw_colored_mesh2d = transparent_draw_functions.read().id::<DrawColoredMesh2d>();
331331

332-
let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples)
332+
let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples())
333333
| Mesh2dPipelineKey::from_hdr(view.hdr);
334334

335335
// Queue all entities visible to that view

examples/3d/fxaa.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use bevy::{
1313

1414
fn main() {
1515
App::new()
16-
// Disable MSAA be default
17-
.insert_resource(Msaa { samples: 1 })
16+
// Disable MSAA by default
17+
.insert_resource(Msaa::Off)
1818
.add_plugins(DefaultPlugins)
1919
.add_startup_system(setup)
2020
.add_system(toggle_fxaa)
@@ -118,19 +118,20 @@ fn toggle_fxaa(keys: Res<Input<KeyCode>>, mut query: Query<&mut Fxaa>, mut msaa:
118118
let fxaa_ultra = keys.just_pressed(KeyCode::Key9);
119119
let fxaa_extreme = keys.just_pressed(KeyCode::Key0);
120120
let set_fxaa = set_fxaa | fxaa_low | fxaa_med | fxaa_high | fxaa_ultra | fxaa_extreme;
121+
121122
for mut fxaa in &mut query {
122123
if set_msaa {
123124
fxaa.enabled = false;
124-
msaa.samples = 4;
125+
*msaa = Msaa::Sample4;
125126
info!("MSAA 4x");
126127
}
127128
if set_no_aa {
128129
fxaa.enabled = false;
129-
msaa.samples = 1;
130+
*msaa = Msaa::Off;
130131
info!("NO AA");
131132
}
132133
if set_no_aa | set_fxaa {
133-
msaa.samples = 1;
134+
*msaa = Msaa::Off;
134135
}
135136
if fxaa_low {
136137
fxaa.edge_threshold = Sensitivity::Low;
@@ -150,7 +151,7 @@ fn toggle_fxaa(keys: Res<Input<KeyCode>>, mut query: Query<&mut Fxaa>, mut msaa:
150151
}
151152
if set_fxaa {
152153
fxaa.enabled = true;
153-
msaa.samples = 1;
154+
*msaa = Msaa::Off;
154155
info!("FXAA {}", fxaa.edge_threshold.get_str());
155156
}
156157
}

examples/3d/msaa.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use bevy::prelude::*;
1010

1111
fn main() {
1212
App::new()
13-
.insert_resource(Msaa { samples: 4 })
13+
.insert_resource(Msaa::default())
1414
.add_plugins(DefaultPlugins)
1515
.add_startup_system(setup)
1616
.add_system(cycle_msaa)
@@ -46,12 +46,15 @@ fn setup(
4646

4747
fn cycle_msaa(input: Res<Input<KeyCode>>, mut msaa: ResMut<Msaa>) {
4848
if input.just_pressed(KeyCode::M) {
49-
if msaa.samples == 4 {
50-
info!("Not using MSAA");
51-
msaa.samples = 1;
52-
} else {
53-
info!("Using 4x MSAA");
54-
msaa.samples = 4;
49+
match *msaa {
50+
Msaa::Sample4 => {
51+
info!("Not using MSAA");
52+
*msaa = Msaa::Off;
53+
}
54+
Msaa::Off => {
55+
info!("Using 4x MSAA");
56+
*msaa = Msaa::Sample4;
57+
}
5558
}
5659
}
5760
}

examples/3d/transparency_3d.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use bevy::prelude::*;
66

77
fn main() {
88
App::new()
9-
.insert_resource(Msaa { samples: 4 })
9+
.insert_resource(Msaa::default())
1010
.add_plugins(DefaultPlugins)
1111
.add_startup_system(setup)
1212
.add_system(fade_transparency)

examples/shader/shader_instancing.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ fn queue_custom(
111111
) {
112112
let draw_custom = transparent_3d_draw_functions.read().id::<DrawCustom>();
113113

114-
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples);
114+
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
115115

116116
for (view, mut transparent_phase) in &mut views {
117117
let view_key = msaa_key | MeshPipelineKey::from_hdr(view.hdr);

0 commit comments

Comments
 (0)