Skip to content

Commit a84b6ca

Browse files
jimblandyErichDonGubler
authored andcommitted
[naga] Add tests for automatic conversions in assignments.
Add tests for automatic conversions of the right-hand sides of assignment expressions.
1 parent 4f22f8d commit a84b6ca

File tree

4 files changed

+331
-1
lines changed

4 files changed

+331
-1
lines changed

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

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,53 @@ fn all_constant_arguments() {
104104
var iafpaiaf = array(1, 2.0);
105105
var iafpafai = array(1.0, 2);
106106
var iafpafaf = array(1.0, 2.0);
107+
108+
// Assignments to all of the above.
109+
xvipaiai = vec2(42, 43);
110+
xvupaiai = vec2(44, 45);
111+
xvfpaiai = vec2(46, 47);
112+
113+
xvupuai = vec2(42u, 43);
114+
xvupaiu = vec2(42, 43u);
115+
116+
xvuuai = vec2<u32>(42u, 43);
117+
xvuaiu = vec2<u32>(42, 43u);
118+
119+
xmfpaiaiaiai = mat2x2(1, 2, 3, 4);
120+
xmfpafaiaiai = mat2x2(1.0, 2, 3, 4);
121+
xmfpaiafaiai = mat2x2(1, 2.0, 3, 4);
122+
xmfpaiaiafai = mat2x2(1, 2, 3.0, 4);
123+
xmfpaiaiaiaf = mat2x2(1, 2, 3, 4.0);
124+
125+
xmfp_faiaiai = mat2x2(1.0f, 2, 3, 4);
126+
xmfpai_faiai = mat2x2(1, 2.0f, 3, 4);
127+
xmfpaiai_fai = mat2x2(1, 2, 3.0f, 4);
128+
xmfpaiaiai_f = mat2x2(1, 2, 3, 4.0f);
129+
130+
xvispai = vec2(1);
131+
xvfspaf = vec2(1.0);
132+
xvis_ai = vec2<i32>(1);
133+
xvus_ai = vec2<u32>(1);
134+
xvfs_ai = vec2<f32>(1);
135+
xvfs_af = vec2<f32>(1.0);
136+
137+
xafafaf = array<f32, 2>(1.0, 2.0);
138+
xaf_faf = array<f32, 2>(1.0f, 2.0);
139+
xafaf_f = array<f32, 2>(1.0, 2.0f);
140+
xafaiai = array<f32, 2>(1, 2);
141+
xai_iai = array<i32, 2>(1i, 2);
142+
xaiai_i = array<i32, 2>(1, 2i);
143+
144+
xaipaiai = array(1, 2);
145+
xafpaiai = array(1, 2);
146+
xafpaiaf = array(1, 2.0);
147+
xafpafai = array(1.0, 2);
148+
xafpafaf = array(1.0, 2.0);
149+
150+
iaipaiai = array(1, 2);
151+
iafpaiaf = array(1, 2.0);
152+
iafpafai = array(1.0, 2);
153+
iafpafaf = array(1.0, 2.0);
107154
}
108155

