Skip to content

Commit 5b5ca67

Browse files
authored
fix atmospherics memory leak (#20806)
# Objective Fix #20804 - Pipelines are getting recreated ad infinitum -> memory leak - result of a bad review comment by me, oops ## Solution - move the system to `RenderStartup` rather than `queue` ## Testing - nothing broke
1 parent 888859c commit 5b5ca67

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

crates/bevy_pbr/src/atmosphere/environment.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub struct AtmosphereProbeLayouts {
5858
}
5959

6060
#[derive(Resource)]
61-
pub struct AtmosphereProbePipelines {
61+
pub struct AtmosphereProbePipeline {
6262
pub environment: CachedComputePipelineId,
6363
}
6464

@@ -165,7 +165,7 @@ pub(super) fn prepare_probe_textures(
165165
}
166166
}
167167

168-
pub fn queue_atmosphere_probe_pipelines(
168+
pub fn init_atmosphere_probe_pipeline(
169169
pipeline_cache: Res<PipelineCache>,
170170
layouts: Res<AtmosphereProbeLayouts>,
171171
asset_server: Res<AssetServer>,
@@ -177,7 +177,7 @@ pub fn queue_atmosphere_probe_pipelines(
177177
shader: load_embedded_asset!(asset_server.as_ref(), "environment.wgsl"),
178178
..default()
179179
});
180-
commands.insert_resource(AtmosphereProbePipelines { environment });
180+
commands.insert_resource(AtmosphereProbePipeline { environment });
181181
}
182182

183183
// Ensure power-of-two dimensions to avoid edge update issues on cubemap faces
@@ -279,7 +279,7 @@ impl Node for EnvironmentNode {
279279
world: &World,
280280
) -> Result<(), NodeRunError> {
281281
let pipeline_cache = world.resource::<PipelineCache>();
282-
let pipelines = world.resource::<AtmosphereProbePipelines>();
282+
let pipelines = world.resource::<AtmosphereProbePipeline>();
283283
let view_entity = graph.view_entity();
284284

285285
let Some(environment_pipeline) = pipeline_cache.get_compute_pipeline(pipelines.environment)

crates/bevy_pbr/src/atmosphere/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ use bevy_render::{
6666
use bevy_core_pipeline::core_3d::graph::Core3d;
6767
use bevy_shader::load_shader_library;
6868
use environment::{
69-
init_atmosphere_probe_layout, prepare_atmosphere_probe_bind_groups,
70-
prepare_atmosphere_probe_components, prepare_probe_textures, queue_atmosphere_probe_pipelines,
71-
AtmosphereEnvironmentMap, EnvironmentNode,
69+
init_atmosphere_probe_layout, init_atmosphere_probe_pipeline,
70+
prepare_atmosphere_probe_bind_groups, prepare_atmosphere_probe_components,
71+
prepare_probe_textures, AtmosphereEnvironmentMap, EnvironmentNode,
7272
};
7373
use resources::{
7474
prepare_atmosphere_transforms, queue_render_sky_pipelines, AtmosphereTransforms,
@@ -143,7 +143,10 @@ impl Plugin for AtmospherePlugin {
143143
.init_resource::<AtmosphereLutPipelines>()
144144
.init_resource::<AtmosphereTransforms>()
145145
.init_resource::<SpecializedRenderPipelines<RenderSkyBindGroupLayouts>>()
146-
.add_systems(RenderStartup, init_atmosphere_probe_layout)
146+
.add_systems(
147+
RenderStartup,
148+
(init_atmosphere_probe_layout, init_atmosphere_probe_pipeline).chain(),
149+
)
147150
.add_systems(
148151
Render,
149152
(
@@ -154,9 +157,6 @@ impl Plugin for AtmospherePlugin {
154157
.in_set(RenderSystems::PrepareResources)
155158
.after(prepare_atmosphere_textures),
156159
prepare_atmosphere_probe_bind_groups.in_set(RenderSystems::PrepareBindGroups),
157-
queue_atmosphere_probe_pipelines
158-
.in_set(RenderSystems::Queue)
159-
.after(init_atmosphere_probe_layout),
160160
prepare_atmosphere_transforms.in_set(RenderSystems::PrepareResources),
161161
prepare_atmosphere_bind_groups.in_set(RenderSystems::PrepareBindGroups),
162162
),

0 commit comments

Comments
 (0)