summaryrefslogtreecommitdiff
path: root/extensions/webgpu/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/webgpu/lib.rs')
-rw-r--r--extensions/webgpu/lib.rs94
1 files changed, 56 insertions, 38 deletions
diff --git a/extensions/webgpu/lib.rs b/extensions/webgpu/lib.rs
index ca7cd09f1..5b924ffdb 100644
--- a/extensions/webgpu/lib.rs
+++ b/extensions/webgpu/lib.rs
@@ -291,10 +291,10 @@ pub async fn op_webgpu_request_adapter(
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct GpuLimits {
- _max_texture_dimension1d: Option<u32>,
- _max_texture_dimension2d: Option<u32>,
- _max_texture_dimension3d: Option<u32>,
- _max_texture_array_layers: Option<u32>,
+ max_texture_dimension_1d: Option<u32>,
+ max_texture_dimension_2d: Option<u32>,
+ max_texture_dimension_3d: Option<u32>,
+ max_texture_array_layers: Option<u32>,
max_bind_groups: Option<u32>,
max_dynamic_uniform_buffers_per_pipeline_layout: Option<u32>,
max_dynamic_storage_buffers_per_pipeline_layout: Option<u32>,
@@ -304,10 +304,55 @@ struct GpuLimits {
max_storage_textures_per_shader_stage: Option<u32>,
max_uniform_buffers_per_shader_stage: Option<u32>,
max_uniform_buffer_binding_size: Option<u32>,
- _max_storage_buffer_binding_size: Option<u32>,
- _max_vertex_buffers: Option<u32>,
- _max_vertex_attributes: Option<u32>,
- _max_vertex_buffer_array_stride: Option<u32>,
+ max_storage_buffer_binding_size: Option<u32>,
+ max_vertex_buffers: Option<u32>,
+ max_vertex_attributes: Option<u32>,
+ max_vertex_buffer_array_stride: Option<u32>,
+}
+
+impl From<GpuLimits> for wgpu_types::Limits {
+ fn from(limits: GpuLimits) -> wgpu_types::Limits {
+ wgpu_types::Limits {
+ max_texture_dimension_1d: limits.max_texture_dimension_1d.unwrap_or(8192),
+ max_texture_dimension_2d: limits.max_texture_dimension_2d.unwrap_or(8192),
+ max_texture_dimension_3d: limits.max_texture_dimension_3d.unwrap_or(2048),
+ max_texture_array_layers: limits.max_texture_array_layers.unwrap_or(2048),
+ max_bind_groups: limits.max_bind_groups.unwrap_or(4),
+ max_dynamic_uniform_buffers_per_pipeline_layout: limits
+ .max_dynamic_uniform_buffers_per_pipeline_layout
+ .unwrap_or(8),
+ max_dynamic_storage_buffers_per_pipeline_layout: limits
+ .max_dynamic_storage_buffers_per_pipeline_layout
+ .unwrap_or(4),
+ max_sampled_textures_per_shader_stage: limits
+ .max_sampled_textures_per_shader_stage
+ .unwrap_or(16),
+ max_samplers_per_shader_stage: limits
+ .max_samplers_per_shader_stage
+ .unwrap_or(16),
+ max_storage_buffers_per_shader_stage: limits
+ .max_storage_buffers_per_shader_stage
+ .unwrap_or(4),
+ max_storage_textures_per_shader_stage: limits
+ .max_storage_textures_per_shader_stage
+ .unwrap_or(4),
+ max_uniform_buffers_per_shader_stage: limits
+ .max_uniform_buffers_per_shader_stage
+ .unwrap_or(12),
+ max_uniform_buffer_binding_size: limits
+ .max_uniform_buffer_binding_size
+ .unwrap_or(16384),
+ max_storage_buffer_binding_size: limits
+ .max_storage_buffer_binding_size
+ .unwrap_or(134217728),
+ max_vertex_buffers: limits.max_vertex_buffers.unwrap_or(8),
+ max_vertex_attributes: limits.max_vertex_attributes.unwrap_or(16),
+ max_vertex_buffer_array_stride: limits
+ .max_vertex_buffer_array_stride
+ .unwrap_or(2048),
+ max_push_constant_size: 0,
+ }
+ }
}
#[derive(Deserialize)]
@@ -416,34 +461,7 @@ pub async fn op_webgpu_request_device(
features,
limits: args
.non_guaranteed_limits
- .map_or(Default::default(), |limits| wgpu_types::Limits {
- max_bind_groups: limits.max_bind_groups.unwrap_or(4),
- max_dynamic_uniform_buffers_per_pipeline_layout: limits
- .max_dynamic_uniform_buffers_per_pipeline_layout
- .unwrap_or(8),
- max_dynamic_storage_buffers_per_pipeline_layout: limits
- .max_dynamic_storage_buffers_per_pipeline_layout
- .unwrap_or(4),
- max_sampled_textures_per_shader_stage: limits
- .max_sampled_textures_per_shader_stage
- .unwrap_or(16),
- max_samplers_per_shader_stage: limits
- .max_samplers_per_shader_stage
- .unwrap_or(16),
- max_storage_buffers_per_shader_stage: limits
- .max_storage_buffers_per_shader_stage
- .unwrap_or(4),
- max_storage_textures_per_shader_stage: limits
- .max_storage_textures_per_shader_stage
- .unwrap_or(4),
- max_uniform_buffers_per_shader_stage: limits
- .max_uniform_buffers_per_shader_stage
- .unwrap_or(12),
- max_uniform_buffer_binding_size: limits
- .max_uniform_buffer_binding_size
- .unwrap_or(16384),
- max_push_constant_size: 0,
- }),
+ .map_or(wgpu_types::Limits::default(), Into::into),
};
let (device, maybe_err) = gfx_select!(adapter => instance.adapter_request_device(
@@ -705,8 +723,8 @@ fn declare_webgpu_ops() -> Vec<(&'static str, Box<OpFn>)> {
op_sync(render_pass::op_webgpu_render_pass_set_scissor_rect),
),
(
- "op_webgpu_render_pass_set_blend_color",
- op_sync(render_pass::op_webgpu_render_pass_set_blend_color),
+ "op_webgpu_render_pass_set_blend_constant",
+ op_sync(render_pass::op_webgpu_render_pass_set_blend_constant),
),
(
"op_webgpu_render_pass_set_stencil_reference",