@@ -9,6 +9,8 @@ use bevy_render::{
99 view:: { ViewDepthTexture , ViewTarget , ViewUniformOffset } ,
1010} ;
1111
12+ use crate :: prepass:: DepthPrepass ;
13+
1214use super :: { OitResolveBindGroup , OitResolvePipeline , OitResolvePipelineId } ;
1315
1416/// Render label for the OIT resolve pass.
@@ -26,15 +28,22 @@ impl ViewNode for OitResolveNode {
2628 & ' static OitResolvePipelineId ,
2729 & ' static ViewDepthTexture ,
2830 Option < & ' static MainPassResolutionOverride > ,
31+ Has < DepthPrepass > ,
2932 ) ;
3033
3134 fn run (
3235 & self ,
3336 _graph : & mut RenderGraphContext ,
3437 render_context : & mut RenderContext ,
35- ( camera, view_target, view_uniform, oit_resolve_pipeline_id, depth, resolution_override) : QueryItem <
36- Self :: ViewQuery ,
37- > ,
38+ (
39+ camera,
40+ view_target,
41+ view_uniform,
42+ oit_resolve_pipeline_id,
43+ depth,
44+ resolution_override,
45+ depth_prepass,
46+ ) : QueryItem < Self :: ViewQuery > ,
3847 world : & World ,
3948 ) -> Result < ( ) , NodeRunError > {
4049 let Some ( resolve_pipeline) = world. get_resource :: < OitResolvePipeline > ( ) else {
@@ -53,12 +62,18 @@ impl ViewNode for OitResolveNode {
5362
5463 let diagnostics = render_context. diagnostic_recorder ( ) ;
5564
56- let depth_bind_group = render_context. render_device ( ) . create_bind_group (
57- "oit_resolve_depth_bind_group" ,
58- & pipeline_cache
59- . get_bind_group_layout ( & resolve_pipeline. oit_depth_bind_group_layout ) ,
60- & BindGroupEntries :: single ( depth. view ( ) ) ,
61- ) ;
65+ let depth_bind_group = if !depth_prepass {
66+ Some (
67+ render_context. render_device ( ) . create_bind_group (
68+ "oit_resolve_depth_bind_group" ,
69+ & pipeline_cache
70+ . get_bind_group_layout ( & resolve_pipeline. oit_depth_bind_group_layout ) ,
71+ & BindGroupEntries :: single ( depth. view ( ) ) ,
72+ ) ,
73+ )
74+ } else {
75+ None
76+ } ;
6277
6378 let mut render_pass = render_context. begin_tracked_render_pass ( RenderPassDescriptor {
6479 label : Some ( "oit_resolve" ) ,
@@ -77,8 +92,9 @@ impl ViewNode for OitResolveNode {
7792
7893 render_pass. set_render_pipeline ( pipeline) ;
7994 render_pass. set_bind_group ( 0 , bind_group, & [ view_uniform. offset ] ) ;
80- render_pass. set_bind_group ( 1 , & depth_bind_group, & [ ] ) ;
81-
95+ if let Some ( depth_bind_group) = & depth_bind_group {
96+ render_pass. set_bind_group ( 1 , depth_bind_group, & [ ] ) ;
97+ }
8298 render_pass. draw ( 0 ..3 , 0 ..1 ) ;
8399
84100 pass_span. end ( & mut render_pass) ;
0 commit comments