From d1a17f95104d296f2894a3b1b874e223cfed8baa Mon Sep 17 00:00:00 2001 From: Matthieu Vachon Date: Sat, 26 Aug 2023 03:57:27 -0400 Subject: [PATCH] Improved display of some error and remove `unimplemented!` for `UnexpectedImageLayout` display (#2305) It appeared to me quite often that I've it some error and the message was lost on display because some `Display` implementation don't record the cause. Improved some of those that I've spotted while debugging some bad code I had. Also removed the `unimplemented` for `AccessError::UnexpectedImageLayout` and now giving a more descriptive message. --- vulkano/src/command_buffer/traits.rs | 38 +++++++++++--------- vulkano/src/sync/future/mod.rs | 52 ++++++++++++++-------------- 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/vulkano/src/command_buffer/traits.rs b/vulkano/src/command_buffer/traits.rs index bfa6cb04a..adea9c757 100644 --- a/vulkano/src/command_buffer/traits.rs +++ b/vulkano/src/command_buffer/traits.rs @@ -482,22 +482,28 @@ impl Error for CommandBufferExecError { impl Display for CommandBufferExecError { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> { - write!( - f, - "{}", - match self { - CommandBufferExecError::AccessError { .. } => - "access to a resource has been denied", - CommandBufferExecError::OneTimeSubmitAlreadySubmitted => { - "the command buffer or one of the secondary command buffers it executes was \ - created with the \"one time submit\" flag, but has already been submitted in \ - the past" - } - CommandBufferExecError::ExclusiveAlreadyInUse => { - "the command buffer or one of the secondary command buffers it executes is \ - already in use was not created with the \"concurrent\" flag" - } + let value = match self { + CommandBufferExecError::AccessError { + error, + command_name, + command_offset, + command_param, + } => return write!( + f, + "access to a resource has been denied on command {} (offset: {}, param: {}): {}", + command_name, command_offset, command_param, error + ), + CommandBufferExecError::OneTimeSubmitAlreadySubmitted => { + "the command buffer or one of the secondary command buffers it executes was \ + created with the \"one time submit\" flag, but has already been submitted in \ + the past" } - ) + CommandBufferExecError::ExclusiveAlreadyInUse => { + "the command buffer or one of the secondary command buffers it executes is \ + already in use was not created with the \"concurrent\" flag" + } + }; + + write!(f, "{}", value) } } diff --git a/vulkano/src/sync/future/mod.rs b/vulkano/src/sync/future/mod.rs index 64a074220..b186dfe1c 100644 --- a/vulkano/src/sync/future/mod.rs +++ b/vulkano/src/sync/future/mod.rs @@ -502,26 +502,28 @@ impl Error for AccessError {} impl Display for AccessError { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> { - write!( - f, - "{}", - match self { - AccessError::AlreadyInUse => { - "the resource is already in use, and there is no tracking of concurrent usages" - } - AccessError::UnexpectedImageLayout { .. } => { - unimplemented!() // TODO: find a description - } - AccessError::ImageNotInitialized { .. } => { - "trying to use an image without transitioning it from the undefined or \ - preinitialized layouts first" - } - AccessError::SwapchainImageNotAcquired => { - "trying to use a swapchain image without depending on a corresponding acquire \ - image future" - } + let value = match self { + AccessError::AlreadyInUse => { + "the resource is already in use, and there is no tracking of concurrent usages" } - ) + AccessError::UnexpectedImageLayout { allowed, requested } => { + return write!( + f, + "unexpected image layout: requested {:?}, allowed {:?}", + allowed, requested + ) + } + AccessError::ImageNotInitialized { .. } => { + "trying to use an image without transitioning it from the undefined or \ + preinitialized layouts first" + } + AccessError::SwapchainImageNotAcquired => { + "trying to use a swapchain image without depending on a corresponding acquire \ + image future" + } + }; + + write!(f, "{}", value,) } } @@ -538,14 +540,12 @@ impl Error for AccessCheckError {} impl Display for AccessCheckError { fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> { - write!( - f, - "{}", - match self { - AccessCheckError::Denied(_) => "access to the resource has been denied", - AccessCheckError::Unknown => "the resource is unknown", + match self { + AccessCheckError::Denied(err) => { + write!(f, "access to the resource has been denied: {}", err) } - ) + AccessCheckError::Unknown => write!(f, "the resource is unknown"), + } } }