summaryrefslogtreecommitdiffstats
path: root/dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts
diff options
context:
space:
mode:
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts')
-rw-r--r--dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts b/dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts
new file mode 100644
index 0000000000..93b0932042
--- /dev/null
+++ b/dom/webgpu/tests/cts/checkout/src/webgpu/api/validation/render_pipeline/common.ts
@@ -0,0 +1,68 @@
+import { kTextureFormatInfo } from '../../../format_info.js';
+import {
+ getFragmentShaderCodeWithOutput,
+ getPlainTypeInfo,
+ kDefaultVertexShaderCode,
+} from '../../../util/shader.js';
+import { ValidationTest } from '../validation_test.js';
+
+const values = [0, 1, 0, 1];
+export class CreateRenderPipelineValidationTest extends ValidationTest {
+ getDescriptor(
+ options: {
+ primitive?: GPUPrimitiveState;
+ targets?: GPUColorTargetState[];
+ multisample?: GPUMultisampleState;
+ depthStencil?: GPUDepthStencilState;
+ fragmentShaderCode?: string;
+ noFragment?: boolean;
+ fragmentConstants?: Record<string, GPUPipelineConstantValue>;
+ } = {}
+ ): GPURenderPipelineDescriptor {
+ const defaultTargets: GPUColorTargetState[] = [{ format: 'rgba8unorm' }];
+ const {
+ primitive = {},
+ targets = defaultTargets,
+ multisample = {},
+ depthStencil,
+ fragmentShaderCode = getFragmentShaderCodeWithOutput([
+ {
+ values,
+ plainType: getPlainTypeInfo(
+ kTextureFormatInfo[targets[0] ? targets[0].format : 'rgba8unorm'].sampleType
+ ),
+ componentCount: 4,
+ },
+ ]),
+ noFragment = false,
+ fragmentConstants = {},
+ } = options;
+
+ return {
+ vertex: {
+ module: this.device.createShaderModule({
+ code: kDefaultVertexShaderCode,
+ }),
+ entryPoint: 'main',
+ },
+ fragment: noFragment
+ ? undefined
+ : {
+ module: this.device.createShaderModule({
+ code: fragmentShaderCode,
+ }),
+ entryPoint: 'main',
+ targets,
+ constants: fragmentConstants,
+ },
+ layout: this.getPipelineLayout(),
+ primitive,
+ multisample,
+ depthStencil,
+ };
+ }
+
+ getPipelineLayout(): GPUPipelineLayout {
+ return this.device.createPipelineLayout({ bindGroupLayouts: [] });
+ }
+}