109156
fn mixed_constant_and_runtime_arguments() {
@@ -135,4 +182,30 @@ fn mixed_constant_and_runtime_arguments() {
135182
var xafpai_f: array<f32, 2> = array(1, f);
136183
var xaip_iai: array<i32, 2> = array(i, 2);
137184
var xaipai_i: array<i32, 2> = array(1, i);
185+
186+
// Assignments to all of the above.
187+
xvupuai = vec2(u, 43);
188+
xvupaiu = vec2(42, u);
189+
190+
xvuuai = vec2<u32>(u, 43);
191+
xvuaiu = vec2<u32>(42, u);
192+
193+
xmfp_faiaiai = mat2x2(f, 2, 3, 4);
194+
xmfpai_faiai = mat2x2(1, f, 3, 4);
195+
xmfpaiai_fai = mat2x2(1, 2, f, 4);
196+
xmfpaiaiai_f = mat2x2(1, 2, 3, f);
197+
198+
xaf_faf = array<f32, 2>(f, 2.0);
199+
xafaf_f = array<f32, 2>(1.0, f);
200+
xaf_fai = array<f32, 2>(f, 2);
201+
xafai_f = array<f32, 2>(1, f);
202+
xai_iai = array<i32, 2>(i, 2);
203+
xaiai_i = array<i32, 2>(1, i);
204+
205+
xafp_faf = array(f, 2.0);
206+
xafpaf_f = array(1.0, f);
207+
xafp_fai = array(f, 2);
208+
xafpai_f = array(1, f);
209+
xaip_iai = array(i, 2);
210+
xaipai_i = array(1, i);
138211
}

naga/tests/out/msl/abstract-types-var.msl

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,44 @@ void all_constant_arguments(
5050
type_7 iafpaiaf = type_7 {1.0, 2.0};
5151
type_7 iafpafai = type_7 {1.0, 2.0};
5252
type_7 iafpafaf = type_7 {1.0, 2.0};
53+
xvipaiai = metal::int2(42, 43);
54+
xvupaiai = metal::uint2(44u, 45u);
55+
xvfpaiai = metal::float2(46.0, 47.0);
56+
xvupuai = metal::uint2(42u, 43u);
57+
xvupaiu = metal::uint2(42u, 43u);
58+
xvuuai = metal::uint2(42u, 43u);
59+
xvuaiu = metal::uint2(42u, 43u);
60+
xmfpaiaiaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
61+
xmfpafaiaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
62+
xmfpaiafaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
63+
xmfpaiaiafai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
64+
xmfpaiaiaiaf = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
65+
xmfp_faiaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
66+
xmfpai_faiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
67+
xmfpaiai_fai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
68+
xmfpaiaiai_f = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0));
69+
xvispai = metal::int2(1);
70+
xvfspaf = metal::float2(1.0);
71+
xvis_ai = metal::int2(1);
72+
xvus_ai = metal::uint2(1u);
73+
xvfs_ai = metal::float2(1.0);
74+
xvfs_af = metal::float2(1.0);
75+
xafafaf = type_7 {1.0, 2.0};
76+
xaf_faf = type_7 {1.0, 2.0};
77+
xafaf_f = type_7 {1.0, 2.0};
78+
xafaiai = type_7 {1.0, 2.0};
79+
xai_iai = type_8 {1, 2};
80+
xaiai_i = type_8 {1, 2};
81+
xaipaiai = type_8 {1, 2};
82+
xafpaiai = type_7 {1.0, 2.0};
83+
xafpaiaf = type_7 {1.0, 2.0};
84+
xafpafai = type_7 {1.0, 2.0};
85+
xafpafaf = type_7 {1.0, 2.0};
86+
iaipaiai = type_8 {1, 2};
87+
iafpaiaf = type_7 {1.0, 2.0};
88+
iafpafai = type_7 {1.0, 2.0};
89+
iafpafaf = type_7 {1.0, 2.0};
90+
return;
5391
}
5492

