Skip to content

Commit

Permalink
Improved display of some error and remove unimplemented! for `Unexp…
Browse files Browse the repository at this point in the history
…ectedImageLayout` display (vulkano-rs#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.
  • Loading branch information
maoueh authored and hakolao committed Feb 20, 2024
1 parent 65c96f1 commit e0366da
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 42 deletions.
38 changes: 22 additions & 16 deletions vulkano/src/command_buffer/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
52 changes: 26 additions & 26 deletions vulkano/src/sync/future/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,)
}
}

Expand All @@ -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"),
}
}
}

Expand Down

0 comments on commit e0366da

Please sign in to comment.