in src/webgpu/api/validation/capability_checks/limits/limit_utils.ts [107:195]
export function getPerStageWGSLForBindingCombinationImpl(
bindingCombination: BindingCombination,
order: ReorderOrder,
bindGroupTest: BindGroupTest,
storageDefinitionWGSLSnippetFn: (i: number, j: number) => string,
bodyFn: (numBindings: number, set: number) => string,
numBindGroups: number,
numBindings: number,
extraWGSL = ''
) {
const bindingParams = {
order,
bindGroupTest,
storageDefinitionWGSLSnippetFn,
numBindGroups,
};
switch (bindingCombination) {
case 'vertex':
return `
${extraWGSL}
${getWGSLBindings(bindingParams, numBindings, 0)}
@vertex fn mainVS() -> @builtin(position) vec4f {
${bodyFn(numBindings, 0)}
return vec4f(0);
}
`;
case 'fragment':
return `
${extraWGSL}
${getWGSLBindings(bindingParams, numBindings, 0)}
@vertex fn mainVS() -> @builtin(position) vec4f {
return vec4f(0);
}
@fragment fn mainFS() {
${bodyFn(numBindings, 0)}
}
`;
case 'vertexAndFragmentWithPossibleVertexStageOverflow': {
return `
${extraWGSL}
${getWGSLBindings(bindingParams, numBindings, 0)}
${getWGSLBindings(bindingParams, numBindings - 1, 1)}
@vertex fn mainVS() -> @builtin(position) vec4f {
${bodyFn(numBindings, 0)}
return vec4f(0);
}
@fragment fn mainFS() {
${bodyFn(numBindings - 1, 1)}
}
`;
}
case 'vertexAndFragmentWithPossibleFragmentStageOverflow': {
return `
${extraWGSL}
${getWGSLBindings(bindingParams, numBindings - 1, 0)}
${getWGSLBindings(bindingParams, numBindings, 1)}
@vertex fn mainVS() -> @builtin(position) vec4f {
${bodyFn(numBindings - 1, 0)}
return vec4f(0);
}
@fragment fn mainFS() {
${bodyFn(numBindings, 1)}
}
`;
}
case 'compute':
return `
${extraWGSL}
${getWGSLBindings(bindingParams, numBindings, 0)}
@compute @workgroup_size(1) fn main() {
${bodyFn(numBindings, 0)}
}
`;
break;
}
}