| export const description = `Validation tests for binding`; |
| |
| import { makeTestGroup } from '../../../../common/framework/test_group.js'; |
| import { keysOf } from '../../../../common/util/data_tables.js'; |
| import { ShaderValidationTest } from '../shader_validation_test.js'; |
| |
| export const g = makeTestGroup(ShaderValidationTest); |
| |
| const kTests = { |
| const_expr: { |
| src: `const z = 5; |
| const y = 2; |
| @binding(z + y)`, |
| pass: true, |
| }, |
| override_expr: { |
| src: `override z = 5; |
| @binding(z)`, |
| pass: false, |
| }, |
| |
| zero: { |
| src: `@binding(0)`, |
| pass: true, |
| }, |
| one: { |
| src: `@binding(1)`, |
| pass: true, |
| }, |
| comment: { |
| src: `@/* comment */binding(1)`, |
| pass: true, |
| }, |
| split_line: { |
| src: '@ \n binding(1)', |
| pass: true, |
| }, |
| trailing_comma: { |
| src: `@binding(1,)`, |
| pass: true, |
| }, |
| int_literal: { |
| src: `@binding(1i)`, |
| pass: true, |
| }, |
| uint_literal: { |
| src: `@binding(1u)`, |
| pass: true, |
| }, |
| hex_literal: { |
| src: `@binding(0x1)`, |
| pass: true, |
| }, |
| |
| negative: { |
| src: `@binding(-1)`, |
| pass: false, |
| }, |
| missing_value: { |
| src: `@binding()`, |
| pass: false, |
| }, |
| missing_left_paren: { |
| src: `@binding 1)`, |
| pass: false, |
| }, |
| missing_right_paren: { |
| src: `@binding(1`, |
| pass: false, |
| }, |
| multiple_values: { |
| src: `@binding(1,2)`, |
| pass: false, |
| }, |
| f32_val_literal: { |
| src: `@binding(1.0)`, |
| pass: false, |
| }, |
| f32_val: { |
| src: `@binding(1f)`, |
| pass: false, |
| }, |
| no_params: { |
| src: `@binding`, |
| pass: false, |
| }, |
| misspelling: { |
| src: `@abinding(1)`, |
| pass: false, |
| }, |
| multi_binding: { |
| src: `@binding(1) @binding(1)`, |
| pass: false, |
| }, |
| }; |
| g.test('binding') |
| .desc(`Test validation of binding`) |
| .params(u => u.combine('attr', keysOf(kTests))) |
| .fn(t => { |
| const code = ` |
| ${kTests[t.params.attr].src} @group(1) |
| var<storage> a: i32; |
| |
| @workgroup_size(1, 1, 1) |
| @compute fn main() { |
| _ = a; |
| }`; |
| t.expectCompileResult(kTests[t.params.attr].pass, code); |
| }); |
| |
| g.test('binding_f16') |
| .desc(`Test validation of binding with f16`) |
| .fn(t => { |
| const code = ` |
| @group(1) @binding(1h) |
| var<storage> a: i32; |
| |
| @workgroup_size(1, 1, 1) |
| @compute fn main() { |
| _ = a; |
| }`; |
| t.expectCompileResult(false, code); |
| }); |