5593
void mixed_constant_and_runtime_arguments(
@@ -117,5 +155,45 @@ void mixed_constant_and_runtime_arguments(
117155
xaip_iai = type_8 {_e91, 2};
118156
int _e95 = i;
119157
xaipai_i = type_8 {1, _e95};
158+
uint _e99 = u;
159+
xvupuai_1 = metal::uint2(_e99, 43u);
160+
uint _e102 = u;
161+
xvupaiu_1 = metal::uint2(42u, _e102);
162+
uint _e105 = u;
163+
xvuuai_1 = metal::uint2(_e105, 43u);
164+
uint _e108 = u;
165+
xvuaiu_1 = metal::uint2(42u, _e108);
166+
float _e111 = f;
167+
xmfp_faiaiai_1 = metal::float2x2(metal::float2(_e111, 2.0), metal::float2(3.0, 4.0));
168+
float _e118 = f;
169+
xmfpai_faiai_1 = metal::float2x2(metal::float2(1.0, _e118), metal::float2(3.0, 4.0));
170+
float _e125 = f;
171+
xmfpaiai_fai_1 = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(_e125, 4.0));
172+
float _e132 = f;
173+
xmfpaiaiai_f_1 = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, _e132));
174+
float _e139 = f;
175+
xaf_faf_1 = type_7 {_e139, 2.0};
176+
float _e142 = f;
177+
xafaf_f_1 = type_7 {1.0, _e142};
178+
float _e145 = f;
179+
xaf_fai = type_7 {_e145, 2.0};
180+
float _e148 = f;
181+
xafai_f = type_7 {1.0, _e148};
182+
int _e151 = i;
183+
xai_iai_1 = type_8 {_e151, 2};
184+
int _e154 = i;
185+
xaiai_i_1 = type_8 {1, _e154};
186+
float _e157 = f;
187+
xafp_faf = type_7 {_e157, 2.0};
188+
float _e160 = f;
189+
xafpaf_f = type_7 {1.0, _e160};
190+
float _e163 = f;
191+
xafp_fai = type_7 {_e163, 2.0};
192+
float _e166 = f;
193+
xafpai_f = type_7 {1.0, _e166};
194+
int _e169 = i;
195+
xaip_iai = type_8 {_e169, 2};
196+
int _e172 = i;
197+
xaipai_i = type_8 {1, _e172};
120198
return;
121199
}

