in src/webgpu/api/validation/utils.ts [230:275]
export function doResourcesMatch(api: Resource, wgsl: Resource): boolean {
if (api.buffer) {
if (!wgsl.buffer) {
return false;
}
return api.buffer.type === wgsl.buffer.type;
}
if (api.sampler) {
if (!wgsl.sampler) {
return false;
}
return (
api.sampler.type === wgsl.sampler.type ||
(api.sampler.type !== 'comparison' && wgsl.sampler.type !== 'comparison')
);
}
if (api.texture) {
if (!wgsl.texture) {
return false;
}
const aType = api.texture.sampleType as GPUTextureSampleType;
const wType = wgsl.texture.sampleType as GPUTextureSampleType;
return (
doSampleTypesMatch(aType, wType) &&
api.texture.viewDimension === wgsl.texture.viewDimension &&
api.texture.multisampled === wgsl.texture.multisampled
);
}
if (api.storageTexture) {
if (!wgsl.storageTexture) {
return false;
}
const aAccess = api.storageTexture.access as GPUStorageTextureAccess;
const wAccess = wgsl.storageTexture.access as GPUStorageTextureAccess;
return (
doAccessesMatch(aAccess, wAccess) &&
api.storageTexture.format === wgsl.storageTexture.format &&
api.storageTexture.viewDimension === wgsl.storageTexture.viewDimension
);
}
if (api.externalTexture) {
return wgsl.externalTexture !== undefined;
}
return false;
}