Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_anti_alias/src/dlss/node.rs
9366 views
1
use super::{
2
prepare::DlssRenderContext, Dlss, DlssRayReconstructionFeature, DlssSuperResolutionFeature,
3
ViewDlssRayReconstructionTextures,
4
};
5
use bevy_camera::MainPassResolutionOverride;
6
use bevy_core_pipeline::prepass::ViewPrepassTextures;
7
use bevy_ecs::system::Res;
8
use bevy_render::{
9
camera::TemporalJitter,
10
diagnostic::RecordDiagnostics,
11
renderer::{RenderAdapter, RenderContext, ViewQuery},
12
view::ViewTarget,
13
};
14
use dlss_wgpu::{
15
ray_reconstruction::{
16
DlssRayReconstructionRenderParameters, DlssRayReconstructionSpecularGuide,
17
},
18
super_resolution::{DlssSuperResolutionExposure, DlssSuperResolutionRenderParameters},
19
};
20
21
pub fn dlss_super_resolution(
22
view: ViewQuery<(
23
&Dlss<DlssSuperResolutionFeature>,
24
&DlssRenderContext<DlssSuperResolutionFeature>,
25
&MainPassResolutionOverride,
26
&TemporalJitter,
27
&ViewTarget,
28
&ViewPrepassTextures,
29
)>,
30
adapter: Res<RenderAdapter>,
31
mut ctx: RenderContext,
32
) {
33
let (dlss, dlss_context, resolution_override, temporal_jitter, view_target, prepass_textures) =
34
view.into_inner();
35
36
let (Some(prepass_depth_texture), Some(prepass_motion_vectors_texture)) =
37
(&prepass_textures.depth, &prepass_textures.motion_vectors)
38
else {
39
return;
40
};
41
42
let view_target = view_target.post_process_write();
43
44
let render_resolution = resolution_override.0;
45
let render_parameters = DlssSuperResolutionRenderParameters {
46
color: &view_target.source,
47
depth: &prepass_depth_texture.texture.default_view,
48
motion_vectors: &prepass_motion_vectors_texture.texture.default_view,
49
exposure: DlssSuperResolutionExposure::Automatic, // TODO
50
bias: None, // TODO
51
dlss_output: &view_target.destination,
52
reset: dlss.reset,
53
jitter_offset: (-temporal_jitter.offset).to_array(),
54
partial_texture_size: Some(render_resolution.to_array()),
55
motion_vector_scale: Some((-render_resolution.as_vec2()).to_array()),
56
};
57
58
let diagnostics = ctx.diagnostic_recorder();
59
let diagnostics = diagnostics.as_deref();
60
let time_span = diagnostics.time_span(ctx.command_encoder(), "dlss_super_resolution");
61
62
let mut dlss_context = dlss_context.context.lock().unwrap();
63
let dlss_command_buffer = dlss_context
64
.render(render_parameters, ctx.command_encoder(), &adapter)
65
.expect("Failed to render DLSS Super Resolution");
66
67
ctx.add_command_buffer(dlss_command_buffer);
68
time_span.end(ctx.command_encoder());
69
}
70
71
pub fn dlss_ray_reconstruction(
72
view: ViewQuery<(
73
&Dlss<DlssRayReconstructionFeature>,
74
&DlssRenderContext<DlssRayReconstructionFeature>,
75
&MainPassResolutionOverride,
76
&TemporalJitter,
77
&ViewTarget,
78
&ViewPrepassTextures,
79
&ViewDlssRayReconstructionTextures,
80
)>,
81
adapter: Res<RenderAdapter>,
82
mut ctx: RenderContext,
83
) {
84
let (
85
dlss,
86
dlss_context,
87
resolution_override,
88
temporal_jitter,
89
view_target,
90
prepass_textures,
91
ray_reconstruction_textures,
92
) = view.into_inner();
93
94
let (Some(prepass_depth_texture), Some(prepass_motion_vectors_texture)) =
95
(&prepass_textures.depth, &prepass_textures.motion_vectors)
96
else {
97
return;
98
};
99
100
let view_target = view_target.post_process_write();
101
102
let render_resolution = resolution_override.0;
103
let render_parameters = DlssRayReconstructionRenderParameters {
104
diffuse_albedo: &ray_reconstruction_textures.diffuse_albedo.default_view,
105
specular_albedo: &ray_reconstruction_textures.specular_albedo.default_view,
106
normals: &ray_reconstruction_textures.normal_roughness.default_view,
107
roughness: None,
108
color: &view_target.source,
109
depth: &prepass_depth_texture.texture.default_view,
110
motion_vectors: &prepass_motion_vectors_texture.texture.default_view,
111
specular_guide: DlssRayReconstructionSpecularGuide::SpecularMotionVectors(
112
&ray_reconstruction_textures
113
.specular_motion_vectors
114
.default_view,
115
),
116
screen_space_subsurface_scattering_guide: None, // TODO
117
bias: None, // TODO
118
dlss_output: &view_target.destination,
119
reset: dlss.reset,
120
jitter_offset: (-temporal_jitter.offset).to_array(),
121
partial_texture_size: Some(render_resolution.to_array()),
122
motion_vector_scale: Some((-render_resolution.as_vec2()).to_array()),
123
};
124
125
let diagnostics = ctx.diagnostic_recorder();
126
let diagnostics = diagnostics.as_deref();
127
let time_span = diagnostics.time_span(ctx.command_encoder(), "dlss_ray_reconstruction");
128
129
let mut dlss_context = dlss_context.context.lock().unwrap();
130
let dlss_command_buffer = dlss_context
131
.render(render_parameters, ctx.command_encoder(), &adapter)
132
.expect("Failed to render DLSS Ray Reconstruction");
133
134
ctx.add_command_buffer(dlss_command_buffer);
135
time_span.end(ctx.command_encoder());
136
}
137
138