Version: Unity 6.1 Alpha (6000.1)
Language : English
WebGPU (Experimental)
Recommendations for both WebGL2 and WebGPU APIs

Limitations of WebGPU

The WebGPU graphics API provides useful graphics features, however, it also has some limitations you need to be aware of:

For further best practise recommendations, refer to Recommendations for both WebGL2 and WebGPU APIs.

Compute shader limitations

There are a few limitations to compute shaderA program that runs on the GPU. More info
See in Glossary
in Web.

No RWBuffer support

You can use structured buffers, RWStructuredBuffer, but not RWBuffer in compute shaders. Limited read-write storage texture formats WebGPU only supports a limited set of texture formatsA file format for handling textures during real-time rendering by 3D graphics hardware, such as a graphics card or mobile device. More info
See in Glossary
for read-write storage textures in compute shaders. HLSL doesn’t explicitly state the access type of a storage texture, so it’s based on usage.

RWTexture2D<float> tex; // storage texture
tex[uv] = 1.0f; // write only
tex[uv] += 1.0f; // read-write

Write-only storage textures are generally much better supported. Refer to Texture format limitations.

Strict uniformity analysis

With WebGPU, you must only call barrier functions from non-uniform blocks. Non-uniform blocks are shader code blocks that aren’t uniformly consistent across multiple threads of execution. If you call a barrier function from a non-uniform block, WebGPU will fail to compile.

The following are HLSL barrier functions:

  • GroupMemoryBarrier
  • GroupMemoryBarrirWithGroupSync
  • DeviceMemoryBarrier
  • DeviceMemoryBarrierWithGroupSync
  • AllMemoryBarrier
  • AllMemoryBarrierWithGroupSync

Async compute

WebGPU doesn’t support async compute.

No HLSL extended features

WebGPU doesn’t provide support for the following features:

  • Wave Intrinsics (WaveBasic, WaveVote, WaveBallot, WaveMath, WaveMultiPrefix)

  • QuadShuffle

  • Int64

  • Native16Bit

GPU readback

WebGPU doesn’t support synchronous readback of buffer or texture data from the GPU to the CPU. The following functions will not work:

Instead, use the AsyncGPUReadback API to read buffer or texture data from the GPU to the CPU. For screen captures, use ScreenCapture.CaptureScreenshotIntoRenderTexture along with AsyncGPUReadback.

Texture format limitations

For information about WebGPU texture format capabilities, refer to the W3 documentation on WebGPU. Some formats are more restrictive than on other APIs, particularly for storage texture usage.

For example, WebGPU doesn’t support RHalf as a storage texture format, which means if you do create a RenderTexture with that format, you must make sure enableRandomWrite is set to false (which is the default value). RFloat supports storage texture usage, so you can create an RFloat RenderTexture with enableRandomWrite, instead of RHalf.

You can use SystemInfo.GetCompatibleFormat to find a format that will work for a given usage.

Render texture channels

The output type of a fragment shader must have a greater or equal number of channels as the target render textureA special type of Texture that is created and updated at runtime. To use them, first create a new Render Texture and designate one of your Cameras to render into it. Then you can use the Render Texture in a Material just like a regular Texture. More info
See in Glossary
format.

If the RenderTexture is RGBA, it has 4 channels. The fragment shader must output a float4 or half4. If it returns a float or half, WebGPU will encounter an error because there are channels of the render texture that will be uninitialized.

If a RenderTexture is R8, it has 1 channel. The fragment shader can then output a float or half. The fragment shader can also return a float4 or half4, and the extra output channels will be ignored.

Terrain texture limits

The number of textures you can access from a shader is limited to 16 on many platforms. This limit can hit by the terrainThe landscape in your scene. A Terrain GameObject adds a large flat plane to your scene and you can use the Terrain’s Inspector window to create a detailed landscape. More info
See in Glossary
renderer, especially with layer textures. This can make terrain rendering problematic for WebGPU. It is recommended that you limit the number of terrain texture layers you use.

Additional resources

WebGPU (Experimental)
Recommendations for both WebGL2 and WebGPU APIs