[rs] Adopt the updated bind group entry API

This commit is contained in:
Dzmitry Malyshau 2020-11-28 00:36:24 -05:00
parent 1eaed5e448
commit c9a718d689
10 changed files with 127 additions and 92 deletions

View File

@ -26,14 +26,14 @@ vulkan-portability = ["wgc/gfx-backend-vulkan", "gfx-backend-vulkan"]
package = "wgpu-core" package = "wgpu-core"
#version = "0.6" #version = "0.6"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "3efba7712abdd75a6b3b35c03969a59e9ac92032" rev = "67e652f471d5b138a34231666c953f26ec25aa18"
features = ["raw-window-handle"] features = ["raw-window-handle"]
[dependencies.wgt] [dependencies.wgt]
package = "wgpu-types" package = "wgpu-types"
#version = "0.6" #version = "0.6"
git = "https://github.com/gfx-rs/wgpu" git = "https://github.com/gfx-rs/wgpu"
rev = "3efba7712abdd75a6b3b35c03969a59e9ac92032" rev = "67e652f471d5b138a34231666c953f26ec25aa18"
[dependencies] [dependencies]
arrayvec = "0.5" arrayvec = "0.5"

View File

@ -64,8 +64,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::COMPUTE, visibility: wgpu::ShaderStage::COMPUTE,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new( min_binding_size: wgpu::BufferSize::new(
(sim_param_data.len() * std::mem::size_of::<f32>()) as _, (sim_param_data.len() * std::mem::size_of::<f32>()) as _,
), ),
@ -75,20 +76,20 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStage::COMPUTE, visibility: wgpu::ShaderStage::COMPUTE,
ty: wgpu::BindingType::StorageBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Storage { read_only: false },
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new((NUM_PARTICLES * 16) as _), min_binding_size: wgpu::BufferSize::new((NUM_PARTICLES * 16) as _),
readonly: false,
}, },
count: None, count: None,
}, },
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 2, binding: 2,
visibility: wgpu::ShaderStage::COMPUTE, visibility: wgpu::ShaderStage::COMPUTE,
ty: wgpu::BindingType::StorageBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Storage { read_only: false },
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new((NUM_PARTICLES * 16) as _), min_binding_size: wgpu::BufferSize::new((NUM_PARTICLES * 16) as _),
readonly: false,
}, },
count: None, count: None,
}, },

View File

@ -145,8 +145,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::VERTEX, visibility: wgpu::ShaderStage::VERTEX,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new(64), min_binding_size: wgpu::BufferSize::new(64),
}, },
count: None, count: None,
@ -154,17 +155,20 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
multisampled: false, multisampled: false,
component_type: wgpu::TextureComponentType::Float, sample_type: wgpu::TextureSampleType::Float { filterable: true },
dimension: wgpu::TextureViewDimension::D2, view_dimension: wgpu::TextureViewDimension::D2,
}, },
count: None, count: None,
}, },
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 2, binding: 2,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler { comparison: false }, ty: wgpu::BindingType::Sampler {
comparison: false,
filtering: true,
},
count: None, count: None,
}, },
], ],

View File

