blob: 6ecb68f94d21c8bb75c5f08e940a5fa4142a98b5 [file] [log] [blame]
// Copyright (c) 2016 The vulkano developers
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT
// license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
// at your option. All files in the project carrying such
// notice may not be copied, modified, or distributed except
// according to those terms.
use std::error;
use std::fmt;
use crate::device::Device;
use crate::image::ImageAccess;
use crate::VulkanObject;
/// Checks whether a clear color image command is valid.
///
/// # Panic
///
/// - Panics if the destination was not created with `device`.
///
pub fn check_clear_color_image<I>(
device: &Device,
image: &I,
first_layer: u32,
num_layers: u32,
first_mipmap: u32,
num_mipmaps: u32,
) -> Result<(), CheckClearColorImageError>
where
I: ?Sized + ImageAccess,
{
assert_eq!(
image.inner().image.device().internal_object(),
device.internal_object()
);
if !image.inner().image.usage().transfer_destination {
return Err(CheckClearColorImageError::MissingTransferUsage);
}
if first_layer + num_layers > image.dimensions().array_layers() {
return Err(CheckClearColorImageError::OutOfRange);
}
if first_mipmap + num_mipmaps > image.mipmap_levels() {
return Err(CheckClearColorImageError::OutOfRange);
}
Ok(())
}
/// Error that can happen from `check_clear_color_image`.
#[derive(Debug, Copy, Clone)]
pub enum CheckClearColorImageError {
/// The image is missing the transfer destination usage.
MissingTransferUsage,
/// The array layers and mipmap levels are out of range.
OutOfRange,
}
impl error::Error for CheckClearColorImageError {}
impl fmt::Display for CheckClearColorImageError {
#[inline]
fn fmt(&self, fmt: &mut fmt::Formatter) -> Result<(), fmt::Error> {
write!(
fmt,
"{}",
match *self {
CheckClearColorImageError::MissingTransferUsage => {
"the image is missing the transfer destination usage"
}
CheckClearColorImageError::OutOfRange => {
"the array layers and mipmap levels are out of range"
}
}
)
}
}