From 2f0b86e9e37a809de4b2f6ae622318444a58d4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Beaufort?= Date: Fri, 24 Nov 2023 14:25:33 +0100 Subject: [PATCH] default entry points to shader modules --- package-lock.json | 14 +-- package.json | 2 +- .../shader_module/entry_point.spec.ts | 85 +++++++++++++++---- 3 files changed, 75 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4d86ed1daa1..c93268b9404c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@types/serve-index": "^1.9.3", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", - "@webgpu/types": "^0.1.38", + "@webgpu/types": "^0.1.40", "ansi-colors": "4.1.3", "babel-plugin-add-header-comment": "^1.0.3", "babel-plugin-const-enum": "^1.2.0", @@ -1524,9 +1524,9 @@ "dev": true }, "node_modules/@webgpu/types": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", - "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==", + "version": "0.1.40", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.40.tgz", + "integrity": "sha512-/BBkHLS6/eQjyWhY2H7Dx5DHcVrS2ICj9owvSRdgtQT6KcafLZA86tPze0xAOsd4FbsYKCUBUQyNi87q7gV7kw==", "dev": true }, "node_modules/abbrev": { @@ -11582,9 +11582,9 @@ "dev": true }, "@webgpu/types": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", - "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==", + "version": "0.1.40", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.40.tgz", + "integrity": "sha512-/BBkHLS6/eQjyWhY2H7Dx5DHcVrS2ICj9owvSRdgtQT6KcafLZA86tPze0xAOsd4FbsYKCUBUQyNi87q7gV7kw==", "dev": true }, "abbrev": { diff --git a/package.json b/package.json index 608d0318f28d..33a11e016fd8 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@types/serve-index": "^1.9.3", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", - "@webgpu/types": "^0.1.38", + "@webgpu/types": "^0.1.40", "ansi-colors": "4.1.3", "babel-plugin-add-header-comment": "^1.0.3", "babel-plugin-const-enum": "^1.2.0", diff --git a/src/webgpu/api/validation/shader_module/entry_point.spec.ts b/src/webgpu/api/validation/shader_module/entry_point.spec.ts index 1a8da470a406..1354cb515d6b 100644 --- a/src/webgpu/api/validation/shader_module/entry_point.spec.ts +++ b/src/webgpu/api/validation/shader_module/entry_point.spec.ts @@ -15,7 +15,11 @@ TODO: `; import { makeTestGroup } from '../../../../common/framework/test_group.js'; -import { kDefaultVertexShaderCode, getShaderWithEntryPoint } from '../../../util/shader.js'; +import { + kDefaultVertexShaderCode, + getShaderWithEntryPoint, + TShaderStage, +} from '../../../util/shader.js'; import { ValidationTest } from '../validation_test.js'; export const g = makeTestGroup(ValidationTest); @@ -43,23 +47,38 @@ const kEntryPointTestCases = [ g.test('compute') .desc( ` -Tests calling createComputePipeline(Async) with valid vertex stage shader and different entryPoints, +Tests calling createComputePipeline(Async) with valid compute stage shader and different entryPoints, and check that the APIs only accept matching entryPoint. ` ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) + .params(u => + u + .combine('isAsync', [true, false]) + .combine('provideEntryPoint', [true, false]) + .combine('shaderModuleStage', ['compute', 'vertex', 'fragment'] as TShaderStage[]) + .combineWithParams(kEntryPointTestCases) + ) .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; + const { + isAsync, + provideEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint, + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; const descriptor: GPUComputePipelineDescriptor = { layout: 'auto', compute: { module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('compute', shaderModuleEntryPoint), + code: getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint), }), - entryPoint: stageEntryPoint, + entryPoint, }, }; - const _success = shaderModuleEntryPoint === stageEntryPoint; + const _success = + shaderModuleStage === 'compute' && + (!provideEntryPoint || shaderModuleEntryPoint === stageEntryPoint); t.doCreateComputePipelineTest(isAsync, _success, descriptor); }); @@ -70,19 +89,34 @@ Tests calling createRenderPipeline(Async) with valid vertex stage shader and dif and check that the APIs only accept matching entryPoint. ` ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) + .params(u => + u + .combine('isAsync', [true, false]) + .combine('provideEntryPoint', [true, false]) + .combine('shaderModuleStage', ['compute', 'vertex', 'fragment'] as TShaderStage[]) + .combineWithParams(kEntryPointTestCases) + ) .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; + const { + isAsync, + provideEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint, + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; const descriptor: GPURenderPipelineDescriptor = { layout: 'auto', vertex: { module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('vertex', shaderModuleEntryPoint), + code: getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint), }), - entryPoint: stageEntryPoint, + entryPoint, }, }; - const _success = shaderModuleEntryPoint === stageEntryPoint; + const _success = + shaderModuleStage === 'vertex' && + (!provideEntryPoint || shaderModuleEntryPoint === stageEntryPoint); t.doCreateRenderPipelineTest(isAsync, _success, descriptor); }); @@ -93,25 +127,40 @@ Tests calling createRenderPipeline(Async) with valid fragment stage shader and d and check that the APIs only accept matching entryPoint. ` ) - .params(u => u.combine('isAsync', [true, false]).combineWithParams(kEntryPointTestCases)) + + .params(u => + u + .combine('isAsync', [true, false]) + .combine('provideEntryPoint', [true, false]) + .combine('shaderModuleStage', ['compute', 'vertex', 'fragment'] as TShaderStage[]) + .combineWithParams(kEntryPointTestCases) + ) .fn(t => { - const { isAsync, shaderModuleEntryPoint, stageEntryPoint } = t.params; + const { + isAsync, + provideEntryPoint, + shaderModuleStage, + shaderModuleEntryPoint, + stageEntryPoint, + } = t.params; + const entryPoint = provideEntryPoint ? stageEntryPoint : undefined; const descriptor: GPURenderPipelineDescriptor = { layout: 'auto', vertex: { module: t.device.createShaderModule({ code: kDefaultVertexShaderCode, }), - entryPoint: 'main', }, fragment: { module: t.device.createShaderModule({ - code: getShaderWithEntryPoint('fragment', shaderModuleEntryPoint), + code: getShaderWithEntryPoint(shaderModuleStage, shaderModuleEntryPoint), }), - entryPoint: stageEntryPoint, + entryPoint, targets: [{ format: 'rgba8unorm' }], }, }; - const _success = shaderModuleEntryPoint === stageEntryPoint; + const _success = + shaderModuleStage === 'fragment' && + (!provideEntryPoint || shaderModuleEntryPoint === stageEntryPoint); t.doCreateRenderPipelineTest(isAsync, _success, descriptor); });