@ -85,9 +85,12 @@ async fn execute_gpu(numbers: Vec<u32>) -> Vec<u32> {
entries: &[wgpu::BindGroupLayoutEntry { entries: &[wgpu::BindGroupLayoutEntry {
binding: 0, // The location binding: 0, // The location
visibility: wgpu::ShaderStage::COMPUTE, // Which shader type in the pipeline this buffer is available to. visibility: wgpu::ShaderStage::COMPUTE, // Which shader type in the pipeline this buffer is available to.
ty: wgpu::BindingType::StorageBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Storage {
readonly: false, // Specifies if the buffer can only be read within the shader // Specifies if the buffer can only be read within the shader
read_only: false,
},
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new(4), min_binding_size: wgpu::BufferSize::new(4),
}, },
count: None, count: None,

View File

@ -314,8 +314,9 @@ impl framework::Example for Example {
entries: &[wgpu::BindGroupLayoutEntry { entries: &[wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: true, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: true,
min_binding_size: wgpu::BufferSize::new(entity_uniform_size), min_binding_size: wgpu::BufferSize::new(entity_uniform_size),
}, },
count: None, count: None,
@ -426,8 +427,9 @@ impl framework::Example for Example {
entries: &[wgpu::BindGroupLayoutEntry { entries: &[wgpu::BindGroupLayoutEntry {
binding: 0, // global binding: 0, // global
visibility: wgpu::ShaderStage::VERTEX, visibility: wgpu::ShaderStage::VERTEX,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new(uniform_size), min_binding_size: wgpu::BufferSize::new(uniform_size),
}, },
count: None, count: None,
@ -508,8 +510,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, // global binding: 0, // global
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new(mem::size_of::< min_binding_size: wgpu::BufferSize::new(mem::size_of::<
ForwardUniforms, ForwardUniforms,
>( >(
@ -521,8 +524,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, // lights binding: 1, // lights
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new(light_uniform_size), min_binding_size: wgpu::BufferSize::new(light_uniform_size),
}, },
count: None, count: None,
@ -530,17 +534,20 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 2, binding: 2,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
multisampled: false, multisampled: false,
component_type: wgpu::TextureComponentType::DepthComparison, sample_type: wgpu::TextureSampleType::Depth,
dimension: wgpu::TextureViewDimension::D2Array, view_dimension: wgpu::TextureViewDimension::D2Array,
}, },
count: None, count: None,
}, },
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 3, binding: 3,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler { comparison: true }, ty: wgpu::BindingType::Sampler {
comparison: true,
filtering: false,
},
count: None, count: None,
}, },
], ],

View File

@ -54,8 +54,9 @@ impl framework::Example for Skybox {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: None, min_binding_size: None,
}, },
count: None, count: None,
@ -63,17 +64,20 @@ impl framework::Example for Skybox {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
component_type: wgpu::TextureComponentType::Float, sample_type: wgpu::TextureSampleType::Float { filterable: true },
multisampled: false, multisampled: false,
dimension: wgpu::TextureViewDimension::Cube, view_dimension: wgpu::TextureViewDimension::Cube,
}, },
count: None, count: None,
}, },
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 2, binding: 2,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler { comparison: false }, ty: wgpu::BindingType::Sampler {
comparison: false,
filtering: true,
},
count: None, count: None,
}, },
], ],
@ -86,7 +90,7 @@ impl framework::Example for Skybox {
let aspect = sc_desc.width as f32 / sc_desc.height as f32; let aspect = sc_desc.width as f32 / sc_desc.height as f32;
let uniforms = Self::generate_uniforms(aspect); let uniforms = Self::generate_uniforms(aspect);
let uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { let uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("Uniform Buffer"), label: Some(" Buffer"),
contents: bytemuck::cast_slice(&raw_uniforms(&uniforms)), contents: bytemuck::cast_slice(&raw_uniforms(&uniforms)),
usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST, usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
}); });

View File

@ -197,9 +197,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
component_type: wgpu::TextureComponentType::Float, sample_type: wgpu::TextureSampleType::Float { filterable: true },
dimension: wgpu::TextureViewDimension::D2, view_dimension: wgpu::TextureViewDimension::D2,
multisampled: false, multisampled: false,
}, },
count: std::num::NonZeroU32::new(2), count: std::num::NonZeroU32::new(2),
@ -207,7 +207,10 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler { comparison: false }, ty: wgpu::BindingType::Sampler {
comparison: false,
filtering: true,
},
count: None, count: None,
}, },
], ],

View File