naga/tests/out/spv/abstract-types-var.spvasm

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; SPIR-V
22
; Version: 1.1
33
; Generator: rspirv
4-
; Bound: 225
4+
; Bound: 269
55
OpCapability Shader
66
OpCapability Linkage
77
%1 = OpExtInstImport "GLSL.std.450"
@@ -162,6 +162,43 @@ OpDecorate %12 ArrayStride 4
162162
%89 = OpVariable %90 Function %21
163163
OpBranch %128
164164
%128 = OpLabel
165+
OpStore %85 %15
166+
OpStore %87 %18
167+
OpStore %89 %21
168+
OpStore %91 %24
169+
OpStore %92 %24
170+
OpStore %93 %24
171+
OpStore %94 %24
172+
OpStore %95 %31
173+
OpStore %97 %31
174+
OpStore %98 %31
175+
OpStore %99 %31
176+
OpStore %100 %31
177+
OpStore %101 %31
178+
OpStore %102 %31
179+
OpStore %103 %31
180+
OpStore %104 %31
181+
OpStore %105 %33
182+
OpStore %106 %34
183+
OpStore %107 %33
184+
OpStore %108 %36
185+
OpStore %109 %34
186+
OpStore %110 %34
187+
OpStore %111 %37
188+
OpStore %113 %37
189+
OpStore %114 %37
190+
OpStore %115 %37
191+
OpStore %116 %39
192+
OpStore %118 %39
193+
OpStore %119 %39
194+
OpStore %120 %37
195+
OpStore %121 %37
196+
OpStore %122 %37
197+
OpStore %123 %37
198+
OpStore %124 %39
199+
OpStore %125 %37
200+
OpStore %126 %37
201+
OpStore %127 %37
165202
OpReturn
166203
OpFunctionEnd
167204
%130 = OpFunction %2 None %84
@@ -255,5 +292,69 @@ OpStore %176 %222
255292
%223 = OpLoad %3 %134
256293
%224 = OpCompositeConstruct %12 %32 %223
257294
OpStore %178 %224
295+
%225 = OpLoad %5 %131
296+
%226 = OpCompositeConstruct %6 %225 %23
297+
OpStore %140 %226
298+
%227 = OpLoad %5 %131
299+
%228 = OpCompositeConstruct %6 %22 %227
300+
OpStore %142 %228
301+
%229 = OpLoad %5 %131
302+
%230 = OpCompositeConstruct %6 %229 %23
303+
OpStore %144 %230
304+
%231 = OpLoad %5 %131
305+
%232 = OpCompositeConstruct %6 %22 %231
306+
OpStore %146 %232
307+
%233 = OpLoad %7 %137
308+
%234 = OpCompositeConstruct %8 %233 %26
309+
%235 = OpCompositeConstruct %9 %234 %30
310+
OpStore %148 %235
311+
%236 = OpLoad %7 %137
312+
%237 = OpCompositeConstruct %8 %25 %236
313+
%238 = OpCompositeConstruct %9 %237 %30
314+
OpStore %150 %238
315+
%239 = OpLoad %7 %137
316+
%240 = OpCompositeConstruct %8 %239 %29
317+
%241 = OpCompositeConstruct %9 %27 %240
318+
OpStore %152 %241
319+
%242 = OpLoad %7 %137
320+
%243 = OpCompositeConstruct %8 %28 %242
321+
%244 = OpCompositeConstruct %9 %27 %243
322+
OpStore %154 %244
323+
%245 = OpLoad %7 %137
324+
%246 = OpCompositeConstruct %10 %245 %26
325+
OpStore %156 %246
326+
%247 = OpLoad %7 %137
327+
%248 = OpCompositeConstruct %10 %25 %247
328+
OpStore %158 %248
329+
%249 = OpLoad %7 %137
330+
%250 = OpCompositeConstruct %10 %249 %26
331+
OpStore %160 %250
332+
%251 = OpLoad %7 %137
333+
%252 = OpCompositeConstruct %10 %25 %251
334+
OpStore %162 %252
335+
%253 = OpLoad %3 %134
336+
%254 = OpCompositeConstruct %12 %253 %38
337+
OpStore %164 %254
338+
%255 = OpLoad %3 %134
339+
%256 = OpCompositeConstruct %12 %32 %255
340+
OpStore %166 %256
341+
%257 = OpLoad %7 %137
342+
%258 = OpCompositeConstruct %10 %257 %26
343+
OpStore %168 %258
344+
%259 = OpLoad %7 %137
345+
%260 = OpCompositeConstruct %10 %25 %259
346+
OpStore %170 %260
347+
%261 = OpLoad %7 %137
348+
%262 = OpCompositeConstruct %10 %261 %26
349+
OpStore %172 %262
350+
%263 = OpLoad %7 %137
351+
%264 = OpCompositeConstruct %10 %25 %263
352+
OpStore %174 %264
353+
%265 = OpLoad %3 %134
354+
%266 = OpCompositeConstruct %12 %265 %38
355+
OpStore %176 %266
356+
%267 = OpLoad %3 %134
357+
%268 = OpCompositeConstruct %12 %32 %267
358+
OpStore %178 %268
258359
OpReturn
259360
OpFunctionEnd

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

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,44 @@ fn all_constant_arguments() {
7474
var iafpafai: array<f32, 2> = array<f32, 2>(1f, 2f);
7575
var iafpafaf: array<f32, 2> = array<f32, 2>(1f, 2f);
7676

77+
xvipaiai = vec2<i32>(42i, 43i);
78+
xvupaiai = vec2<u32>(44u, 45u);
79+
xvfpaiai = vec2<f32>(46f, 47f);
80+
xvupuai = vec2<u32>(42u, 43u);
81+
xvupaiu = vec2<u32>(42u, 43u);
82+
xvuuai = vec2<u32>(42u, 43u);
83+
xvuaiu = vec2<u32>(42u, 43u);
84+
xmfpaiaiaiai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
85+
xmfpafaiaiai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
86+
xmfpaiafaiai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
87+
xmfpaiaiafai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
88+
xmfpaiaiaiaf = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
89+
xmfp_faiaiai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
90+
xmfpai_faiai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
91+
xmfpaiai_fai = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
92+
xmfpaiaiai_f = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, 4f));
93+
xvispai = vec2(1i);
94+
xvfspaf = vec2(1f);
95+
xvis_ai = vec2(1i);
96+
xvus_ai = vec2(1u);
97+
xvfs_ai = vec2(1f);
98+
xvfs_af = vec2(1f);
99+
xafafaf = array<f32, 2>(1f, 2f);
100+
xaf_faf = array<f32, 2>(1f, 2f);
101+
xafaf_f = array<f32, 2>(1f, 2f);
102+
xafaiai = array<f32, 2>(1f, 2f);
103+
xai_iai = array<i32, 2>(1i, 2i);
104+
xaiai_i = array<i32, 2>(1i, 2i);
105+
xaipaiai = array<i32, 2>(1i, 2i);
106+
xafpaiai = array<f32, 2>(1f, 2f);
107+
xafpaiaf = array<f32, 2>(1f, 2f);
108+
xafpafai = array<f32, 2>(1f, 2f);
109+
xafpafaf = array<f32, 2>(1f, 2f);
110+
iaipaiai = array<i32, 2>(1i, 2i);
111+
iafpaiaf = array<f32, 2>(1f, 2f);
112+
iafpafai = array<f32, 2>(1f, 2f);
113+
iafpafaf = array<f32, 2>(1f, 2f);
114+
return;
77115
}
78116

