Skip to content

Commit 3e98cee

Browse files
committed
Move most of the conversion tests into abstract-types; add abstract-types-let
1 parent 52b8155 commit 3e98cee

15 files changed

+1360
-700
lines changed

naga/tests/in/wgsl/abstract-types-const.wgsl

+23-4
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,23 @@
1212
// - all parameters' types are considered.
1313
// - all parameters are converted to the consensus type.
1414

15-
const xvupaiai: vec2<u32> = vec2(42, 43);
16-
const xvfpaiai: vec2<f32> = vec2(44, 45);
15+
const xvipaiai: vec2<i32> = vec2(42, 43);
16+
const xvupaiai: vec2<u32> = vec2(44, 45);
17+
const xvfpaiai: vec2<f32> = vec2(46, 47);
18+
const xvfpafaf: vec2<f32> = vec2(48.0, 49.0);
19+
const xvfpaiaf: vec2<f32> = vec2(48, 49.0);
1720

1821
const xvupuai: vec2<u32> = vec2(42u, 43);
1922
const xvupaiu: vec2<u32> = vec2(42, 43u);
2023

2124
const xvuuai: vec2<u32> = vec2<u32>(42u, 43);
2225
const xvuaiu: vec2<u32> = vec2<u32>(42, 43u);
2326

27+
const xvip____: vec2<i32> = vec2();
28+
const xvup____: vec2<u32> = vec2();
29+
const xvfp____: vec2<f32> = vec2();
30+
const xmfp____: mat2x2f = mat2x2(vec2(), vec2());
31+
2432
const xmfpaiaiaiai: mat2x2<f32> = mat2x2(1, 2, 3, 4);
2533
const xmfpafaiaiai: mat2x2<f32> = mat2x2(1.0, 2, 3, 4);
2634
const xmfpaiafaiai: mat2x2<f32> = mat2x2(1, 2.0, 3, 4);
@@ -41,9 +49,15 @@ const ivfs_af = vec2<f32>(1.0);
4149
const iafafaf = array<f32, 2>(1.0, 2.0);
4250
const iafaiai = array<f32, 2>(1, 2);
4351

44-
const iafpafaf = array(1.0, 2.0);
45-
const iafpaiaf = array(1, 2.0);
52+
const iaipaiai = array(1, 2);
53+
const iafpaiaf = array(1, 2.0);
4654
const iafpafai = array(1.0, 2);
55+
const iafpafaf = array(1.0, 2.0);
56+
57+
const xaipaiai: array<i32, 2> = array(1, 2);
58+
const xaupaiai: array<u32, 2> = array(1, 2);
59+
const xafpaiaf: array<f32, 2> = array(1, 2.0);
60+
const xafpafai: array<f32, 2> = array(1.0, 2);
4761
const xafpafaf: array<f32, 2> = array(1.0, 2.0);
4862

