Map usage flags

This commit is contained in:
Joshua Groves 2018-10-03 13:08:22 -06:00
parent beac74c481
commit 45c5709b1d
2 changed files with 47 additions and 12 deletions

View File

@ -256,3 +256,34 @@ pub(crate) fn map_texture_dimension_size(dimension: resource::TextureDimension,
D3 => H::D3(width, height, depth),
}
}
pub(crate) fn map_texture_usage_flags(flags: u32, format: hal::format::Format) -> hal::image::Usage {
use hal::image::Usage as H;
use resource::{
TextureUsageFlags_TRANSFER_SRC, TextureUsageFlags_TRANSFER_DST, TextureUsageFlags_SAMPLED,
TextureUsageFlags_STORAGE, TextureUsageFlags_OUTPUT_ATTACHMENT,
};
let mut value = H::empty();
if 0 != flags & TextureUsageFlags_TRANSFER_SRC {
value |= H::TRANSFER_SRC;
}
if 0 != flags & TextureUsageFlags_TRANSFER_DST {
value |= H::TRANSFER_DST;
}
if 0 != flags & TextureUsageFlags_SAMPLED {
value |= H::SAMPLED;
}
if 0 != flags & TextureUsageFlags_STORAGE {
value |= H::STORAGE;
}
if 0 != flags & TextureUsageFlags_OUTPUT_ATTACHMENT {
if format.surface_desc().aspects.intersects(hal::format::Aspects::DEPTH | hal::format::Aspects::STENCIL) {
value |= H::DEPTH_STENCIL_ATTACHMENT;
} else {
value |= H::COLOR_ATTACHMENT;
}
}
// Note: TextureUsageFlags::Present does not need to be handled explicitly
// TODO: HAL Transient Attachment, HAL Input Attachment
value
}

View File

@ -50,18 +50,22 @@ pub enum TextureFormat {
D32FloatS8Uint = 3,
}
bitflags! {
#[repr(transparent)]
pub struct TextureUsageFlags: u32 {
const NONE = 0;
const TRANSFER_SRC = 1;
const TRANSFER_DST = 2;
const SAMPLED = 4;
const STORAGE = 8;
const OUTPUT_ATTACHMENT = 16;
const PRESENT = 32;
}
}
// TODO: bitflags
pub type TextureUsageFlags = u32;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_NONE: u32 = 0;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_TRANSFER_SRC: u32 = 1;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_TRANSFER_DST: u32 = 2;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_SAMPLED: u32 = 4;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_STORAGE: u32 = 8;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_OUTPUT_ATTACHMENT: u32 = 16;
#[allow(non_upper_case_globals)]
pub const TextureUsageFlags_PRESENT: u32 = 32;
#[repr(C)]
pub struct TextureDescriptor {