# WebGPU Origin Trial Caveats
## WebGPU API
### Missing features
WebGPU features that are not supported (either the methods/enums don't exist, or produce a validation error when used):
- **In Progress** Pipeline overridable constants ([dawn:1041](https://crbug.com/dawn/1041))
- **In Progress**`GPUTextureDescriptor.viewFormats` is not implemented ([dawn:1276](https://crbug.com/dawn/1276)
- `GPUShaderModuleDescriptor.sourceMap` ([chromium:1177491](https://crbug.com/chromium/1177491))
- `GPUCanvasConfiguration.colorSpace` is not implemented ([chromium:1241375](https://crbug.com/chromium/1241375))
- **Postponed** Pipeline statistics queries. ([chromium:1177506](https://crbug.com/chromium/1177506))
- **Done in M96** Vertex only pipelines ([dawn:136](https://crbug.com/dawn/136))
- **Done in M97** `GPURenderEncoderBase.drawIndexedIndirect`([dawn:809](https://crbug.com/dawn/809))
- **Done in M97** `GPUComputePassEncoder.dispatchIndirect` ([dawn:1039](https://crbug.com/dawn/1039))
- **Done in M97** Changing the limits when creating an adapter ([dawn:685](https://crbug.com/dawn/685))
- **Done in M97** `depth16unorm` texture format ([dawn:570](https://crbug.com/dawn/570))
- **Done in M97** ETC2 and ASTC optional features ([dawn:955](https://crbug.com/dawn/955))
- **Done in M98** `GPUCommandEncoder.clearBuffer` ([dawn:1170](https://crbug.com/dawn/1170))
- **Done in M99** Dynamic storage buffers ([dawn:429](https://crbug.com/dawn/429))
- **Done in M100** Readonly depth and stencil render pass attachments (`GPURenderPassDepthStencilAttachment.stencilReadOnly` and `GPURenderPassDepthStencilAttachment.depthReadOnly`) ([dawn:485](https://crbug.com/dawn/485))
- **Done in M101** Support canvas context texture formats other than bgra8unorm ([chromium:1241369](https://crbug.com/chromium/1241369))
- **Done in M101** 1D textures ([dawn:814](https://crbug.com/dawn/814))
- **Done in M101** Color space conversion for `copyExternalImageToTexture` ([dawn:964](https://crbug.com/dawn/964))
- **Done in M101** `depth24unorm-stencil8` and `depth32float-stencil8` optional features ([dawn:690](https://crbug.com/dawn/690))
- **Done in M102**`GPUCanvasConfiguration.compositingAlphaMode` is not implemented ([chromium:1241373](https://crbug.com/chromium/1241373))
- **Done in M102** `stencil8` texture format ([dawn:666](https://crbug.com/dawn/666))
- **Done in M102** `GPUDevice.destroy()` ([dawn:628](https://crbug.com/dawn/628))
### Missing optimizations
A number of important optimizations aren’t implemented yet, hence benchmarks results are very likely to change over time.
- Results of shader module and pipeline compilation isn't cached, causing all page loads to be "cold" page loads for compilation.
- Transfer to and from the GPU (`GPUQueue.writeBuffer()`, `GPUBuffer.mapAsync()` and `GPUBufferDescriptor.mappedAtCreation`) are performing more copies than necessary.
- **In Progress** `GPUDevice.importExternalTexture` performs too many copies instead of being 0 copy as intended by the specification.
- The implementation on the Vulkan API (ChromeOS, Linux) is very naive in some places.
- The implementations on D3D12 (Windows) and Vulkan (ChromeOS, Linux) doesn't optimize barrier scheduling, leading to missed parallelism in some workloads.
- Many other optimizations for CPU usage, GPU memory consumption, etc.
- **Done in M96** `GPUDevice.createRenderPipelineAsync()` isn't actually done asynchronously (leading to GPU process stalls like `GPUDevice.createRenderPipeline()`).
### Missing integrations
- Linux (can be enabled with `--enable-features=Vulkan`)
- **In Progress** CPU fallback with Swiftshader (`GPURequestAdapterOptions.forceFallbackAdapter` can't be set to true)
### Important known issues
- Incorrect `[[vertex_index]]` and `[[instance_index]]` in indirect draws in D3D12 ([dawn:548](https://crbug.com/dawn/548))
- **In Progress** `GPUAdapter.name` is always `"default"` instead of giving useful information ([chromium:1231163](https://crbug.com/chromium/1231163))
- `GPURequestAdapterOptions.powerPreference` doesn't have an effect on some OSes.
- **Done in M97** Error messages for validation errors don't provide sufficient details ([dawn:563](https://crbug.com/dawn/563))
- **Done in M97** Object labels aren't used in error messages ([dawn:840](https://crbug.com/dawn/840))
## WebGPU Shading Language (WGSL)
Note: Differences are relative to the following version of the WGSL specification: https://www.w3.org/TR/2021/WD-WGSL-20210825/
- Inter-scope variable shadowing is not supported ([tint:819](https://crbug.com/tint/819))
- Array indices must be signed integer literals ([tint:1068](https://crbug.com/tint/1068), [tint:1117](https://crbug.com/tint/117))
- The `num_workgroups` builtin is not supported ([tint:752](https://crbug.com/tint/752))
- The `quantizeToF16()` builtin function is not supported ([tint:991](https://crbug.com/tint/991))
- The `atomicSub()` builtin function is not supported ([tint:1130](https://crbug.com/tint/1130))
- No way currently in WGSL to declare a `mat2x2` that is std140 compatible.
- Construction of a matrix from scalars is not supported ([tint:1123](https://crbug.com/tint/1123))
- Compilation may fail when assigning to an array nested in a structure, using a dynamic index ([tint:998](https://crbug.com/tint/998))
- Infinite loops will not compile ([tint:1038](https://crbug.com/tint/1038))
- Loops containing certain instructions will not compile ([tint:1112](https://crbug.com/tint/1112))
- Continue statements cannot be used in switch statements ([tint:1080](https://crbug.com/tint/1080))
- Use of `discard` may error with `Not all control paths return a value` ([tint:1081](https://crbug.com/tint/1081))
- Division by compile-time constant zero may fail to compile ([tint:1083](https://crbug.com/tint/1083))
- Compilation may fail when assigning to an array nested in a structure, using a dynamic index ([tint:1094](https://crbug.com/tint/1094))
- Matrices cannot be used in `workgroup` storage ([tint:938](https://crbug.com/tint/938))