in src/webgpu/api/validation/utils.ts [14:114]
function generateResources(): Resource[] {
const resources: Resource[] = [
// Buffers
{
buffer: { type: 'uniform' },
code: `var<uniform> res : array<vec4u, 16>`,
staticUse: `res[0]`,
},
{
buffer: { type: 'storage' },
code: `var<storage, read_write> res : array<vec4u>`,
staticUse: `res[0]`,
},
{
buffer: { type: 'read-only-storage' },
code: `var<storage> res : array<vec4u>`,
staticUse: `res[0]`,
},
// Samplers
{
sampler: { type: 'filtering' },
code: `var res : sampler`,
},
{
sampler: { type: 'non-filtering' },
code: `var res : sampler`,
},
{
sampler: { type: 'comparison' },
code: `var res : sampler_comparison`,
},
// Multisampled textures
{
texture: { sampleType: 'depth', viewDimension: '2d', multisampled: true },
code: `var res : texture_depth_multisampled_2d`,
},
{
texture: { sampleType: 'unfilterable-float', viewDimension: '2d', multisampled: true },
code: `var res : texture_multisampled_2d<f32>`,
},
{
texture: { sampleType: 'sint', viewDimension: '2d', multisampled: true },
code: `var res : texture_multisampled_2d<i32>`,
},
{
texture: { sampleType: 'uint', viewDimension: '2d', multisampled: true },
code: `var res : texture_multisampled_2d<u32>`,
},
];
// Sampled textures
const sampleDims: GPUTextureViewDimension[] = [
'1d',
'2d',
'2d-array',
'3d',
'cube',
'cube-array',
];
const sampleTypes: GPUTextureSampleType[] = ['float', 'unfilterable-float', 'sint', 'uint'];
const sampleWGSL = ['f32', 'f32', 'i32', 'u32'];
for (const dim of sampleDims) {
let i = 0;
for (const type of sampleTypes) {
resources.push({
texture: { sampleType: type, viewDimension: dim, multisampled: false },
code: `var res : texture_${dim.replace('-', '_')}<${sampleWGSL[i++]}>`,
});
}
}
// Depth textures
const depthDims: GPUTextureViewDimension[] = ['2d', '2d-array', 'cube', 'cube-array'];
for (const dim of depthDims) {
resources.push({
texture: { sampleType: 'depth', viewDimension: dim, multisampled: false },
code: `var res : texture_depth_${dim.replace('-', '_')}`,
});
}
// Storage textures
// Only cover r32uint, r32sint, and r32float here for ease of testing.
const storageDims: GPUTextureViewDimension[] = ['1d', '2d', '2d-array', '3d'];
const formats: GPUTextureFormat[] = ['r32float', 'r32sint', 'r32uint'];
const accesses: GPUStorageTextureAccess[] = ['write-only', 'read-only', 'read-write'];
for (const dim of storageDims) {
for (const format of formats) {
for (const access of accesses) {
resources.push({
storageTexture: { access, format, viewDimension: dim },
code: `var res : texture_storage_${dim.replace('-', '_')}<${format},${access
.replace('-only', '')
.replace('-', '_')}>`,
});
}
}
}
return resources;
}