function generateResources()

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;
}