Skip to content

Commit 01b814e

Browse files
authored
Add tests of swizzle assignment (#4569)
Only the single element sizzle assignment on a vector should pass. Check that some other cases continue to fail as expected. To add this test case I created a new file with a couple other simple tests since there didn't seem to be an existing validation test for simple assignment statements.
1 parent 0ca53dd commit 01b814e

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
export const description = `
2+
Validation tests for assignment statements.
3+
`;
4+
5+
import { makeTestGroup } from '../../../../common/framework/test_group.js';
6+
import { keysOf } from '../../../../common/util/data_tables.js';
7+
import { ShaderValidationTest } from '../shader_validation_test.js';
8+
9+
export const g = makeTestGroup(ShaderValidationTest);
10+
11+
g.test('scalar_assignment')
12+
.desc('Test simple scalar assignments.')
13+
.fn(t => {
14+
const code = `
15+
@fragment
16+
fn main() {
17+
var a: i32 = 0;
18+
a = 1;
19+
let b: f32 = 0.0;
20+
var c: f32;
21+
c = b;
22+
}
23+
`;
24+
t.expectCompileResult(true, code);
25+
});
26+
27+
g.test('vector_full_assignment')
28+
.desc('Test full vector assignments.')
29+
.fn(t => {
30+
const code = `
31+
@fragment
32+
fn main() {
33+
var v1: vec3<f32> = vec3(0.0, 0.0, 0.0);
34+
var v2: vec3<f32>;
35+
v2 = v1;
36+
v2 = vec3(1.0, 2.0, 3.0);
37+
}
38+
`;
39+
t.expectCompileResult(true, code);
40+
});
41+
42+
g.test('vector_indexed_assignment')
43+
.desc('Test vector indexed assignments.')
44+
.fn(t => {
45+
const code = `
46+
@fragment
47+
fn main() {
48+
var v: vec3<i32> = vec3(0, 0, 0);
49+
v[0] = 1;
50+
v[2] = 5;
51+
}
52+
`;
53+
t.expectCompileResult(true, code);
54+
});
55+
56+
const kSwizzleTests = {
57+
single: {
58+
src: 'v.x = 1.0',
59+
pass: true,
60+
},
61+
multi: {
62+
src: 'v.xy = vec2(1.0, 2.0)',
63+
pass: false,
64+
},
65+
swizzleswizzle: {
66+
src: 'v.xy.x = 1.0',
67+
pass: false,
68+
},
69+
};
70+
71+
g.test('vector_swizzle_assignment')
72+
.desc('Test vector swizzle assignments.')
73+
.params(u => u.combine('case', keysOf(kSwizzleTests)))
74+
.fn(t => {
75+
const wgsl = `
76+
@fragment
77+
fn main() {
78+
var v: vec4<f32> = vec4(0.0, 0.0, 0.0, 0.0);
79+
${kSwizzleTests[t.params.case].src};
80+
}`;
81+
t.expectCompileResult(kSwizzleTests[t.params.case].pass, wgsl);
82+
});

0 commit comments

Comments
 (0)