webgpu: Update wgpu and revamp computepass (#32575)

* Do not wait on drop, but rather wake poller thread

* Update wgpu and render stuff

* Set some good expectations

* Update wgpu again

* handle IPC error as warning

* More good expectations

* Some more expectations

CTS does not match the spec: https://github.com/gpuweb/cts/issues/3806

* This expectations are due to other changes in servo

also happening on main

* Explain error_command_encoders and remove RefCell around it

* fixup

* store validness of passes

* More good expectations

* More docs

* this assert is wrong

* This is even more right per CTS/spec

Only Command encoder state errors are allowed here, but wgpu does not exposes them.

* More good expectations

* One bad expectation

* Fix my english
This commit is contained in:
Samson 2024-06-28 06:49:35 +02:00 committed by GitHub
parent fced0b4940
commit e9cf4d4971
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 372 additions and 1870 deletions

View file

@ -16,8 +16,7 @@ use wgc::binding_model::{
BindGroupDescriptor, BindGroupLayoutDescriptor, PipelineLayoutDescriptor,
};
use wgc::command::{
ComputePass, ImageCopyBuffer, ImageCopyTexture, RenderBundleDescriptor, RenderBundleEncoder,
RenderPass,
ImageCopyBuffer, ImageCopyTexture, RenderBundleDescriptor, RenderBundleEncoder, RenderPass,
};
use wgc::device::HostMap;
use wgc::id;
@ -191,6 +190,7 @@ pub enum WebGPURequest {
DropShaderModule(id::ShaderModuleId),
DropRenderBundle(id::RenderBundleId),
DropQuerySet(id::QuerySetId),
DropComputePass(id::ComputePassEncoderId),
Exit(IpcSender<()>),
RenderBundleEncoderFinish {
render_bundle_encoder: RenderBundleEncoder,
@ -210,13 +210,45 @@ pub enum WebGPURequest {
device_id: id::DeviceId,
pipeline_id: PipelineId,
},
RunComputePass {
BeginComputePass {
command_encoder_id: id::CommandEncoderId,
compute_pass: Option<ComputePass>,
compute_pass_id: ComputePassId,
label: Option<Cow<'static, str>>,
device_id: id::DeviceId,
},
RunRenderPass {
ComputePassSetPipeline {
compute_pass_id: ComputePassId,
pipeline_id: id::ComputePipelineId,
device_id: id::DeviceId,
},
ComputePassSetBindGroup {
compute_pass_id: ComputePassId,
index: u32,
bind_group_id: id::BindGroupId,
offsets: Vec<u32>,
device_id: id::DeviceId,
},
ComputePassDispatchWorkgroups {
compute_pass_id: ComputePassId,
x: u32,
y: u32,
z: u32,
device_id: id::DeviceId,
},
ComputePassDispatchWorkgroupsIndirect {
compute_pass_id: ComputePassId,
buffer_id: id::BufferId,
offset: u64,
device_id: id::DeviceId,
},
EndComputePass {
compute_pass_id: ComputePassId,
device_id: id::DeviceId,
command_encoder_id: id::CommandEncoderId,
},
EndRenderPass {
render_pass: Option<RenderPass>,
device_id: id::DeviceId,
},
Submit {
queue_id: id::QueueId,