WebGPU sub features
What type of issue is this?
Incorrect support data (example: BrowserX says "86" but support was added in "40")
What information was incorrect, unhelpful, or incomplete?
Over the last few months, @chrisdavidmills added quite a few WebGPU sub features based on the Chromium implementation. Now that Firefox and Safari are shipping WebGPU, these sub features need to be checked if they are also supported in Firefox and Safari. The collector doesn't automatically update them.
- api.GPUAdapter.requestDevice.lost_device_on_duplicate
- api.GPUAdapter.requestDevice.undefined_limits
- api.GPUCommandEncoder.beginRenderPass.depthSlice_option
- api.GPUCommandEncoder.beginRenderPass.separate_depth_stencil_read-only
- api.GPUCommandEncoder.beginRenderPass.timestampWrites
- api.GPUCommandEncoder.copyBufferToBuffer.offset_and_size_parameter_optional
- api.GPUComputePassEncoder.setBindGroup.unset_bind_group
- api.GPUDevice.createBindGroup.descriptor_entries_option_accepts_GPUTextureView_resource
- api.GPUDevice.createBindGroupLayout.storageTexture_access_read-write_read-only
- api.GPUDevice.createBindGroupLayout.texture_rgb10a2uint
- api.GPUDevice.createComputePipeline.optional_entryPoint
- api.GPUDevice.createComputePipelineAsync.optional_entryPoint
- api.GPUDevice.createQuerySet.timestamp
- api.GPUDevice.createRenderPipeline.optional_depthcompare_depthwriteenabled
- api.GPUDevice.createRenderPipeline.dual-source-blending
- api.GPUDevice.createRenderPipeline.optional_entryPoint
- api.GPUDevice.createRenderPipeline.texture_rgb10a2uint
- api.GPUDevice.createRenderPipeline.validates_depth_bias_for_line_and_point_topologies
- api.GPUDevice.createRenderPipeline.vertex_unorm10-10-10-2
- api.GPUDevice.createRenderPipelineAsync.dual-source-blending
- api.GPUDevice.createRenderPipelineAsync.optional_depthcompare_depthwriteenabled
- api.GPUDevice.createRenderPipelineAsync.optional_entryPoint
- api.GPUDevice.createRenderPipelineAsync.texture_rgb10a2uint
- api.GPUDevice.createRenderPipelineAsync.validates_depth_bias_for_line_and_point_topologies
- api.GPUDevice.createRenderPipelineAsync.vertex_unorm10-10-10-2
- api.GPUDevice.createTexture.texture_rgb10a2uint
- api.GPUDevice.importExternalTexture.color_space_display-p3
- api.GPUDevice.importExternalTexture.videoframe_source
- api.GPUQuerySet.type.timestamp
- api.GPUQueue.copyExternalImageToTexture.htmlimageelement_imagedata_source
- api.GPUQueue.copyExternalImageToTexture.videoframe_source
- ~~api.GPUQueue.onSubmittedWorkDone~~
- api.GPUQueue.submit.validates_command_buffer_uniqueness
- api.GPURenderBundleEncoder.setBindGroup.unset_bind_group
- api.GPURenderBundleEncoder.setVertexBuffer.unset_vertex_buffer
- api.GPURenderPassEncoder.setBindGroup.unset_bind_group
- api.GPURenderPassEncoder.setVertexBuffer.unset_vertex_buffer
- api.GPUSupportedFeatures.feature_bgra8unorm-storage
- api.GPUSupportedFeatures.feature_clip-distances
- api.GPUSupportedFeatures.feature_depth-clip-control
- api.GPUSupportedFeatures.feature_depth32float-stencil8
- api.GPUSupportedFeatures.feature_dual-source-blending
- api.GPUSupportedFeatures.feature_float32-blendable
- api.GPUSupportedFeatures.feature_float32-filterable
- api.GPUSupportedFeatures.feature_indirect-first-instance
- api.GPUSupportedFeatures.feature_rg11b10ufloat-renderable
- api.GPUSupportedFeatures.feature_shader-f16
- api.GPUSupportedFeatures.feature_subgroups
- api.GPUSupportedFeatures.feature_texture-compression-astc
- api.GPUSupportedFeatures.feature_texture-compression-bc
- api.GPUSupportedFeatures.feature_texture-compression-etc2
- api.GPUSupportedFeatures.feature_timestamp-query
- api.GPUSupportedLimits.maxInterStageShaderComponents
- api.GPUSupportedLimits.maxInterStageShaderVariables
- api.GPUTexture.createView.texture_rgb10a2uint
- api.GPUTexture.format.texture_rgb10a2uint
- api.WGSLLanguageFeatures.extension_packed_4x8_integer_dot_product
- api.WGSLLanguageFeatures.extension_pointer_composite_access
- api.WGSLLanguageFeatures.extension_readonly_and_readwrite_storage_textures
- api.WGSLLanguageFeatures.extension_unrestricted_pointer_parameters
What browsers does this problem apply to, if applicable?
No response
What did you expect to see?
Updated WebGPU compatibility data.
Did you test this? If so, how?
No, not yet.
Can you link to any release notes, bugs, pull requests, or MDN pages related to this?
No response
Do you have anything more you want to share?
No response
MDN URL
No response
MDN metadata
No response
@ErichDonGubler Can you help us identify which of those "behavioral" subfeatures are already supported in Firefox, and since what version? 🙏
So, the most common feature negotiations in WebGPU are going to be:
- From the API (which are listed in the OP):
-
GPUSupportedFeatures, which depend on both what wgpu is written to handle and what the graphics device actually supports. We use this code to determine what's implemented by Firefox, and using a Git blame on it would likely be the best way to determine what new features got added on initial launch, and since then: https://github.com/mozilla-firefox/firefox/blame/03a627fbceab5aed4464d63364224dbd1b350208/dom/webgpu/Adapter.cpp#L187-L252 -
WGSLLanguageFeatures, which are reported bynaga::front::wgsl::ImplementedLanguageExtension(i.e., https://docs.rs/naga/26.0.0/src/naga/front/wgsl/parse/directive/language_extension.rs.html#58-60/, https://github.com/erichdongubler-mozilla/firefox/blob/38b08c92d4b77e8c36aaa00b8edb5b18104c3651/third_party/rust/naga/src/front/wgsl/parse/directive/language_extension.rs#L57-L61).
-
- From WGSL shader compilation (which is not going to be detectable by seeing what DOM APIs are available), there are also "enable extensions", which are reported by
naga's internalImplementedEnableExtensionAPI.
It should be pretty easy to synthesize the lists of supported features there. I'm not directly answering the question, but hopefully this empowers you to determine this now and in the future! ❤️ LMK if you have any questions, also happy to validate the lists you derive from this information. 🙂