Skip to content

Commit 14bad7a

Browse files
committed
migrate bloom
1 parent bdd3ef7 commit 14bad7a

File tree

6 files changed

+388
-400
lines changed

6 files changed

+388
-400
lines changed

crates/bevy_core_pipeline/src/bloom/downsampling_pipeline.rs

Lines changed: 0 additions & 186 deletions
This file was deleted.

crates/bevy_core_pipeline/src/bloom/mod.rs

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
mod downsampling_pipeline;
1+
mod pipeline;
22
mod settings;
3-
mod upsampling_pipeline;
43

54
use bevy_image::ToExtents;
5+
use settings::BloomUniforms;
66
pub use settings::{Bloom, BloomCompositeMode, BloomPrefilter};
77

88
use crate::{
@@ -27,15 +27,9 @@ use bevy_render::{
2727
view::ViewTarget,
2828
Render, RenderApp, RenderSystems,
2929
};
30-
use downsampling_pipeline::{
31-
prepare_downsampling_pipeline, BloomDownsamplingPipeline, BloomDownsamplingPipelineIds,
32-
BloomUniforms,
33-
};
30+
use pipeline::{prepare_bloom_pipelines, BloomPipelineCache, BloomPipelineIds};
3431
#[cfg(feature = "trace")]
3532
use tracing::info_span;
36-
use upsampling_pipeline::{
37-
prepare_upsampling_pipeline, BloomUpsamplingPipeline, UpsamplingPipelineIds,
38-
};
3933

4034
const BLOOM_TEXTURE_FORMAT: TextureFormat = TextureFormat::Rg11b10Ufloat;
4135

@@ -57,13 +51,10 @@ impl Plugin for BloomPlugin {
5751
return;
5852
};
5953
render_app
60-
.init_resource::<SpecializedRenderPipelines<BloomDownsamplingPipeline>>()
61-
.init_resource::<SpecializedRenderPipelines<BloomUpsamplingPipeline>>()
6254
.add_systems(
6355
Render,
6456
(
65-
prepare_downsampling_pipeline.in_set(RenderSystems::Prepare),
66-
prepare_upsampling_pipeline.in_set(RenderSystems::Prepare),
57+
prepare_bloom_pipelines.in_set(RenderSystems::Prepare),
6758
prepare_bloom_textures.in_set(RenderSystems::PrepareResources),
6859
prepare_bloom_bind_groups.in_set(RenderSystems::PrepareBindGroups),
6960
),
@@ -86,9 +77,7 @@ impl Plugin for BloomPlugin {
8677
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
8778
return;
8879
};
89-
render_app
90-
.init_resource::<BloomDownsamplingPipeline>()
91-
.init_resource::<BloomUpsamplingPipeline>();
80+
render_app.init_resource::<BloomPipelineCache>();
9281
}
9382
}
9483

@@ -102,8 +91,7 @@ impl ViewNode for BloomNode {
10291
&'static BloomBindGroups,
10392
&'static DynamicUniformIndex<BloomUniforms>,
10493
&'static Bloom,
105-
&'static UpsamplingPipelineIds,
106-
&'static BloomDownsamplingPipelineIds,
94+
&'static BloomPipelineIds,
10795
);
10896

