Chromium Experimental Input Attachments

The chromium_experimental_input_attachments extension adds support for input attachment global variables to WGSL. This is similar to Vulkan's subpassInput variable.

Status

Input attachments support in Tint is highly experimental and only meant to be used in internal transforms at this stage. This extension is only relevant to SPIRV backend atm. Specification work in the WebGPU group hasn't started.

Pseudo-specification

This extension adds:

  • A new input_attachment<T> type in the handle address space, where T is u32, i32 or f32. It's only allowed on module-scoped variable declarations.
    • This will be mapped to OpTypeImage with Dim=SubpassData in SPIRV.
  • A new input_attachment_index(n) attribute where n is a u32 or i32 with a positive value. Unlike binding which specifies the binding point in a BindGroup, this attribute specifies the index of the input attachment in the render pass descriptor. This is required for input_attachment<T> type.
    • This is equivalent to InputAttachmentIndex decoration in SPIRV.
  • A new inputAttachmentLoad builtin function with signature: inputAttachmentLoad(input_attachment<T>) -> vec4<T>
    • This will emit OpImageRead function call in SPIRV.
  • All of the above are only available in fragment state.

Example usage

@group(0) @binding(0) @input_attachment_index(0)
    var input_tex : input_attachment<f32>;

@fragment fn main() -> @location(0) vec4f {
    return inputAttachmentLoad(input_tex);
}