From 6b9be3c08e63c34da8511433884fbc73dec388bd Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Tue, 30 Oct 2018 21:51:16 -0400 Subject: [PATCH] Fully adopt bitflags for ShaderStageFlags and ColorWriteFlags --- wgpu-native/src/binding_model.rs | 19 +++++++++---------- wgpu-native/src/conv.rs | 26 ++++++++++++-------------- wgpu-native/src/pipeline.rs | 27 ++++++++++++--------------- wgpu-rs/src/lib.rs | 3 +-- 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/wgpu-native/src/binding_model.rs b/wgpu-native/src/binding_model.rs index 8bfbd570c..9aff6c431 100644 --- a/wgpu-native/src/binding_model.rs +++ b/wgpu-native/src/binding_model.rs @@ -2,16 +2,15 @@ use hal; use {BindGroupLayoutId, BufferId, SamplerId, TextureViewId}; -// TODO: bitflags -pub type ShaderStageFlags = u32; -#[allow(non_upper_case_globals)] -pub const ShaderStageFlags_NONE: u32 = 0; -#[allow(non_upper_case_globals)] -pub const ShaderStageFlags_VERTEX: u32 = 1; -#[allow(non_upper_case_globals)] -pub const ShaderStageFlags_FRAGMENT: u32 = 2; -#[allow(non_upper_case_globals)] -pub const ShaderStageFlags_COMPUTE: u32 = 4; + +bitflags! { + #[repr(transparent)] + pub struct ShaderStageFlags: u32 { + const VERTEX = 1; + const FRAGMENT = 2; + const COMPUTE = 4; + } +} #[repr(C)] #[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] diff --git a/wgpu-native/src/conv.rs b/wgpu-native/src/conv.rs index de8b2946c..415d980f0 100644 --- a/wgpu-native/src/conv.rs +++ b/wgpu-native/src/conv.rs @@ -88,18 +88,17 @@ pub fn map_binding_type( pub fn map_shader_stage_flags( shader_stage_flags: binding_model::ShaderStageFlags, ) -> hal::pso::ShaderStageFlags { - use binding_model::{ - ShaderStageFlags_COMPUTE, ShaderStageFlags_FRAGMENT, ShaderStageFlags_VERTEX, - }; + use binding_model::ShaderStageFlags as F; use hal::pso::ShaderStageFlags as H; + let mut value = H::empty(); - if 0 != shader_stage_flags & ShaderStageFlags_VERTEX { + if shader_stage_flags.contains(F::VERTEX) { value |= H::VERTEX; } - if 0 != shader_stage_flags & ShaderStageFlags_FRAGMENT { + if shader_stage_flags.contains(F::FRAGMENT) { value |= H::FRAGMENT; } - if 0 != shader_stage_flags & ShaderStageFlags_COMPUTE { + if shader_stage_flags.contains(F::COMPUTE) { value |= H::COMPUTE; } value @@ -134,22 +133,21 @@ pub fn map_blend_state_descriptor( hal::pso::ColorBlendDesc(map_color_write_flags(color_mask), blend_state) } -fn map_color_write_flags(flags: u32) -> hal::pso::ColorMask { +fn map_color_write_flags(flags: pipeline::ColorWriteFlags) -> hal::pso::ColorMask { + use pipeline::ColorWriteFlags as F; use hal::pso::ColorMask as H; - use pipeline::{ - ColorWriteFlags_ALPHA, ColorWriteFlags_BLUE, ColorWriteFlags_GREEN, ColorWriteFlags_RED, - }; + let mut value = H::empty(); - if 0 != flags & ColorWriteFlags_RED { + if flags.contains(F::RED) { value |= H::RED; } - if 0 != flags & ColorWriteFlags_GREEN { + if flags.contains(F::GREEN) { value |= H::GREEN; } - if 0 != flags & ColorWriteFlags_BLUE { + if flags.contains(F::BLUE) { value |= H::BLUE; } - if 0 != flags & ColorWriteFlags_ALPHA { + if flags.contains(F::ALPHA) { value |= H::ALPHA; } value diff --git a/wgpu-native/src/pipeline.rs b/wgpu-native/src/pipeline.rs index 9eebd0eb7..7e98b95d3 100644 --- a/wgpu-native/src/pipeline.rs +++ b/wgpu-native/src/pipeline.rs @@ -34,20 +34,17 @@ pub enum BlendOperation { Max = 4, } -// TODO: bitflags -pub type ColorWriteFlags = u32; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_NONE: u32 = 0; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_RED: u32 = 1; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_GREEN: u32 = 2; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_BLUE: u32 = 4; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_ALPHA: u32 = 8; -#[allow(non_upper_case_globals)] -pub const ColorWriteFlags_ALL: u32 = 15; +bitflags! { + #[repr(transparent)] + pub struct ColorWriteFlags: u32 { + const RED = 1; + const GREEN = 2; + const BLUE = 4; + const ALPHA = 8; + const COLOR = 7; + const ALL = 15; + } +} #[repr(C)] pub struct BlendDescriptor { @@ -77,7 +74,7 @@ impl BlendStateDescriptor { blend_enabled: false, alpha: BlendDescriptor::REPLACE, color: BlendDescriptor::REPLACE, - write_mask: ColorWriteFlags_ALL, + write_mask: ColorWriteFlags::ALL, }; } diff --git a/wgpu-rs/src/lib.rs b/wgpu-rs/src/lib.rs index d25a08a5d..738d0f181 100644 --- a/wgpu-rs/src/lib.rs +++ b/wgpu-rs/src/lib.rs @@ -8,13 +8,12 @@ use std::ptr; pub use wgn::{ AdapterDescriptor, Color, CommandBufferDescriptor, DeviceDescriptor, Extensions, Extent3d, - Origin3d, PowerPreference, ShaderModuleDescriptor, ShaderStage, + Origin3d, PowerPreference, ShaderModuleDescriptor, ShaderStage, ShaderStageFlags, BindGroupLayoutBinding, BindingType, TextureDimension, TextureDescriptor, TextureFormat, TextureUsageFlags, TextureViewDescriptor, PrimitiveTopology, BlendStateDescriptor, ColorWriteFlags, DepthStencilStateDescriptor, RenderPassDescriptor, RenderPassColorAttachmentDescriptor, RenderPassDepthStencilAttachmentDescriptor, Attachment, LoadOp, StoreOp, - ShaderStageFlags_NONE, ShaderStageFlags_VERTEX, ShaderStageFlags_FRAGMENT, ShaderStageFlags_COMPUTE };