@ -354,8 +354,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new( min_binding_size: wgpu::BufferSize::new(
mem::size_of::<WaterUniforms>() as _, mem::size_of::<WaterUniforms>() as _,
), ),
@ -366,10 +367,10 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
multisampled: false, multisampled: false,
component_type: wgpu::TextureComponentType::Float, sample_type: wgpu::TextureSampleType::Float { filterable: true },
dimension: wgpu::TextureViewDimension::D2, view_dimension: wgpu::TextureViewDimension::D2,
}, },
count: None, count: None,
}, },
@ -377,10 +378,10 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 2, binding: 2,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::SampledTexture { ty: wgpu::BindingType::Texture {
multisampled: false, multisampled: false,
component_type: wgpu::TextureComponentType::Float, sample_type: wgpu::TextureSampleType::Float { filterable: true },
dimension: wgpu::TextureViewDimension::D2, view_dimension: wgpu::TextureViewDimension::D2,
}, },
count: None, count: None,
}, },
@ -388,7 +389,10 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 3, binding: 3,
visibility: wgpu::ShaderStage::FRAGMENT, visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler { comparison: false }, ty: wgpu::BindingType::Sampler {
comparison: false,
filtering: true,
},
count: None, count: None,
}, },
], ],
@ -402,8 +406,9 @@ impl framework::Example for Example {
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 0, binding: 0,
visibility: wgpu::ShaderStage::VERTEX, visibility: wgpu::ShaderStage::VERTEX,
ty: wgpu::BindingType::UniformBuffer { ty: wgpu::BindingType::Buffer {
dynamic: false, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: wgpu::BufferSize::new( min_binding_size: wgpu::BufferSize::new(
mem::size_of::<TerrainUniforms>() as _, mem::size_of::<TerrainUniforms>() as _,
), ),

View File

@ -1,9 +1,9 @@
use crate::{ use crate::{
BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource, BindingType, BufferDescriptor, BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource, BindingType,
CommandEncoderDescriptor, ComputePipelineDescriptor, LoadOp, PipelineLayoutDescriptor, BufferBindingType, BufferDescriptor, CommandEncoderDescriptor, ComputePipelineDescriptor,
ProgrammableStageDescriptor, RenderBundleEncoderDescriptor, RenderPipelineDescriptor, LoadOp, PipelineLayoutDescriptor, ProgrammableStageDescriptor, RenderBundleEncoderDescriptor,
SamplerDescriptor, ShaderModuleSource, SwapChainStatus, TextureDescriptor, RenderPipelineDescriptor, SamplerDescriptor, ShaderModuleSource, StorageTextureAccess,
TextureViewDescriptor, TextureViewDimension, SwapChainStatus, TextureDescriptor, TextureViewDescriptor, TextureViewDimension,
}; };
use futures::FutureExt; use futures::FutureExt;
@ -459,15 +459,13 @@ fn map_texture_format(texture_format: wgt::TextureFormat) -> web_sys::GpuTexture
} }
fn map_texture_component_type( fn map_texture_component_type(
texture_component_type: wgt::TextureComponentType, sample_type: wgt::TextureSampleType,
) -> web_sys::GpuTextureComponentType { ) -> web_sys::GpuTextureComponentType {
match texture_component_type { match sample_type {
wgt::TextureComponentType::Float => web_sys::GpuTextureComponentType::Float, wgt::TextureSampleType::Float { .. } => web_sys::GpuTextureComponentType::Float,
wgt::TextureComponentType::Sint => web_sys::GpuTextureComponentType::Sint, wgt::TextureSampleType::Sint => web_sys::GpuTextureComponentType::Sint,
wgt::TextureComponentType::Uint => web_sys::GpuTextureComponentType::Uint, wgt::TextureSampleType::Uint => web_sys::GpuTextureComponentType::Uint,
wgt::TextureComponentType::DepthComparison => { wgt::TextureSampleType::Depth => web_sys::GpuTextureComponentType::DepthComparison,
web_sys::GpuTextureComponentType::DepthComparison
}
} }
} }
@ -981,20 +979,30 @@ impl crate::Context for Context {
.iter() .iter()
.map(|bind| { .map(|bind| {
let mapped_type = match bind.ty { let mapped_type = match bind.ty {
BindingType::UniformBuffer { .. } => bt::UniformBuffer, BindingType::Buffer {
BindingType::StorageBuffer { ty: BufferBindingType::Uniform,
readonly: false, .. ..
} => bt::UniformBuffer,
BindingType::Buffer {
ty: BufferBindingType::Storage { read_only: false },
..
} => bt::StorageBuffer, } => bt::StorageBuffer,
BindingType::StorageBuffer { readonly: true, .. } => bt::ReadonlyStorageBuffer, BindingType::Buffer {
BindingType::Sampler { comparison: false } => bt::Sampler, ty: BufferBindingType::Storage { read_only: true },
..
} => bt::ReadonlyStorageBuffer,
BindingType::Sampler {
comparison: false, ..
} => bt::Sampler,
BindingType::Sampler { .. } => bt::ComparisonSampler, BindingType::Sampler { .. } => bt::ComparisonSampler,
BindingType::SampledTexture { BindingType::Texture {
multisampled: true, .. multisampled: true, ..
} => bt::MultisampledTexture, } => bt::MultisampledTexture,
BindingType::SampledTexture { .. } => bt::SampledTexture, BindingType::Texture { .. } => bt::SampledTexture,
BindingType::StorageTexture { readonly: true, .. } => { BindingType::StorageTexture {
bt::ReadonlyStorageTexture access: StorageTextureAccess::ReadOnly,
} ..
} => bt::ReadonlyStorageTexture,
BindingType::StorageTexture { .. } => bt::WriteonlyStorageTexture, BindingType::StorageTexture { .. } => bt::WriteonlyStorageTexture,
}; };
@ -1009,22 +1017,21 @@ impl crate::Context for Context {
bind.visibility.bits(), bind.visibility.bits(),
); );
match bind.ty { if let BindingType::Buffer {
BindingType::UniformBuffer { dynamic, .. } has_dynamic_offset, ..
| BindingType::StorageBuffer { dynamic, .. } => { } = bind.ty
mapped_entry.has_dynamic_offset(dynamic); {
} mapped_entry.has_dynamic_offset(has_dynamic_offset);
_ => {}
} }
if let BindingType::SampledTexture { component_type, .. } = bind.ty { if let BindingType::Texture { sample_type, .. } = bind.ty {
mapped_entry.texture_component_type(map_texture_component_type(component_type)); mapped_entry.texture_component_type(map_texture_component_type(sample_type));
} }
match bind.ty { match bind.ty {
BindingType::SampledTexture { dimension, .. } BindingType::Texture { view_dimension, .. }
| BindingType::StorageTexture { dimension, .. } => { | BindingType::StorageTexture { view_dimension, .. } => {
mapped_entry.view_dimension(map_texture_view_dimension(dimension)); mapped_entry.view_dimension(map_texture_view_dimension(view_dimension));
} }
_ => {} _ => {}
} }

View File

@ -33,16 +33,17 @@ use serde::Serialize;
pub use wgc::instance::{AdapterInfo, DeviceType}; pub use wgc::instance::{AdapterInfo, DeviceType};
pub use wgt::{ pub use wgt::{
AddressMode, Backend, BackendBit, BindGroupLayoutEntry, BindingType, BlendDescriptor, AddressMode, Backend, BackendBit, BindGroupLayoutEntry, BindingType, BlendDescriptor,
BlendFactor, BlendOperation, BufferAddress, BufferSize, BufferUsage, Color, BlendFactor, BlendOperation, BufferAddress, BufferBindingType, BufferSize, BufferUsage, Color,
ColorStateDescriptor, ColorWrite, CommandBufferDescriptor, CompareFunction, CullMode, ColorStateDescriptor, ColorWrite, CommandBufferDescriptor, CompareFunction, CullMode,
DepthStencilStateDescriptor, DynamicOffset, Extent3d, Features, FilterMode, FrontFace, DepthStencilStateDescriptor, DynamicOffset, Extent3d, Features, FilterMode, FrontFace,
IndexFormat, InputStepMode, Limits, Origin3d, PolygonMode, PowerPreference, PresentMode, IndexFormat, InputStepMode, Limits, Origin3d, PolygonMode, PowerPreference, PresentMode,
PrimitiveTopology, PushConstantRange, RasterizationStateDescriptor, SamplerBorderColor, PrimitiveTopology, PushConstantRange, RasterizationStateDescriptor, SamplerBorderColor,
ShaderLocation, ShaderStage, StencilOperation, StencilStateDescriptor, ShaderLocation, ShaderStage, StencilOperation, StencilStateDescriptor,
StencilStateFaceDescriptor, SwapChainDescriptor, SwapChainStatus, TextureAspect, StencilStateFaceDescriptor, StorageTextureAccess, SwapChainDescriptor, SwapChainStatus,
TextureComponentType, TextureDataLayout, TextureDimension, TextureFormat, TextureUsage, TextureAspect, TextureDataLayout, TextureDimension, TextureFormat, TextureSampleType,
TextureViewDimension, VertexAttributeDescriptor, VertexFormat, BIND_BUFFER_ALIGNMENT, TextureUsage, TextureViewDimension, VertexAttributeDescriptor, VertexFormat,
COPY_BUFFER_ALIGNMENT, COPY_BYTES_PER_ROW_ALIGNMENT, PUSH_CONSTANT_ALIGNMENT, BIND_BUFFER_ALIGNMENT, COPY_BUFFER_ALIGNMENT, COPY_BYTES_PER_ROW_ALIGNMENT,
PUSH_CONSTANT_ALIGNMENT,
}; };
use backend::{BufferMappedRange, Context as C}; use backend::{BufferMappedRange, Context as C};