in src/webgpu/shader/execution/expression/call/builtin/texture_utils.ts [2133:2192]
function isValidOutOfBoundsValue(
softwareTexture: SoftwareTexture,
gotRGBA: PerTexelComponent<number>,
maxFractionalDiff: number
) {
// For a texture builtin with no sampler (eg textureLoad),
// any out of bounds access is allowed to return one of:
//
// * the value of any texel in the texture
// * 0,0,0,0 or 0,0,0,1 if not a depth texture
// * 0 if a depth texture
if (softwareTexture.descriptor.format.includes('depth')) {
if (gotRGBA.R === 0) {
return true;
}
} else {
if (
gotRGBA.R === 0 &&
gotRGBA.B === 0 &&
gotRGBA.G === 0 &&
(gotRGBA.A === 0 || gotRGBA.A === 1)
) {
return true;
}
}
// Can be any texel value
for (let mipLevel = 0; mipLevel < softwareTexture.texels.length; ++mipLevel) {
const mipTexels = softwareTexture.texels[mipLevel];
const size = virtualMipSize(
softwareTexture.descriptor.dimension || '2d',
softwareTexture.descriptor.size,
mipLevel
);
const sampleCount = softwareTexture.descriptor.sampleCount ?? 1;
for (let z = 0; z < size[2]; ++z) {
for (let y = 0; y < size[1]; ++y) {
for (let x = 0; x < size[0]; ++x) {
for (let sampleIndex = 0; sampleIndex < sampleCount; ++sampleIndex) {
const texel = mipTexels.color({ x, y, z, sampleIndex });
const rgba = convertPerTexelComponentToResultFormat(texel, mipTexels.format);
if (
texelsApproximatelyEqual(
gotRGBA,
softwareTexture.descriptor.format,
rgba,
mipTexels.format,
maxFractionalDiff
)
) {
return true;
}
}
}
}
}
}
return false;
}