in src/webgpu/shader/execution/expression/call/builtin/texture_utils.ts [4827:4866]
function describeTextureCall<T extends Dimensionality>(call: TextureCall<T>): string {
const args: string[] = [];
if (isBuiltinGather(call.builtin) && call.componentType) {
args.push(`component: ${wgslExprFor(call.component!, call.componentType)}`);
}
args.push('texture: T');
if (builtinNeedsSampler(call.builtin)) {
args.push('sampler: S');
}
for (const name of kTextureCallArgNames) {
const value = call[name];
if (value !== undefined && name !== 'component') {
if (name === 'coords') {
const derivativeWGSL = builtinNeedsDerivatives(call.builtin)
? ` + derivativeBase * derivativeMult(${
call.derivativeMult ? wgslExprFor(call.derivativeMult, call.coordType) : '1'
})`
: '';
args.push(`${name}: ${wgslExprFor(value, call.coordType)}${derivativeWGSL}`);
} else if (name === 'derivativeMult') {
// skip this - it's covered in 'coords'
} else if (name === 'ddx' || name === 'ddy') {
args.push(`${name}: ${wgslExprFor(value, call.coordType)}`);
} else if (name === 'mipLevel') {
args.push(`${name}: ${wgslExprFor(value, call.levelType!)}`);
} else if (name === 'arrayIndex') {
args.push(`${name}: ${wgslExprFor(value, call.arrayIndexType!)}`);
} else if (name === 'bias') {
args.push(`${name}: ${wgslExprFor(value, 'f')}`);
} else if (name === 'sampleIndex') {
args.push(`${name}: ${wgslExprFor(value, call.sampleIndexType!)}`);
} else if (name === 'depthRef') {
args.push(`${name}: ${wgslExprFor(value, 'f')}`);
} else {
args.push(`${name}: ${wgslExpr(value)}`);
}
}
}
return `${call.builtin}(${args.join(', ')})`;
}