The chromium_internal_dual_source_blending extension adds support for specifying dual-source blending outputs in fragment shaders. This is useful in combination with wgpu::BlendFactor enum values to do hardware blending for Porter-Duff gradients between others.
Dual source blending support in Tint is for internal use in Chromium and subprojects. It follows the agreed-upon design decided by the WebGPU W3C group but cannot be a stable extension until the dual-source-blending is added to the main WebGPU spec.
A new attribute @blend_src(N) (N = 0 or 1) is added that can be specified on fragment shader outputs. It can only be used on outputs for @location(0) and if one of the outputs for @location(0) has an @blend_src then they must all have one.
enable chromium_internal_dual_source_blending;
struct FragInput {
@location(0) a : vec4<f32>,
@location(1) b : vec4<f32>,
};
struct FragOutput {
@location(0) @blend_src(0) color : vec4<f32>,
@location(0) @blend_src(1) blend : vec4<f32>,
};
@fragment
fn frag_main(in : FragInput) -> FragOutput {
var output : FragOutput;
output.color = in.a;
output.blend = in.b;
return output;
}