Path: blob/main/crates/bevy_anti_alias/src/dlss/node.rs
9374 views
use super::{1prepare::DlssRenderContext, Dlss, DlssRayReconstructionFeature, DlssSuperResolutionFeature,2ViewDlssRayReconstructionTextures,3};4use bevy_camera::MainPassResolutionOverride;5use bevy_core_pipeline::prepass::ViewPrepassTextures;6use bevy_ecs::system::Res;7use bevy_render::{8camera::TemporalJitter,9diagnostic::RecordDiagnostics,10renderer::{RenderAdapter, RenderContext, ViewQuery},11view::ViewTarget,12};13use dlss_wgpu::{14ray_reconstruction::{15DlssRayReconstructionRenderParameters, DlssRayReconstructionSpecularGuide,16},17super_resolution::{DlssSuperResolutionExposure, DlssSuperResolutionRenderParameters},18};1920pub fn dlss_super_resolution(21view: ViewQuery<(22&Dlss<DlssSuperResolutionFeature>,23&DlssRenderContext<DlssSuperResolutionFeature>,24&MainPassResolutionOverride,25&TemporalJitter,26&ViewTarget,27&ViewPrepassTextures,28)>,29adapter: Res<RenderAdapter>,30mut ctx: RenderContext,31) {32let (dlss, dlss_context, resolution_override, temporal_jitter, view_target, prepass_textures) =33view.into_inner();3435let (Some(prepass_depth_texture), Some(prepass_motion_vectors_texture)) =36(&prepass_textures.depth, &prepass_textures.motion_vectors)37else {38return;39};4041let view_target = view_target.post_process_write();4243let render_resolution = resolution_override.0;44let render_parameters = DlssSuperResolutionRenderParameters {45color: &view_target.source,46depth: &prepass_depth_texture.texture.default_view,47motion_vectors: &prepass_motion_vectors_texture.texture.default_view,48exposure: DlssSuperResolutionExposure::Automatic, // TODO49bias: None, // TODO50dlss_output: &view_target.destination,51reset: dlss.reset,52jitter_offset: (-temporal_jitter.offset).to_array(),53partial_texture_size: Some(render_resolution.to_array()),54motion_vector_scale: Some((-render_resolution.as_vec2()).to_array()),55};5657let diagnostics = ctx.diagnostic_recorder();58let diagnostics = diagnostics.as_deref();59let time_span = diagnostics.time_span(ctx.command_encoder(), "dlss_super_resolution");6061let mut dlss_context = dlss_context.context.lock().unwrap();62let dlss_command_buffer = dlss_context63.render(render_parameters, ctx.command_encoder(), &adapter)64.expect("Failed to render DLSS Super Resolution");6566ctx.add_command_buffer(dlss_command_buffer);67time_span.end(ctx.command_encoder());68}6970pub fn dlss_ray_reconstruction(71view: ViewQuery<(72&Dlss<DlssRayReconstructionFeature>,73&DlssRenderContext<DlssRayReconstructionFeature>,74&MainPassResolutionOverride,75&TemporalJitter,76&ViewTarget,77&ViewPrepassTextures,78&ViewDlssRayReconstructionTextures,79)>,80adapter: Res<RenderAdapter>,81mut ctx: RenderContext,82) {83let (84dlss,85dlss_context,86resolution_override,87temporal_jitter,88view_target,89prepass_textures,90ray_reconstruction_textures,91) = view.into_inner();9293let (Some(prepass_depth_texture), Some(prepass_motion_vectors_texture)) =94(&prepass_textures.depth, &prepass_textures.motion_vectors)95else {96return;97};9899let view_target = view_target.post_process_write();100101let render_resolution = resolution_override.0;102let render_parameters = DlssRayReconstructionRenderParameters {103diffuse_albedo: &ray_reconstruction_textures.diffuse_albedo.default_view,104specular_albedo: &ray_reconstruction_textures.specular_albedo.default_view,105normals: &ray_reconstruction_textures.normal_roughness.default_view,106roughness: None,107color: &view_target.source,108depth: &prepass_depth_texture.texture.default_view,109motion_vectors: &prepass_motion_vectors_texture.texture.default_view,110specular_guide: DlssRayReconstructionSpecularGuide::SpecularMotionVectors(111&ray_reconstruction_textures112.specular_motion_vectors113.default_view,114),115screen_space_subsurface_scattering_guide: None, // TODO116bias: None, // TODO117dlss_output: &view_target.destination,118reset: dlss.reset,119jitter_offset: (-temporal_jitter.offset).to_array(),120partial_texture_size: Some(render_resolution.to_array()),121motion_vector_scale: Some((-render_resolution.as_vec2()).to_array()),122};123124let diagnostics = ctx.diagnostic_recorder();125let diagnostics = diagnostics.as_deref();126let time_span = diagnostics.time_span(ctx.command_encoder(), "dlss_ray_reconstruction");127128let mut dlss_context = dlss_context.context.lock().unwrap();129let dlss_command_buffer = dlss_context130.render(render_parameters, ctx.command_encoder(), &adapter)131.expect("Failed to render DLSS Ray Reconstruction");132133ctx.add_command_buffer(dlss_command_buffer);134time_span.end(ctx.command_encoder());135}136137138