Skip to content

Commit 9222906

Browse files
committed
associated TrackedRenderPass with the view Entity
1 parent f79d9b1 commit 9222906

File tree

8 files changed

+62
-55
lines changed

8 files changed

+62
-55
lines changed

crates/bevy_core_pipeline/src/bloom/mod.rs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -230,16 +230,18 @@ impl Node for BloomNode {
230230

231231
{
232232
let view = &BloomTextures::texture_view(&textures.texture_a, 0);
233-
let mut prefilter_pass =
234-
render_context.begin_tracked_render_pass(RenderPassDescriptor {
233+
let mut prefilter_pass = render_context.begin_tracked_render_pass(
234+
RenderPassDescriptor {
235235
label: Some("bloom_prefilter_pass"),
236236
color_attachments: &[Some(RenderPassColorAttachment {
237237
view,
238238
resolve_target: None,
239239
ops: Operations::default(),
240240
})],
241241
depth_stencil_attachment: None,
242-
});
242+
},
243+
view_entity,
244+
);
243245
prefilter_pass.set_render_pipeline(downsampling_prefilter_pipeline);
244246
prefilter_pass.set_bind_group(
245247
0,
@@ -252,16 +254,18 @@ impl Node for BloomNode {
252254

253255
for mip in 1..textures.mip_count {
254256
let view = &BloomTextures::texture_view(&textures.texture_a, mip);
255-
let mut downsampling_pass =
256-
render_context.begin_tracked_render_pass(RenderPassDescriptor {
257+
let mut downsampling_pass = render_context.begin_tracked_render_pass(
258+
RenderPassDescriptor {
257259
label: Some("bloom_downsampling_pass"),
258260
color_attachments: &[Some(RenderPassColorAttachment {
259261
view,
260262
resolve_target: None,
261263
ops: Operations::default(),
262264
})],
263265
depth_stencil_attachment: None,
264-
});
266+
},
267+
view_entity,
268+
);
265269
downsampling_pass.set_render_pipeline(downsampling_pipeline);
266270
downsampling_pass.set_bind_group(
267271
0,
@@ -274,16 +278,18 @@ impl Node for BloomNode {
274278

275279
for mip in (1..textures.mip_count).rev() {
276280
let view = &BloomTextures::texture_view(&textures.texture_b, mip - 1);
277-
let mut upsampling_pass =
278-
render_context.begin_tracked_render_pass(RenderPassDescriptor {
281+
let mut upsampling_pass = render_context.begin_tracked_render_pass(
282+
RenderPassDescriptor {
279283
label: Some("bloom_upsampling_pass"),
280284
color_attachments: &[Some(RenderPassColorAttachment {
281285
view,
282286
resolve_target: None,
283287
ops: Operations::default(),
284288
})],
285289
depth_stencil_attachment: None,
286-
});
290+
},
291+
view_entity,
292+
);
287293
upsampling_pass.set_render_pipeline(upsampling_pipeline);
288294
upsampling_pass.set_bind_group(
289295
0,
@@ -295,8 +301,8 @@ impl Node for BloomNode {
295301
}
296302

297303
{
298-
let mut upsampling_final_pass =
299-
render_context.begin_tracked_render_pass(RenderPassDescriptor {
304+
let mut upsampling_final_pass = render_context.begin_tracked_render_pass(
305+
RenderPassDescriptor {
300306
label: Some("bloom_upsampling_final_pass"),
301307
color_attachments: &[Some(view_target.get_unsampled_color_attachment(
302308
Operations {
@@ -305,7 +311,9 @@ impl Node for BloomNode {
305311
},
306312
))],
307313
depth_stencil_attachment: None,
308-
});
314+
},
315+
view_entity,
316+
);
309317
upsampling_final_pass.set_render_pipeline(upsampling_final_pipeline);
310318
upsampling_final_pass.set_bind_group(
311319
0,

crates/bevy_core_pipeline/src/core_2d/main_pass_2d_node.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ impl Node for MainPass2dNode {
6464
let _main_pass_2d = info_span!("main_pass_2d").entered();
6565

6666
let mut render_pass = target
67-
.render_pass(None)
67+
.render_pass(view_entity, None)
6868
.label("main_pass_2d")
6969
.color_ops(
7070
match camera_2d.clear_color {
@@ -78,11 +78,9 @@ impl Node for MainPass2dNode {
7878
)
7979
.begin(render_context);
8080

81-
render_pass.set_camera_viewport(&camera).render_phase(
82-
transparent_phase,
83-
world,
84-
view_entity,
85-
);
81+
render_pass
82+
.set_camera_viewport(&camera)
83+
.render_phase(transparent_phase, world);
8684
}
8785

8886
// WebGL2 quirk: if ending with a render pass with a custom viewport, the viewport isn't
@@ -93,7 +91,7 @@ impl Node for MainPass2dNode {
9391
let _reset_viewport_pass_2d = info_span!("reset_viewport_pass_2d").entered();
9492

9593
target
96-
.render_pass(None)
94+
.render_pass(view_entity, None)
9795
.label("reset_view_port_pass_2d")
9896
.color_ops(LoadOp::Load, true)
9997
.begin(render_context);

crates/bevy_core_pipeline/src/core_3d/main_pass_3d_node.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl Node for MainPass3dNode {
7171
let _main_opaque_pass_3d_span = info_span!("main_opaque_pass_3d").entered();
7272

7373
let mut render_pass = target
74-
.render_pass(Some(depth))
74+
.render_pass(view_entity, Some(depth))
7575
.label("main_opaque_pass_3d")
7676
.color_ops(
7777
match camera_3d.clear_color {
@@ -87,7 +87,7 @@ impl Node for MainPass3dNode {
8787
.begin(render_context);
8888
render_pass
8989
.set_camera_viewport(camera)
90-
.render_phase(opaque_phase, world, view_entity);
90+
.render_phase(opaque_phase, world);
9191
}
9292

9393
if !alpha_mask_phase.items.is_empty() {
@@ -97,16 +97,14 @@ impl Node for MainPass3dNode {
9797
let _main_alpha_mask_pass_3d_span = info_span!("main_alpha_mask_pass_3d").entered();
9898

9999
let mut render_pass = target
100-
.render_pass(Some(depth))
100+
.render_pass(view_entity, Some(depth))
101101
.label("main_alpha_mask_pass_3d")
102102
.color_ops(LoadOp::Load, true)
103103
.depth_ops(LoadOp::Load, true)
104104
.begin(render_context);
105-
render_pass.set_camera_viewport(camera).render_phase(
106-
alpha_mask_phase,
107-
world,
108-
view_entity,
109-
);
105+
render_pass
106+
.set_camera_viewport(camera)
107+
.render_phase(alpha_mask_phase, world);
110108
}
111109

112110
if !transparent_phase.items.is_empty() {
@@ -122,16 +120,14 @@ impl Node for MainPass3dNode {
122120
// As the opaque and alpha mask passes run first, opaque meshes can occlude
123121
// transparent ones.
124122
let mut render_pass = target
125-
.render_pass(Some(depth))
123+
.render_pass(view_entity, Some(depth))
126124
.label("main_transparent_pass_3d")
127125
.color_ops(LoadOp::Load, true)
128126
.depth_ops(LoadOp::Load, true)
129127
.begin(render_context);
130-
render_pass.set_camera_viewport(camera).render_phase(
131-
transparent_phase,
132-
world,
133-
view_entity,
134-
);
128+
render_pass
129+
.set_camera_viewport(camera)
130+
.render_phase(transparent_phase, world);
135131
}
136132

137133
// WebGL2 quirk: if ending with a render pass with a custom viewport, the viewport isn't
@@ -142,7 +138,7 @@ impl Node for MainPass3dNode {
142138
let _reset_viewport_pass_3d = info_span!("reset_viewport_pass_3d").entered();
143139

144140
target
145-
.render_pass(None)
141+
.render_pass(view_entity, None)
146142
.label("reset_viewport_pass_3d")
147143
.color_ops(LoadOp::Load, true)
148144
.begin(render_context);

crates/bevy_pbr/src/render/light.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,8 +1770,8 @@ impl Node for ShadowPassNode {
17701770
continue;
17711771
}
17721772

1773-
let mut render_pass =
1774-
render_context.begin_tracked_render_pass(RenderPassDescriptor {
1773+
let mut render_pass = render_context.begin_tracked_render_pass(
1774+
RenderPassDescriptor {
17751775
label: Some(&view_light.pass_name),
17761776
color_attachments: &[],
17771777
depth_stencil_attachment: Some(RenderPassDepthStencilAttachment {
@@ -1782,9 +1782,11 @@ impl Node for ShadowPassNode {
17821782
}),
17831783
stencil_ops: None,
17841784
}),
1785-
});
1785+
},
1786+
view_entity,
1787+
);
17861788

1787-
render_pass.render_phase(shadow_phase, world, view_entity);
1789+
render_pass.render_phase(shadow_phase, world);
17881790
}
17891791
}
17901792

crates/bevy_render/src/render_phase/draw_state.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,12 @@ impl DrawState {
110110
pub struct TrackedRenderPass<'a> {
111111
pass: RenderPass<'a>,
112112
state: DrawState,
113+
view_entity: Entity,
113114
}
114115

115116
impl<'a> TrackedRenderPass<'a> {
116117
/// Tracks the supplied render pass.
117-
pub fn new(device: &RenderDevice, pass: RenderPass<'a>) -> Self {
118+
pub fn new(device: &RenderDevice, pass: RenderPass<'a>, view_entity: Entity) -> Self {
118119
let limits = device.limits();
119120
let max_bind_groups = limits.max_bind_groups as usize;
120121
let max_vertex_buffers = limits.max_vertex_buffers as usize;
@@ -125,6 +126,7 @@ impl<'a> TrackedRenderPass<'a> {
125126
..default()
126127
},
127128
pass,
129+
view_entity,
128130
}
129131
}
130132

@@ -608,25 +610,21 @@ impl<'a> TrackedRenderPass<'a> {
608610
self.pass.set_blend_constant(wgpu::Color::from(color));
609611
}
610612

611-
pub fn render_phase<P: PhaseItem>(
612-
&mut self,
613-
render_phase: &RenderPhase<P>,
614-
world: &'a World,
615-
view: Entity,
616-
) {
613+
pub fn render_phase<P: PhaseItem>(&mut self, render_phase: &RenderPhase<P>, world: &'a World) {
617614
let draw_functions = world.resource::<DrawFunctions<P>>();
618615
let mut draw_functions = draw_functions.write();
619616
draw_functions.prepare(world);
620617

621618
for item in &render_phase.items {
622619
let draw_function = draw_functions.get_mut(item.draw_function()).unwrap();
623-
draw_function.draw(world, self, view, item);
620+
draw_function.draw(world, self, self.view_entity, item);
624621
}
625622
}
626623
}
627624

628625
pub struct TrackedRenderPassBuilder<'v> {
629626
label: Option<&'static str>,
627+
view_entity: Entity,
630628
view_target: &'v ViewTarget,
631629
view_depth_texture: Option<&'v ViewDepthTexture>,
632630
color_ops: Option<Operations<Color>>,
@@ -637,11 +635,13 @@ pub struct TrackedRenderPassBuilder<'v> {
637635

638636
impl<'v> TrackedRenderPassBuilder<'v> {
639637
pub fn new(
638+
view_entity: Entity,
640639
view_target: &'v ViewTarget,
641640
view_depth_texture: Option<&'v ViewDepthTexture>,
642641
) -> Self {
643642
Self {
644643
label: None,
644+
view_entity,
645645
view_target,
646646
view_depth_texture,
647647
color_ops: None,
@@ -704,11 +704,10 @@ impl<'v> TrackedRenderPassBuilder<'v> {
704704
depth_stencil_attachment,
705705
};
706706

707-
TrackedRenderPass::new(
708-
&render_context.render_device,
709-
render_context
710-
.command_encoder
711-
.begin_render_pass(&descriptor),
712-
)
707+
let render_pass = render_context
708+
.command_encoder
709+
.begin_render_pass(&descriptor);
710+
711+
TrackedRenderPass::new(&render_context.render_device, render_pass, self.view_entity)
713712
}
714713
}

crates/bevy_render/src/renderer/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,15 +283,18 @@ pub struct RenderContext {
283283
}
284284

285285
impl RenderContext {
286+
// Todo: replace this in favor of the `TrackedRenderPassBuilder`
286287
/// Creates a new [`TrackedRenderPass`] for the context,
287288
/// configured using the provided `descriptor`.
288289
pub fn begin_tracked_render_pass<'a>(
289290
&'a mut self,
290291
descriptor: RenderPassDescriptor<'a, '_>,
292+
view_entity: Entity,
291293
) -> TrackedRenderPass<'a> {
292294
TrackedRenderPass::new(
293295
&self.render_device,
294296
self.command_encoder.begin_render_pass(&descriptor),
297+
view_entity,
295298
)
296299
}
297300
}

crates/bevy_render/src/view/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,10 @@ impl ViewTarget {
227227

228228
pub fn render_pass<'v>(
229229
&'v self,
230+
view_entity: Entity,
230231
view_depth_texture: Option<&'v ViewDepthTexture>,
231232
) -> TrackedRenderPassBuilder {
232-
TrackedRenderPassBuilder::new(self, view_depth_texture)
233+
TrackedRenderPassBuilder::new(view_entity, self, view_depth_texture)
233234
}
234235
}
235236

crates/bevy_ui/src/render/render_pass.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,13 @@ impl Node for UiPassNode {
7878
};
7979

8080
let mut render_pass = target
81-
.render_pass(None)
81+
.render_pass(view_entity, None)
8282
.label("ui_pass")
8383
.unsampled()
8484
.color_ops(LoadOp::Load, true)
8585
.begin(render_context);
8686

87-
render_pass.render_phase(transparent_phase, world, view_entity);
87+
render_pass.render_phase(transparent_phase, world);
8888

8989
Ok(())
9090
}

0 commit comments

Comments
 (0)