From 83abe2a06d30ea0e73a2e32f8f14c59f2d2410ff Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Thu, 9 Sep 2021 09:13:01 -0400 Subject: [PATCH] Still close the encoder on error --- wgpu-core/src/command/mod.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/wgpu-core/src/command/mod.rs b/wgpu-core/src/command/mod.rs index b9243be022..9dbb9ed5de 100644 --- a/wgpu-core/src/command/mod.rs +++ b/wgpu-core/src/command/mod.rs @@ -348,16 +348,23 @@ impl Global { let mut token = Token::root(); let (mut cmd_buf_guard, _) = hub.command_buffers.write(&mut token); - let error = match CommandBuffer::get_encoder_mut(&mut *cmd_buf_guard, encoder_id) { - Ok(cmd_buf) => { - cmd_buf.encoder.close(); - cmd_buf.status = CommandEncoderStatus::Finished; - //Note: if we want to stop tracking the swapchain texture view, - // this is the place to do it. - log::trace!("Command buffer {:?} {:#?}", encoder_id, cmd_buf.trackers); - None - } - Err(e) => Some(e), + let error = match cmd_buf_guard.get_mut(encoder_id) { + Ok(cmd_buf) => match cmd_buf.status { + CommandEncoderStatus::Recording => { + cmd_buf.encoder.close(); + cmd_buf.status = CommandEncoderStatus::Finished; + //Note: if we want to stop tracking the swapchain texture view, + // this is the place to do it. + log::trace!("Command buffer {:?} {:#?}", encoder_id, cmd_buf.trackers); + None + } + CommandEncoderStatus::Finished => Some(CommandEncoderError::NotRecording), + CommandEncoderStatus::Error => { + cmd_buf.encoder.close(); + Some(CommandEncoderError::Invalid) + } + }, + Err(_) => Some(CommandEncoderError::Invalid), }; (encoder_id, error)