Skip to content

Commit

Permalink
Autorelease encoders during drop
Browse files Browse the repository at this point in the history
  • Loading branch information
grovesNL committed Feb 3, 2025
1 parent ff4496b commit 026c807
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions wgpu-hal/src/metal/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,9 @@ impl super::CommandEncoder {

pub(super) fn leave_blit(&mut self) {
if let Some(encoder) = self.state.blit.take() {
encoder.end_encoding();
objc::rc::autoreleasepool(move || {
drop(encoder);
});
}
}

Expand Down Expand Up @@ -207,10 +209,14 @@ impl crate::CommandEncoder for super::CommandEncoder {
// when discarding, we don't have a guarantee that
// everything is in a good state, so check carefully
if let Some(encoder) = self.state.render.take() {
encoder.end_encoding();
objc::rc::autoreleasepool(|| {
drop(encoder);
});
}
if let Some(encoder) = self.state.compute.take() {
encoder.end_encoding();
objc::rc::autoreleasepool(|| {
drop(encoder);
});
}
self.raw_cmd_buf = None;
}
Expand Down Expand Up @@ -640,7 +646,9 @@ impl crate::CommandEncoder for super::CommandEncoder {
}

unsafe fn end_render_pass(&mut self) {
self.state.render.take().unwrap().end_encoding();
objc::rc::autoreleasepool(|| {
drop(self.state.render.take().unwrap());
});
}

unsafe fn set_bind_group(
Expand Down Expand Up @@ -1211,7 +1219,9 @@ impl crate::CommandEncoder for super::CommandEncoder {
});
}
unsafe fn end_compute_pass(&mut self) {
self.state.compute.take().unwrap().end_encoding();
objc::rc::autoreleasepool(|| {
drop(self.state.compute.take().unwrap());
});
}

unsafe fn set_compute_pipeline(&mut self, pipeline: &super::ComputePipeline) {
Expand Down

0 comments on commit 026c807

Please sign in to comment.