diff --git a/wgpu-native/src/conv.rs b/wgpu-native/src/conv.rs index 7b0c4bfc1b..f9b99b4906 100644 --- a/wgpu-native/src/conv.rs +++ b/wgpu-native/src/conv.rs @@ -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 +} \ No newline at end of file diff --git a/wgpu-native/src/resource.rs b/wgpu-native/src/resource.rs index ac4486aee9..8154ef81ae 100644 --- a/wgpu-native/src/resource.rs +++ b/wgpu-native/src/resource.rs @@ -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 {