diff --git a/src/webgpu/api/validation/buffer/create.spec.ts b/src/webgpu/api/validation/buffer/create.spec.ts index 41f6f79a58ff..3032ca10a98b 100644 --- a/src/webgpu/api/validation/buffer/create.spec.ts +++ b/src/webgpu/api/validation/buffer/create.spec.ts @@ -61,6 +61,7 @@ g.test('usage') u .combine('usage1', [0, ...kBufferUsages, kSomeBogusBufferUsage]) .combine('usage2', [0, ...kBufferUsages, kSomeBogusBufferUsage]) + .filter(p => p.usage1 <= p.usage2) .beginSubcases() .combine('mappedAtCreation', [false, true]) ) @@ -83,6 +84,32 @@ g.test('usage') ); }); +g.test('new_usages') + .desc(`Valid usages not present in GPUBufferUsage shouldn't be accepted by createBuffer().`) + .params(u => + u // + .beginSubcases() + .combine('usage', kBufferUsages) + ) + .fn(t => { + const { usage } = t.params; + + let exposedUsages = 0; + for (const v of Object.values(GPUBufferUsage)) { + exposedUsages |= v; + } + + const success = (usage & exposedUsages) === usage; + + t.expectGPUError( + 'validation', + () => { + t.createBufferTracked({ size: 16, usage }); + }, + !success + ); + }); + const BufferUsage = GPUConst.BufferUsage; g.test('createBuffer_invalid_and_oom') diff --git a/src/webgpu/api/validation/createTexture.spec.ts b/src/webgpu/api/validation/createTexture.spec.ts index e2c570d614ac..55ed721f22f0 100644 --- a/src/webgpu/api/validation/createTexture.spec.ts +++ b/src/webgpu/api/validation/createTexture.spec.ts @@ -1132,6 +1132,35 @@ g.test('usage') ); }); +g.test('new_usages') + .desc(`Valid usages not present in GPUTextureUsage shouldn't be accepted by createTexture().`) + .params(u => + u + .combine('usage', [ + ...kTextureUsages, + GPUConst.TextureUsage.RENDER_ATTACHMENT | GPUConst.TextureUsage.TRANSIENT_ATTACHMENT, + ]) + .filter(p => isValidTextureUsageCombination(p.usage)) + ) + .fn(t => { + const { usage } = t.params; + + let exposedUsages = 0; + for (const v of Object.values(GPUTextureUsage)) { + exposedUsages |= v; + } + + const success = (usage & exposedUsages) === usage; + + t.expectGPUError( + 'validation', + () => { + t.createTextureTracked({ format: 'rgba8unorm', size: [1, 1], usage }); + }, + !success + ); + }); + g.test('viewFormats') .desc( `Test creating a texture with viewFormats list for all {texture format}x{view format}. Only compatible view formats should be valid.`