Skip to content

Commit ae48687

Browse files
authored
Support MainPassResolutionOverride for Atmosphere (#22013)
# Objective Fixes #21973 ## Solution Use `MainPassResolutionOverride` in `RenderSkyNode`. ## Testing Tested with DLSS upscaling.
1 parent 920e77b commit ae48687

File tree

1 file changed

+20
-11
lines changed
  • crates/bevy_pbr/src/atmosphere

1 file changed

+20
-11
lines changed

crates/bevy_pbr/src/atmosphere/node.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use bevy_camera::{MainPassResolutionOverride, Viewport};
12
use bevy_ecs::{query::QueryItem, system::lifetimeless::Read, world::World};
23
use bevy_math::{UVec2, Vec3Swizzles};
34
use bevy_render::{
5+
camera::ExtractedCamera,
46
diagnostic::RecordDiagnostics,
57
extract_component::DynamicUniformIndex,
68
render_graph::{NodeRunError, RenderGraphContext, RenderLabel, ViewNode},
@@ -165,6 +167,7 @@ pub(super) struct RenderSkyNode;
165167

166168
impl ViewNode for RenderSkyNode {
167169
type ViewQuery = (
170+
Read<ExtractedCamera>,
168171
Read<AtmosphereBindGroups>,
169172
Read<ViewTarget>,
170173
Read<DynamicUniformIndex<GpuAtmosphere>>,
@@ -173,13 +176,15 @@ impl ViewNode for RenderSkyNode {
173176
Read<ViewUniformOffset>,
174177
Read<ViewLightsUniformOffset>,
175178
Read<RenderSkyPipelineId>,
179+
Option<Read<MainPassResolutionOverride>>,
176180
);
177181

178182
fn run<'w>(
179183
&self,
180184
_graph: &mut RenderGraphContext,
181185
render_context: &mut RenderContext<'w>,
182186
(
187+
camera,
183188
atmosphere_bind_groups,
184189
view_target,
185190
atmosphere_uniforms_offset,
@@ -188,6 +193,7 @@ impl ViewNode for RenderSkyNode {
188193
view_uniforms_offset,
189194
lights_uniforms_offset,
190195
render_sky_pipeline_id,
196+
resolution_override,
191197
): QueryItem<'w, '_, Self::ViewQuery>,
192198
world: &'w World,
193199
) -> Result<(), NodeRunError> {
@@ -200,19 +206,22 @@ impl ViewNode for RenderSkyNode {
200206

201207
let diagnostics = render_context.diagnostic_recorder();
202208

203-
let mut render_sky_pass =
204-
render_context
205-
.command_encoder()
206-
.begin_render_pass(&RenderPassDescriptor {
207-
label: Some("render_sky"),
208-
color_attachments: &[Some(view_target.get_color_attachment())],
209-
depth_stencil_attachment: None,
210-
timestamp_writes: None,
211-
occlusion_query_set: None,
212-
});
209+
let mut render_sky_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
210+
label: Some("render_sky"),
211+
color_attachments: &[Some(view_target.get_color_attachment())],
212+
depth_stencil_attachment: None,
213+
timestamp_writes: None,
214+
occlusion_query_set: None,
215+
});
213216
let pass_span = diagnostics.pass_span(&mut render_sky_pass, "render_sky");
214217

215-
render_sky_pass.set_pipeline(render_sky_pipeline);
218+
if let Some(viewport) =
219+
Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override)
220+
{
221+
render_sky_pass.set_camera_viewport(&viewport);
222+
}
223+
224+
render_sky_pass.set_render_pipeline(render_sky_pipeline);
216225
render_sky_pass.set_bind_group(
217226
0,
218227
&atmosphere_bind_groups.render_sky,

0 commit comments

Comments
 (0)