1- mod downsampling_pipeline ;
1+ mod pipeline ;
22mod settings;
3- mod upsampling_pipeline;
43
54use bevy_image:: ToExtents ;
5+ use settings:: BloomUniforms ;
66pub use settings:: { Bloom , BloomCompositeMode , BloomPrefilter } ;
77
88use 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" ) ]
3532use tracing:: info_span;
36- use upsampling_pipeline:: {
37- prepare_upsampling_pipeline, BloomUpsamplingPipeline , UpsamplingPipelineIds ,
38- } ;
3933
4034const 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 {
413400fn 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