The texel_buffers
language feature allows to store WebGPU plain color format data with a GPUBuffer
, supporting format conversion on load and store operations. Texel buffers roughly translate to buffer textures in Vulkan (Dim = Buffer
), texture_buffer<format>
in Metal Shading Language, and typed UAV/SRV buffer views in HLSL/D3D12.
The feature is actively under review for adoption in WGSL. Although a [proposal] (https://github.com/gpuweb/gpuweb/blob/main/proposals/texel-buffers.md) has been accepted, implementations must not expose the feature without an explicit draft-enable flag. Discussion is ongoing in a [Texel Buffers Issue] (https://github.com/gpuweb/gpuweb/issues/162).
A new texel_buffer
type, parameterized by the color format and the access mode: texel_buffer<Format, Access>
.
Format
must be a WebGPU plain color format.Access
is either read or read_write.Texel buffers overload textureDimensions
, textureLoad
and textureStore
built-in functions.
@group(0) @binding(0) var myBuffer : texel_buffer<rgba8unorm, read_write>; @compute @workgroup_size(32) fn computeMain(@builtin(global_invocation_id) threadId : vec3<u32>) { let length = textureDimensions(myBuffer); if (threadId.x >= length) { return; } var value = textureLoad(myBuffer, threadId.x); value = value * value; textureStore(myBuffer, threadId.x, value); }