79117
fn mixed_constant_and_runtime_arguments() {
@@ -141,6 +179,46 @@ fn mixed_constant_and_runtime_arguments() {
141179
xaip_iai = array<i32, 2>(_e91, 2i);
142180
let _e95 = i;
143181
xaipai_i = array<i32, 2>(1i, _e95);
182+
let _e99 = u;
183+
xvupuai_1 = vec2<u32>(_e99, 43u);
184+
let _e102 = u;
185+
xvupaiu_1 = vec2<u32>(42u, _e102);
186+
let _e105 = u;
187+
xvuuai_1 = vec2<u32>(_e105, 43u);
188+
let _e108 = u;
189+
xvuaiu_1 = vec2<u32>(42u, _e108);
190+
let _e111 = f;
191+
xmfp_faiaiai_1 = mat2x2<f32>(vec2<f32>(_e111, 2f), vec2<f32>(3f, 4f));
192+
let _e118 = f;
193+
xmfpai_faiai_1 = mat2x2<f32>(vec2<f32>(1f, _e118), vec2<f32>(3f, 4f));
194+
let _e125 = f;
195+
xmfpaiai_fai_1 = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(_e125, 4f));
196+
let _e132 = f;
197+
xmfpaiaiai_f_1 = mat2x2<f32>(vec2<f32>(1f, 2f), vec2<f32>(3f, _e132));
198+
let _e139 = f;
199+
xaf_faf_1 = array<f32, 2>(_e139, 2f);
200+
let _e142 = f;
201+
xafaf_f_1 = array<f32, 2>(1f, _e142);
202+
let _e145 = f;
203+
xaf_fai = array<f32, 2>(_e145, 2f);
204+
let _e148 = f;
205+
xafai_f = array<f32, 2>(1f, _e148);
206+
let _e151 = i;
207+
xai_iai_1 = array<i32, 2>(_e151, 2i);
208+
let _e154 = i;
209+
xaiai_i_1 = array<i32, 2>(1i, _e154);
210+
let _e157 = f;
211+
xafp_faf = array<f32, 2>(_e157, 2f);
212+
let _e160 = f;
213+
xafpaf_f = array<f32, 2>(1f, _e160);
214+
let _e163 = f;
215+
xafp_fai = array<f32, 2>(_e163, 2f);
216+
let _e166 = f;
217+
xafpai_f = array<f32, 2>(1f, _e166);
218+
let _e169 = i;
219+
xaip_iai = array<i32, 2>(_e169, 2i);
220+
let _e172 = i;
221+
xaipai_i = array<i32, 2>(1i, _e172);
144222
return;
145223
}
146224

0 commit comments

Comments
 (0)