10997
// Atypically for a post-processing effect, we do not need to
@@ -120,31 +108,30 @@ impl ViewNode for BloomNode {
120108
bind_groups,
121109
uniform_index,
122110
bloom_settings,
123-
upsampling_pipeline_ids,
124-
downsampling_pipeline_ids,
111+
bloom_pipeline_ids,
125112
): QueryItem<'w, '_, Self::ViewQuery>,
126113
world: &'w World,
127114
) -> Result<(), NodeRunError> {
128115
if bloom_settings.intensity == 0.0 {
129116
return Ok(());
130117
}
131118

132-
let downsampling_pipeline_res = world.resource::<BloomDownsamplingPipeline>();
119+
let bloom_pipelines = world.resource::<BloomPipelineCache>();
133120
let pipeline_cache = world.resource::<PipelineCache>();
134121
let uniforms = world.resource::<ComponentUniforms<BloomUniforms>>();
135122

136123
let (
137124
Some(uniforms),
138-
Some(downsampling_first_pipeline),
139-
Some(downsampling_pipeline),
140-
Some(upsampling_pipeline),
141-
Some(upsampling_final_pipeline),
125+
Some(downsample_first_pipeline),
126+
Some(downsample_main_pipeline),
127+
Some(upsample_main_pipeline),
128+
Some(upsample_last_pipeline),
142129
) = (
143130
uniforms.binding(),
144-
pipeline_cache.get_render_pipeline(downsampling_pipeline_ids.first),
145-
pipeline_cache.get_render_pipeline(downsampling_pipeline_ids.main),
146-
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_main),
147-
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_final),
131+
pipeline_cache.get_render_pipeline(bloom_pipeline_ids.downsample_first),
132+
pipeline_cache.get_render_pipeline(bloom_pipeline_ids.downsample_main),
133+
pipeline_cache.get_render_pipeline(bloom_pipeline_ids.upsample_main),
134+
pipeline_cache.get_render_pipeline(bloom_pipeline_ids.upsample_last),
148135
)
149136
else {
150137
return Ok(());
@@ -169,7 +156,7 @@ impl ViewNode for BloomNode {
169156
{
170157
let downsampling_first_bind_group = render_device.create_bind_group(
171158
"bloom_downsampling_first_bind_group",
172-
&downsampling_pipeline_res.bind_group_layout,
159+
&bloom_pipelines.downsample.specializer().bind_group_layout,
173160
&BindGroupEntries::sequential((
174161
// Read from main texture directly
175162
view_texture,
@@ -191,7 +178,7 @@ impl ViewNode for BloomNode {
191178
timestamp_writes: None,
192179
occlusion_query_set: None,
193180
});
194-
downsampling_first_pass.set_pipeline(downsampling_first_pipeline);
181+
downsampling_first_pass.set_pipeline(downsample_first_pipeline);
195182
downsampling_first_pass.set_bind_group(
196183
0,
197184
&downsampling_first_bind_group,
@@ -215,7 +202,7 @@ impl ViewNode for BloomNode {
215202
timestamp_writes: None,
216203
occlusion_query_set: None,
217204
});
218-
downsampling_pass.set_pipeline(downsampling_pipeline);
205+
downsampling_pass.set_pipeline(downsample_main_pipeline);
219206
downsampling_pass.set_bind_group(
220207
0,
221208
&bind_groups.downsampling_bind_groups[mip as usize - 1],
@@ -242,7 +229,7 @@ impl ViewNode for BloomNode {
242229
timestamp_writes: None,
243230
occlusion_query_set: None,
244231
});
245-
upsampling_pass.set_pipeline(upsampling_pipeline);
232+
upsampling_pass.set_pipeline(upsample_main_pipeline);
246233
upsampling_pass.set_bind_group(
247234
0,
248235
&bind_groups.upsampling_bind_groups
@@ -270,7 +257,7 @@ impl ViewNode for BloomNode {
270257
timestamp_writes: None,
271258
occlusion_query_set: None,
272259
});
273-
upsampling_final_pass.set_pipeline(upsampling_final_pipeline);
260+
upsampling_final_pass.set_pipeline(upsample_last_pipeline);
274261
upsampling_final_pass.set_bind_group(
275262
0,
276263
&bind_groups.upsampling_bind_groups[(bloom_texture.mip_count - 1) as usize],
@@ -413,12 +400,11 @@ struct BloomBindGroups {
413400
fn prepare_bloom_bind_groups(
414401
mut commands: Commands,
415402
render_device: Res<RenderDevice>,
416-
downsampling_pipeline: Res<BloomDownsamplingPipeline>,
417-
upsampling_pipeline: Res<BloomUpsamplingPipeline>,
403+
bloom_pipelines: Res<BloomPipelineCache>,
418404
views: Query<(Entity, &BloomTexture)>,
419405
uniforms: Res<ComponentUniforms<BloomUniforms>>,
420406
) {
421-
let sampler = &downsampling_pipeline.sampler;
407+
let sampler = &bloom_pipelines.downsample.specializer().sampler;
422408

423409
for (entity, bloom_texture) in &views {
424410
let bind_group_count = bloom_texture.mip_count as usize - 1;
@@ -427,7 +413,7 @@ fn prepare_bloom_bind_groups(
427413
for mip in 1..bloom_texture.mip_count {
428414
downsampling_bind_groups.push(render_device.create_bind_group(
429415
"bloom_downsampling_bind_group",
430-
&downsampling_pipeline.bind_group_layout,
416+
&bloom_pipelines.downsample.specializer().bind_group_layout,
431417
&BindGroupEntries::sequential((
432418
&bloom_texture.view(mip - 1),
433419
sampler,
@@ -440,7 +426,7 @@ fn prepare_bloom_bind_groups(
440426
for mip in (0..bloom_texture.mip_count).rev() {
441427
upsampling_bind_groups.push(render_device.create_bind_group(
442428
"bloom_upsampling_bind_group",
443-
&upsampling_pipeline.bind_group_layout,
429+
&bloom_pipelines.upsample.specializer().bind_group_layout,
444430
&BindGroupEntries::sequential((
445431
&bloom_texture.view(mip),
446432
sampler,

0 commit comments

Comments
 (0)