mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
webgpu: Update wgpu to 0.19 (#31995)
* Update wgpu to 32e70bc163
(0.19)
* Update expect only good
* reexpect
* remove dbg stuff
* Remove all occurrences of dx11_hub
This commit is contained in:
parent
81c4f2ae7a
commit
4af413cd04
28 changed files with 3422 additions and 9526 deletions
|
@ -86,6 +86,21 @@ impl GPUAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
impl Drop for GPUAdapter {
|
||||
fn drop(&mut self) {
|
||||
if let Err(e) = self
|
||||
.channel
|
||||
.0
|
||||
.send((None, WebGPURequest::DropAdapter(self.adapter.0)))
|
||||
{
|
||||
warn!(
|
||||
"Failed to send WebGPURequest::DropAdapter({:?}) ({})",
|
||||
self.adapter.0, e
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
impl GPUAdapterMethods for GPUAdapter {
|
||||
/// <https://gpuweb.github.io/gpuweb/#dom-gpuadapter-requestdevice>
|
||||
fn RequestDevice(&self, descriptor: &GPUDeviceDescriptor, comp: InRealm) -> Rc<Promise> {
|
||||
|
@ -106,69 +121,83 @@ impl GPUAdapterMethods for GPUAdapter {
|
|||
}
|
||||
|
||||
let mut desc = wgt::DeviceDescriptor {
|
||||
features,
|
||||
limits: wgt::Limits::default(),
|
||||
required_features: features,
|
||||
required_limits: wgt::Limits::default(),
|
||||
label: None,
|
||||
};
|
||||
if let Some(limits) = &descriptor.requiredLimits {
|
||||
for (limit, value) in (*limits).iter() {
|
||||
let v = u32::try_from(*value).unwrap_or(u32::MAX);
|
||||
match limit.as_ref() {
|
||||
"maxTextureDimension1D" => desc.limits.max_texture_dimension_1d = v,
|
||||
"maxTextureDimension2D" => desc.limits.max_texture_dimension_2d = v,
|
||||
"maxTextureDimension3D" => desc.limits.max_texture_dimension_3d = v,
|
||||
"maxTextureArrayLayers" => desc.limits.max_texture_array_layers = v,
|
||||
"maxBindGroups" => desc.limits.max_bind_groups = v,
|
||||
"maxBindingsPerBindGroup" => desc.limits.max_bindings_per_bind_group = v,
|
||||
"maxTextureDimension1D" => desc.required_limits.max_texture_dimension_1d = v,
|
||||
"maxTextureDimension2D" => desc.required_limits.max_texture_dimension_2d = v,
|
||||
"maxTextureDimension3D" => desc.required_limits.max_texture_dimension_3d = v,
|
||||
"maxTextureArrayLayers" => desc.required_limits.max_texture_array_layers = v,
|
||||
"maxBindGroups" => desc.required_limits.max_bind_groups = v,
|
||||
"maxBindingsPerBindGroup" => {
|
||||
desc.required_limits.max_bindings_per_bind_group = v
|
||||
},
|
||||
"maxDynamicUniformBuffersPerPipelineLayout" => {
|
||||
desc.limits.max_dynamic_uniform_buffers_per_pipeline_layout = v
|
||||
desc.required_limits
|
||||
.max_dynamic_uniform_buffers_per_pipeline_layout = v
|
||||
},
|
||||
"maxDynamicStorageBuffersPerPipelineLayout" => {
|
||||
desc.limits.max_dynamic_storage_buffers_per_pipeline_layout = v
|
||||
desc.required_limits
|
||||
.max_dynamic_storage_buffers_per_pipeline_layout = v
|
||||
},
|
||||
"maxSampledTexturesPerShaderStage" => {
|
||||
desc.limits.max_sampled_textures_per_shader_stage = v
|
||||
desc.required_limits.max_sampled_textures_per_shader_stage = v
|
||||
},
|
||||
"maxSamplersPerShaderStage" => {
|
||||
desc.required_limits.max_samplers_per_shader_stage = v
|
||||
},
|
||||
"maxSamplersPerShaderStage" => desc.limits.max_samplers_per_shader_stage = v,
|
||||
"maxStorageBuffersPerShaderStage" => {
|
||||
desc.limits.max_storage_buffers_per_shader_stage = v
|
||||
desc.required_limits.max_storage_buffers_per_shader_stage = v
|
||||
},
|
||||
"maxStorageTexturesPerShaderStage" => {
|
||||
desc.limits.max_storage_textures_per_shader_stage = v
|
||||
desc.required_limits.max_storage_textures_per_shader_stage = v
|
||||
},
|
||||
"maxUniformBuffersPerShaderStage" => {
|
||||
desc.limits.max_uniform_buffers_per_shader_stage = v
|
||||
desc.required_limits.max_uniform_buffers_per_shader_stage = v
|
||||
},
|
||||
"maxUniformBufferBindingSize" => {
|
||||
desc.limits.max_uniform_buffer_binding_size = v
|
||||
desc.required_limits.max_uniform_buffer_binding_size = v
|
||||
},
|
||||
"maxStorageBufferBindingSize" => {
|
||||
desc.limits.max_storage_buffer_binding_size = v
|
||||
desc.required_limits.max_storage_buffer_binding_size = v
|
||||
},
|
||||
"minUniformBufferOffsetAlignment" => {
|
||||
desc.limits.min_uniform_buffer_offset_alignment = v
|
||||
desc.required_limits.min_uniform_buffer_offset_alignment = v
|
||||
},
|
||||
"minStorageBufferOffsetAlignment" => {
|
||||
desc.limits.min_storage_buffer_offset_alignment = v
|
||||
desc.required_limits.min_storage_buffer_offset_alignment = v
|
||||
},
|
||||
"maxVertexBuffers" => desc.required_limits.max_vertex_buffers = v,
|
||||
"maxBufferSize" => desc.required_limits.max_buffer_size = *value,
|
||||
"maxVertexAttributes" => desc.required_limits.max_vertex_attributes = v,
|
||||
"maxVertexBufferArrayStride" => {
|
||||
desc.required_limits.max_vertex_buffer_array_stride = v
|
||||
},
|
||||
"maxVertexBuffers" => desc.limits.max_vertex_buffers = v,
|
||||
"maxBufferSize" => desc.limits.max_buffer_size = *value,
|
||||
"maxVertexAttributes" => desc.limits.max_vertex_attributes = v,
|
||||
"maxVertexBufferArrayStride" => desc.limits.max_vertex_buffer_array_stride = v,
|
||||
"maxInterStageShaderComponents" => {
|
||||
desc.limits.max_inter_stage_shader_components = v
|
||||
desc.required_limits.max_inter_stage_shader_components = v
|
||||
},
|
||||
"maxComputeWorkgroupStorageSize" => {
|
||||
desc.limits.max_compute_workgroup_storage_size = v
|
||||
desc.required_limits.max_compute_workgroup_storage_size = v
|
||||
},
|
||||
"maxComputeInvocationsPerWorkgroup" => {
|
||||
desc.limits.max_compute_invocations_per_workgroup = v
|
||||
desc.required_limits.max_compute_invocations_per_workgroup = v
|
||||
},
|
||||
"maxComputeWorkgroupSizeX" => {
|
||||
desc.required_limits.max_compute_workgroup_size_x = v
|
||||
},
|
||||
"maxComputeWorkgroupSizeY" => {
|
||||
desc.required_limits.max_compute_workgroup_size_y = v
|
||||
},
|
||||
"maxComputeWorkgroupSizeZ" => {
|
||||
desc.required_limits.max_compute_workgroup_size_z = v
|
||||
},
|
||||
"maxComputeWorkgroupSizeX" => desc.limits.max_compute_workgroup_size_x = v,
|
||||
"maxComputeWorkgroupSizeY" => desc.limits.max_compute_workgroup_size_y = v,
|
||||
"maxComputeWorkgroupSizeZ" => desc.limits.max_compute_workgroup_size_z = v,
|
||||
"maxComputeWorkgroupsPerDimension" => {
|
||||
desc.limits.max_compute_workgroups_per_dimension = v
|
||||
desc.required_limits.max_compute_workgroups_per_dimension = v
|
||||
},
|
||||
_ => {
|
||||
error!("Unknown required limit: {limit} with value {value}");
|
||||
|
@ -251,8 +280,8 @@ impl AsyncWGPUListener for GPUAdapter {
|
|||
self.channel.clone(),
|
||||
self,
|
||||
Heap::default(),
|
||||
descriptor.features,
|
||||
descriptor.limits,
|
||||
descriptor.required_features,
|
||||
descriptor.required_limits,
|
||||
device_id,
|
||||
queue_id,
|
||||
descriptor.label.unwrap_or_default(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue