[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"
#version = "0.6"
git = "https://github.com/gfx-rs/wgpu"
rev = "3efba7712abdd75a6b3b35c03969a59e9ac92032"
rev = "67e652f471d5b138a34231666c953f26ec25aa18"
features = ["raw-window-handle"]
[dependencies.wgt]
package = "wgpu-types"
#version = "0.6"
git = "https://github.com/gfx-rs/wgpu"
rev = "3efba7712abdd75a6b3b35c03969a59e9ac92032"
rev = "67e652f471d5b138a34231666c953f26ec25aa18"
[dependencies]
arrayvec = "0.5"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,9 +1,9 @@
use crate::{
BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource, BindingType, BufferDescriptor,
CommandEncoderDescriptor, ComputePipelineDescriptor, LoadOp, PipelineLayoutDescriptor,
ProgrammableStageDescriptor, RenderBundleEncoderDescriptor, RenderPipelineDescriptor,
SamplerDescriptor, ShaderModuleSource, SwapChainStatus, TextureDescriptor,
TextureViewDescriptor, TextureViewDimension,
BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource, BindingType,
BufferBindingType, BufferDescriptor, CommandEncoderDescriptor, ComputePipelineDescriptor,
LoadOp, PipelineLayoutDescriptor, ProgrammableStageDescriptor, RenderBundleEncoderDescriptor,
RenderPipelineDescriptor, SamplerDescriptor, ShaderModuleSource, StorageTextureAccess,
SwapChainStatus, TextureDescriptor, TextureViewDescriptor, TextureViewDimension,
};
use futures::FutureExt;
@ -459,15 +459,13 @@ fn map_texture_format(texture_format: wgt::TextureFormat) -> web_sys::GpuTexture
}
fn map_texture_component_type(
texture_component_type: wgt::TextureComponentType,
sample_type: wgt::TextureSampleType,
) -> web_sys::GpuTextureComponentType {
match texture_component_type {
wgt::TextureComponentType::Float => web_sys::GpuTextureComponentType::Float,
wgt::TextureComponentType::Sint => web_sys::GpuTextureComponentType::Sint,
wgt::TextureComponentType::Uint => web_sys::GpuTextureComponentType::Uint,
wgt::TextureComponentType::DepthComparison => {
web_sys::GpuTextureComponentType::DepthComparison
}
match sample_type {
wgt::TextureSampleType::Float { .. } => web_sys::GpuTextureComponentType::Float,
wgt::TextureSampleType::Sint => web_sys::GpuTextureComponentType::Sint,
wgt::TextureSampleType::Uint => web_sys::GpuTextureComponentType::Uint,
wgt::TextureSampleType::Depth => web_sys::GpuTextureComponentType::DepthComparison,
}
}
@ -981,20 +979,30 @@ impl crate::Context for Context {
.iter()
.map(|bind| {
let mapped_type = match bind.ty {
BindingType::UniformBuffer { .. } => bt::UniformBuffer,
BindingType::StorageBuffer {
readonly: false, ..
BindingType::Buffer {
ty: BufferBindingType::Uniform,
..
} => bt::UniformBuffer,
BindingType::Buffer {
ty: BufferBindingType::Storage { read_only: false },
..
} => bt::StorageBuffer,
BindingType::StorageBuffer { readonly: true, .. } => bt::ReadonlyStorageBuffer,
BindingType::Sampler { comparison: false } => bt::Sampler,
BindingType::Buffer {
ty: BufferBindingType::Storage { read_only: true },
..
} => bt::ReadonlyStorageBuffer,
BindingType::Sampler {
comparison: false, ..
} => bt::Sampler,
BindingType::Sampler { .. } => bt::ComparisonSampler,
BindingType::SampledTexture {
BindingType::Texture {
multisampled: true, ..
} => bt::MultisampledTexture,
BindingType::SampledTexture { .. } => bt::SampledTexture,
BindingType::StorageTexture { readonly: true, .. } => {
bt::ReadonlyStorageTexture
}
BindingType::Texture { .. } => bt::SampledTexture,
BindingType::StorageTexture {
access: StorageTextureAccess::ReadOnly,
..
} => bt::ReadonlyStorageTexture,
BindingType::StorageTexture { .. } => bt::WriteonlyStorageTexture,
};
@ -1009,22 +1017,21 @@ impl crate::Context for Context {
bind.visibility.bits(),
);
match bind.ty {
BindingType::UniformBuffer { dynamic, .. }
| BindingType::StorageBuffer { dynamic, .. } => {
mapped_entry.has_dynamic_offset(dynamic);
}
_ => {}
if let BindingType::Buffer {
has_dynamic_offset, ..
} = bind.ty
{
mapped_entry.has_dynamic_offset(has_dynamic_offset);
}
if let BindingType::SampledTexture { component_type, .. } = bind.ty {
mapped_entry.texture_component_type(map_texture_component_type(component_type));
if let BindingType::Texture { sample_type, .. } = bind.ty {
mapped_entry.texture_component_type(map_texture_component_type(sample_type));
}
match bind.ty {
BindingType::SampledTexture { dimension, .. }
| BindingType::StorageTexture { dimension, .. } => {
mapped_entry.view_dimension(map_texture_view_dimension(dimension));
BindingType::Texture { view_dimension, .. }
| BindingType::StorageTexture { view_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 wgt::{
AddressMode, Backend, BackendBit, BindGroupLayoutEntry, BindingType, BlendDescriptor,
BlendFactor, BlendOperation, BufferAddress, BufferSize, BufferUsage, Color,
BlendFactor, BlendOperation, BufferAddress, BufferBindingType, BufferSize, BufferUsage, Color,
ColorStateDescriptor, ColorWrite, CommandBufferDescriptor, CompareFunction, CullMode,
DepthStencilStateDescriptor, DynamicOffset, Extent3d, Features, FilterMode, FrontFace,
IndexFormat, InputStepMode, Limits, Origin3d, PolygonMode, PowerPreference, PresentMode,
PrimitiveTopology, PushConstantRange, RasterizationStateDescriptor, SamplerBorderColor,
ShaderLocation, ShaderStage, StencilOperation, StencilStateDescriptor,
StencilStateFaceDescriptor, SwapChainDescriptor, SwapChainStatus, TextureAspect,
TextureComponentType, TextureDataLayout, TextureDimension, TextureFormat, TextureUsage,
TextureViewDimension, VertexAttributeDescriptor, VertexFormat, BIND_BUFFER_ALIGNMENT,
COPY_BUFFER_ALIGNMENT, COPY_BYTES_PER_ROW_ALIGNMENT, PUSH_CONSTANT_ALIGNMENT,
StencilStateFaceDescriptor, StorageTextureAccess, SwapChainDescriptor, SwapChainStatus,
TextureAspect, TextureDataLayout, TextureDimension, TextureFormat, TextureSampleType,
TextureUsage, TextureViewDimension, VertexAttributeDescriptor, VertexFormat,
BIND_BUFFER_ALIGNMENT, COPY_BUFFER_ALIGNMENT, COPY_BYTES_PER_ROW_ALIGNMENT,
PUSH_CONSTANT_ALIGNMENT,
};
use backend::{BufferMappedRange, Context as C};