4963
struct S {
@@ -61,6 +75,11 @@ const saf_iai: S = S(1.0, 1i, 1);
6175
const safai_u: S = S(1.0, 1, 1u);
6276
const safaiai: S = S(1.0, 1, 1);
6377

78+
const xvisai: vec2<i32> = vec2(1);
79+
const xvusai: vec2<u32> = vec2(1);
80+
const xvfsai: vec2<f32> = vec2(1);
81+
const xvfsaf: vec2<f32> = vec2(1.0);
82+
6483
// Vector construction with spreads
6584
const ivfr_f__f = vec3<f32>(vec2<f32>(1.0f, 2.0f), 3.0f);
6685
const ivfr_f_af = vec3<f32>(vec2<f32>(1.0f, 2.0f), 3.0 );
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
targets = "SPIRV | METAL | GLSL | WGSL"
+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// i/x: type inferred / explicit
2+
// vX/mX/aX: vector / matrix / array of X
3+
// where X: u/i/f: u32 / i32 / f32
4+
// s: vector splat
5+
// r: vector spread (vector arg to vector constructor)
6+
// p: "partial" constructor (type parameter inferred)
7+
// u/i/f/ai/af: u32 / i32 / f32 / abstract float / abstract integer as parameter
8+
// _: just for alignment
9+
10+
// Ensure that:
11+
// - the inferred type is correct.
12+
// - all parameters' types are considered.
13+
// - all parameters are converted to the consensus type.
14+
15+
fn all_constant_arguments() {
16+
let xvipaiai: vec2<i32> = vec2(42, 43);
17+
let xvupaiai: vec2<u32> = vec2(44, 45);
18+
let xvfpaiai: vec2<f32> = vec2(46, 47);
19+
let xvfpafaf: vec2<f32> = vec2(48.0, 49.0);
20+
let xvfpaiaf: vec2<f32> = vec2(48, 49.0);
21+
22+
let xvupuai: vec2<u32> = vec2(42u, 43);
23+
let xvupaiu: vec2<u32> = vec2(42, 43u);
24+
25+
let xvuuai: vec2<u32> = vec2<u32>(42u, 43);
26+
let xvuaiu: vec2<u32> = vec2<u32>(42, 43u);
27+
28+
let xvip____: vec2<i32> = vec2();
29+
let xvup____: vec2<u32> = vec2();
30+
let xvfp____: vec2<f32> = vec2();
31+
let xmfp____: mat2x2f = mat2x2(vec2(), vec2());
32+
33+
let xmfpaiaiaiai: mat2x2<f32> = mat2x2(1, 2, 3, 4);
34+
let xmfpafaiaiai: mat2x2<f32> = mat2x2(1.0, 2, 3, 4);
35+
let xmfpaiafaiai: mat2x2<f32> = mat2x2(1, 2.0, 3, 4);
36+
let xmfpaiaiafai: mat2x2<f32> = mat2x2(1, 2, 3.0, 4);
37+
let xmfpaiaiaiaf: mat2x2<f32> = mat2x2(1, 2, 3, 4.0);
38+
39+
let xmfp_faiaiai: mat2x2<f32> = mat2x2(1.0f, 2, 3, 4);
40+
let xmfpai_faiai: mat2x2<f32> = mat2x2(1, 2.0f, 3, 4);
41+
let xmfpaiai_fai: mat2x2<f32> = mat2x2(1, 2, 3.0f, 4);
42+
let xmfpaiaiai_f: mat2x2<f32> = mat2x2(1, 2, 3, 4.0f);
43+
44+
let xvispai: vec2<i32> = vec2(1);
45+
let xvfspaf: vec2<f32> = vec2(1.0);
46+
let xvis_ai: vec2<i32> = vec2<i32>(1);
47+
let xvus_ai: vec2<u32> = vec2<u32>(1);
48+
let xvfs_ai: vec2<f32> = vec2<f32>(1);
49+
let xvfs_af: vec2<f32> = vec2<f32>(1.0);
50+
51+
let xafafaf: array<f32, 2> = array<f32, 2>(1.0, 2.0);
52+
let xaf_faf: array<f32, 2> = array<f32, 2>(1.0f, 2.0);
53+
let xafaf_f: array<f32, 2> = array<f32, 2>(1.0, 2.0f);
54+
let xafaiai: array<f32, 2> = array<f32, 2>(1, 2);
55+
let xai_iai: array<i32, 2> = array<i32, 2>(1i, 2);
56+
let xaiai_i: array<i32, 2> = array<i32, 2>(1, 2i);
57+
58+
let xaipaiai: array<i32, 2> = array(1, 2);
59+
let xafpaiai: array<f32, 2> = array(1, 2);
60+
let xafpaiaf: array<f32, 2> = array(1, 2.0);
61+
let xafpafai: array<f32, 2> = array(1.0, 2);
62+
let xafpafaf: array<f32, 2> = array(1.0, 2.0);
63+
64+
let xavipai: array<vec3<i32>, 1> = array(vec3(1));
65+
let xavfpai: array<vec3<f32>, 1> = array(vec3(1));
66+
let xavfpaf: array<vec3<f32>, 1> = array(vec3(1.0));
67+
68+
// Construction with splats
69+
let xvisai: vec2<i32> = vec2(1);
70+
let xvusai: vec2<u32> = vec2(1);
71+
let xvfsai: vec2<f32> = vec2(1);
72+
let xvfsaf: vec2<f32> = vec2(1.0);
73+
74+
let iaipaiai = array(1, 2);
75+
let iafpaiaf = array(1, 2.0);
76+
let iafpafai = array(1.0, 2);
77+
let iafpafaf = array(1.0, 2.0);
78+
}
79+
80+
fn mixed_constant_and_runtime_arguments() {
81+
var u: u32;
82+
var i: i32;
83+
var f: f32;
84+
85+
let xvupuai: vec2<u32> = vec2(u, 43);
86+
let xvupaiu: vec2<u32> = vec2(42, u);
87+
let xvfpfai: vec2<f32> = vec2(f, 47); // differs slightly from const version
88+
let xvfpfaf: vec2<f32> = vec2(f, 49.0);
89+
90+
let xvuuai: vec2<u32> = vec2<u32>(u, 43);
91+
let xvuaiu: vec2<u32> = vec2<u32>(42, u);
92+
93+
let xmfp_faiaiai: mat2x2<f32> = mat2x2(f, 2, 3, 4);
94+
let xmfpai_faiai: mat2x2<f32> = mat2x2(1, f, 3, 4);
95+
let xmfpaiai_fai: mat2x2<f32> = mat2x2(1, 2, f, 4);
96+
let xmfpaiaiai_f: mat2x2<f32> = mat2x2(1, 2, 3, f);
97+
98+
let xaf_faf: array<f32, 2> = array<f32, 2>(f, 2.0);
99+
let xafaf_f: array<f32, 2> = array<f32, 2>(1.0, f);
100+
let xaf_fai: array<f32, 2> = array<f32, 2>(f, 2);
101+
let xafai_f: array<f32, 2> = array<f32, 2>(1, f);
102+
let xai_iai: array<i32, 2> = array<i32, 2>(i, 2);
103+
let xaiai_i: array<i32, 2> = array<i32, 2>(1, i);
104+
105+
let xafp_faf: array<f32, 2> = array(f, 2.0);
106+
let xafpaf_f: array<f32, 2> = array(1.0, f);
107+
let xafp_fai: array<f32, 2> = array(f, 2);
108+
let xafpai_f: array<f32, 2> = array(1, f);
109+
let xaip_iai: array<i32, 2> = array(i, 2);
110+
let xaipai_i: array<i32, 2> = array(1, i);
111+
112+
let xvisi: vec2<i32> = vec2(i);
113+
let xvusu: vec2<u32> = vec2(u);
114+
let xvfsf: vec2<f32> = vec2(f);
115+
}

naga/tests/in/wgsl/abstract-types-var.wgsl

+51-1
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@
1515
var<private> xvipaiai: vec2<i32> = vec2(42, 43);
1616
var<private> xvupaiai: vec2<u32> = vec2(44, 45);
1717
var<private> xvfpaiai: vec2<f32> = vec2(46, 47);
18+
var<private> xvfpafaf: vec2<f32> = vec2(48.0, 49.0);
19+
var<private> xvfpaiaf: vec2<f32> = vec2(48, 49.0);
1820

1921
var<private> xvupuai: vec2<u32> = vec2(42u, 43);
2022
var<private> xvupaiu: vec2<u32> = vec2(42, 43u);
2123

2224
var<private> xvuuai: vec2<u32> = vec2<u32>(42u, 43);
2325
var<private> xvuaiu: vec2<u32> = vec2<u32>(42, 43u);
2426

27+
var<private> xvip____: vec2<i32> = vec2();
28+
var<private> xvup____: vec2<u32> = vec2();
29+
var<private> xvfp____: vec2<f32> = vec2();
30+
var<private> xmfp____: mat2x2f = mat2x2(vec2(), vec2());
31+
2532
var<private> xmfpaiaiaiai: mat2x2<f32> = mat2x2(1, 2, 3, 4);
2633
var<private> xmfpafaiaiai: mat2x2<f32> = mat2x2(1.0, 2, 3, 4);
2734
var<private> xmfpaiafaiai: mat2x2<f32> = mat2x2(1, 2.0, 3, 4);
@@ -38,7 +45,8 @@ var<private> xvfs_af: vec2<f32> = vec2<f32>(1.0);
3845
var<private> xafafaf: array<f32, 2> = array<f32, 2>(1.0, 2.0);
3946
var<private> xafaiai: array<f32, 2> = array<f32, 2>(1, 2);
4047

41-
var<private> xafpaiai: array<i32, 2> = array(1, 2);
48+
var<private> xaipaiai: array<i32, 2> = array(1, 2);
49+
var<private> xaupaiai: array<u32, 2> = array(1, 2);
4250
var<private> xafpaiaf: array<f32, 2> = array(1, 2.0);
4351
var<private> xafpafai: array<f32, 2> = array(1.0, 2);
4452
var<private> xafpafaf: array<f32, 2> = array(1.0, 2.0);
@@ -47,6 +55,12 @@ var<private> xavipai: array<vec3<i32>, 1> = array(vec3(1));
4755
var<private> xavfpai: array<vec3<f32>, 1> = array(vec3(1));
4856
var<private> xavfpaf: array<vec3<f32>, 1> = array(vec3(1.0));
4957

58+
// Construction with splats
59+
var<private> xvisai: vec2<i32> = vec2(1);
60+
var<private> xvusai: vec2<u32> = vec2(1);
61+
var<private> xvfsai: vec2<f32> = vec2(1);
62+
var<private> xvfsaf: vec2<f32> = vec2(1.0);
63+
5064
var<private> ivispai = vec2(1);
5165
var<private> ivfspaf = vec2(1.0);
5266
var<private> ivis_ai = vec2<i32>(1);
@@ -70,13 +84,20 @@ fn all_constant_arguments() {
7084
var xvipaiai: vec2<i32> = vec2(42, 43);
7185
var xvupaiai: vec2<u32> = vec2(44, 45);
7286
var xvfpaiai: vec2<f32> = vec2(46, 47);
87+
var xvfpafaf: vec2<f32> = vec2(48.0, 49.0);
88+
var xvfpaiaf: vec2<f32> = vec2(48, 49.0);
7389

7490
var xvupuai: vec2<u32> = vec2(42u, 43);
7591
var xvupaiu: vec2<u32> = vec2(42, 43u);
7692

7793
var xvuuai: vec2<u32> = vec2<u32>(42u, 43);
7894
var xvuaiu: vec2<u32> = vec2<u32>(42, 43u);
7995

96+
var xvip____: vec2<i32> = vec2();
97+
var xvup____: vec2<u32> = vec2();
98+
var xvfp____: vec2<f32> = vec2();
99+
var xmfp____: mat2x2f = mat2x2(vec2(), vec2());
100+
80101
var xmfpaiaiaiai: mat2x2<f32> = mat2x2(1, 2, 3, 4);
81102
var xmfpafaiaiai: mat2x2<f32> = mat2x2(1.0, 2, 3, 4);
82103
var xmfpaiafaiai: mat2x2<f32> = mat2x2(1, 2.0, 3, 4);
@@ -112,6 +133,12 @@ fn all_constant_arguments() {
112133
var xavfpai: array<vec3<f32>, 1> = array(vec3(1));
113134
var xavfpaf: array<vec3<f32>, 1> = array(vec3(1.0));
114135

136+
// Construction with splats
137+
var xvisai: vec2<i32> = vec2(1);
138+
var xvusai: vec2<u32> = vec2(1);
139+
var xvfsai: vec2<f32> = vec2(1);
140+
var xvfsaf: vec2<f32> = vec2(1.0);
141+
115142
var iaipaiai = array(1, 2);
116143
var iafpaiaf = array(1, 2.0);
117144
var iafpafai = array(1.0, 2);
@@ -121,13 +148,20 @@ fn all_constant_arguments() {
121148
xvipaiai = vec2(42, 43);
122149
xvupaiai = vec2(44, 45);
123150
xvfpaiai = vec2(46, 47);
151+
xvfpafaf = vec2(48.0, 49.0);
152+
xvfpaiaf = vec2(48, 49.0);
124153

125154
xvupuai = vec2(42u, 43);
126155
xvupaiu = vec2(42, 43u);
127156

128157
xvuuai = vec2<u32>(42u, 43);
129158
xvuaiu = vec2<u32>(42, 43u);
130159

160+
xvip____ = vec2();
161+
xvup____ = vec2();
162+
xvfp____ = vec2();
163+
xmfp____ = mat2x2(vec2(), vec2());
164+
131165
xmfpaiaiaiai = mat2x2(1, 2, 3, 4);
132166
xmfpafaiaiai = mat2x2(1.0, 2, 3, 4);
133167
xmfpaiafaiai = mat2x2(1, 2.0, 3, 4);
@@ -163,6 +197,12 @@ fn all_constant_arguments() {
163197
xavfpai = array(vec3(1));
164198
xavfpaf = array(vec3(1.0));
165199

200+
// Construction with splats
201+
xvisai = vec2(1);
202+
xvusai = vec2(1);
203+
xvfsai = vec2(1);
204+
xvfsaf = vec2(1.0);
205+
166206
iaipaiai = array(1, 2);
167207
iafpaiaf = array(1, 2.0);
168208
iafpafai = array(1.0, 2);
@@ -176,6 +216,8 @@ fn mixed_constant_and_runtime_arguments() {
176216

177217
var xvupuai: vec2<u32> = vec2(u, 43);
178218
var xvupaiu: vec2<u32> = vec2(42, u);
219+
var xvfpfai: vec2<f32> = vec2(f, 47); // differs slightly from const version
220+
var xvfpfaf: vec2<f32> = vec2(f, 49.0);
179221

180222
var xvuuai: vec2<u32> = vec2<u32>(u, 43);
181223
var xvuaiu: vec2<u32> = vec2<u32>(42, u);
@@ -199,6 +241,10 @@ fn mixed_constant_and_runtime_arguments() {
199241
var xaip_iai: array<i32, 2> = array(i, 2);
200242
var xaipai_i: array<i32, 2> = array(1, i);
201243

244+
var xvisi: vec2<i32> = vec2(i);
245+
var xvusu: vec2<u32> = vec2(u);
246+
var xvfsf: vec2<f32> = vec2(f);
247+
202248
// Assignments to all of the above.
203249
xvupuai = vec2(u, 43);
204250
xvupaiu = vec2(42, u);
@@ -224,4 +270,8 @@ fn mixed_constant_and_runtime_arguments() {
224270
xafpai_f = array(1, f);
225271
xaip_iai = array(i, 2);
226272
xaipai_i = array(1, i);
273+
274+
xvisi = vec2(i);
275+
xvusu = vec2(u);
276+
xvfsf = vec2(f);
227277
}

0 commit comments

Comments
 (0)