Skip to content

Commit

Permalink
Free textures after submitting queue instead of before with wgpu rend…
Browse files Browse the repository at this point in the history
…erer (#5226)

* Closes #5224

I'm unfamiliar with wgpu, so I'd like someone to confirm, that calling
`wgpu::Texture` _after_ `wgpu::Queue::submit` is in fact the right thing
to do.

---------

Co-authored-by: Andreas Reich <[email protected]>
  • Loading branch information
Rusty-Cube and Wumpf authored Oct 6, 2024
1 parent 0f2b427 commit 7bd6f83
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions crates/egui-wgpu/src/winit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -668,13 +668,6 @@ impl Painter {
);
}

{
let mut renderer = render_state.renderer.write();
for id in &textures_delta.free {
renderer.free_texture(id);
}
}

let encoded = {
crate::profile_scope!("CommandEncoder::finish");
encoder.finish()
Expand All @@ -691,6 +684,16 @@ impl Painter {
vsync_sec += start.elapsed().as_secs_f32();
};

// Free textures marked for destruction **after** queue submit since they might still be used in the current frame.
// Calling `wgpu::Texture::destroy` on a texture that is still in use would invalidate the command buffer(s) it is used in.
// However, once we called `wgpu::Queue::submit`, it is up for wgpu to determine how long the underlying gpu resource has to live.
{
let mut renderer = render_state.renderer.write();
for id in &textures_delta.free {
renderer.free_texture(id);
}
}

let screenshot = if capture {
self.screen_capture_state
.as_ref()
Expand Down

0 comments on commit 7bd6f83

Please sign in to comment.