Skip to content

Commit 6b55a0b

Browse files
committed
add some tests for common builtins
1 parent e2b5cbe commit 6b55a0b

7 files changed

+363
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
targets = "SPIRV | METAL | GLSL | WGSL"
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
fn f() {
2+
// For calls that return abstract types, we can't write the type we
3+
// actually expect, but we can at least require an automatic
4+
// conversion.
5+
//
6+
// Error cases are covered in `wgsl_errors::more_inconsistent_type`.
7+
8+
// start
9+
var clamp_aiaiai: i32 = clamp(1, 1, 1);
10+
var clamp_aiaiaf: f32 = clamp(1, 1, 1.0);
11+
var clamp_aiaii: i32 = clamp(1, 1, 1i);
12+
var clamp_aiaif: f32 = clamp(1, 1, 1f);
13+
var clamp_aiafai: f32 = clamp(1, 1.0, 1);
14+
var clamp_aiafaf: f32 = clamp(1, 1.0, 1.0);
15+
//var clamp_aiafi: f32 = clamp(1, 1.0, 1i); error
16+
var clamp_aiaff: f32 = clamp(1, 1.0, 1f);
17+
var clamp_aiiai: i32 = clamp(1, 1i, 1);
18+
//var clamp_aiiaf: f32 = clamp(1, 1i, 1.0); error
19+
var clamp_aiii: i32 = clamp(1, 1i, 1i);
20+
//var clamp_aiif: f32 = clamp(1, 1i, 1f); error
21+
var clamp_aifai: f32 = clamp(1, 1f, 1);
22+
var clamp_aifaf: f32 = clamp(1, 1f, 1.0);
23+
//var clamp_aifi: f32 = clamp(1, 1f, 1i); error
24+
var clamp_aiff: f32 = clamp(1, 1f, 1f);
25+
var clamp_afaiai: f32 = clamp(1.0, 1, 1);
26+
var clamp_afaiaf: f32 = clamp(1.0, 1, 1.0);
27+
//var clamp_afaii: f32 = clamp(1.0, 1, 1i); error
28+
var clamp_afaif: f32 = clamp(1.0, 1, 1f);
29+
var clamp_afafai: f32 = clamp(1.0, 1.0, 1);
30+
var clamp_afafaf: f32 = clamp(1.0, 1.0, 1.0);
31+
//var clamp_afafi: f32 = clamp(1.0, 1.0, 1i); error
32+
var clamp_afaff: f32 = clamp(1.0, 1.0, 1f);
33+
//var clamp_afiai: f32 = clamp(1.0, 1i, 1); error
34+
//var clamp_afiaf: f32 = clamp(1.0, 1i, 1.0); error
35+
//var clamp_afii: f32 = clamp(1.0, 1i, 1i); error
36+
//var clamp_afif: f32 = clamp(1.0, 1i, 1f); error
37+
var clamp_affai: f32 = clamp(1.0, 1f, 1);
38+
var clamp_affaf: f32 = clamp(1.0, 1f, 1.0);
39+
//var clamp_affi: f32 = clamp(1.0, 1f, 1i); error
40+
var clamp_afff: f32 = clamp(1.0, 1f, 1f);
41+
var clamp_iaiai: i32 = clamp(1i, 1, 1);
42+
//var clamp_iaiaf: f32 = clamp(1i, 1, 1.0); error
43+
var clamp_iaii: i32 = clamp(1i, 1, 1i);
44+
//var clamp_iaif: f32 = clamp(1i, 1, 1f); error
45+
//var clamp_iafai: f32 = clamp(1i, 1.0, 1); error
46+
//var clamp_iafaf: f32 = clamp(1i, 1.0, 1.0); error
47+
//var clamp_iafi: f32 = clamp(1i, 1.0, 1i); error
48+
//var clamp_iaff: f32 = clamp(1i, 1.0, 1f); error
49+
var clamp_iiai: i32 = clamp(1i, 1i, 1);
50+
//var clamp_iiaf: f32 = clamp(1i, 1i, 1.0); error
51+
var clamp_iii: i32 = clamp(1i, 1i, 1i);
52+
//var clamp_iif: f32 = clamp(1i, 1i, 1f); error
53+
//var clamp_ifai: f32 = clamp(1i, 1f, 1); error
54+
//var clamp_ifaf: f32 = clamp(1i, 1f, 1.0); error
55+
//var clamp_ifi: f32 = clamp(1i, 1f, 1i); error
56+
//var clamp_iff: f32 = clamp(1i, 1f, 1f); error
57+
var clamp_faiai: f32 = clamp(1f, 1, 1);
58+
var clamp_faiaf: f32 = clamp(1f, 1, 1.0);
59+
//var clamp_faii: f32 = clamp(1f, 1, 1i); error
60+
var clamp_faif: f32 = clamp(1f, 1, 1f);
61+
var clamp_fafai: f32 = clamp(1f, 1.0, 1);
62+
var clamp_fafaf: f32 = clamp(1f, 1.0, 1.0);
63+
//var clamp_fafi: f32 = clamp(1f, 1.0, 1i); error
64+
var clamp_faff: f32 = clamp(1f, 1.0, 1f);
65+
//var clamp_fiai: f32 = clamp(1f, 1i, 1); error
66+
//var clamp_fiaf: f32 = clamp(1f, 1i, 1.0); error
67+
//var clamp_fii: f32 = clamp(1f, 1i, 1i); error
68+
//var clamp_fif: f32 = clamp(1f, 1i, 1f); error
69+
var clamp_ffai: f32 = clamp(1f, 1f, 1);
70+
var clamp_ffaf: f32 = clamp(1f, 1f, 1.0);
71+
//var clamp_ffi: f32 = clamp(1f, 1f, 1i); error
72+
var clamp_fff: f32 = clamp(1f, 1f, 1f);
73+
// end
74+
75+
76+
var min_aiai: i32 = min(1, 1);
77+
var min_aiaf: f32 = min(1, 1.0);
78+
var min_aii: i32 = min(1, 1i);
79+
var min_aif: f32 = min(1, 1f);
80+
var min_afai: f32 = min(1.0, 1);
81+
var min_afaf: f32 = min(1.0, 1.0);
82+
//var min_afi: f32 = min(1.0, 1i); error
83+
var min_aff: f32 = min(1.0, 1f);
84+
var min_iai: i32 = min(1i, 1);
85+
//var min_iaf: f32 = min(1i, 1.0); error
86+
var min_ii: i32 = min(1i, 1i);
87+
//var min_if: f32 = min(1i, 1f); error
88+
var min_fai: f32 = min(1f, 1);
89+
var min_faf: f32 = min(1f, 1.0);
90+
//var min_fi: f32 = min(1f, 1i); error
91+
var min_ff: f32 = min(1f, 1f);
92+
93+
var pow_aiai = pow(1, 1);
94+
var pow_aiaf = pow(1, 1.0);
95+
var pow_aif = pow(1, 1f);
96+
var pow_afai = pow(1.0, 1);
97+
var pow_afaf = pow(1.0, 1.0);
98+
var pow_aff = pow(1.0, 1f);
99+
var pow_fai = pow(1f, 1);
100+
var pow_faf = pow(1f, 1.0);
101+
var pow_ff = pow(1f, 1f);
102+
}

naga/tests/naga/wgsl_errors.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3269,3 +3269,58 @@ fn inconsistent_type() {
32693269
"#,
32703270
);
32713271
}
3272+
3273+
#[test]
3274+
fn more_inconsistent_type() {
3275+
#[track_caller]
3276+
fn variant(call: &str) {
3277+
let input = format!(
3278+
r#"
3279+
fn f() {{ var x = {call}; }}
3280+
"#
3281+
);
3282+
let result = naga::front::wgsl::parse_str(&input);
3283+
let Err(ref err) = result else {
3284+
panic!("expected ParseError, got {result:#?}");
3285+
};
3286+
if !err.message().contains("inconsistent type") {
3287+
panic!("expected 'inconsistent type' error, got {result:#?}");
3288+
}
3289+
}
3290+
3291+
variant("min(1.0, 1i)");
3292+
variant("min(1i, 1.0)");
3293+
variant("min(1i, 1f)");
3294+
variant("min(1f, 1i)");
3295+
3296+
variant("clamp(1, 1.0, 1i)");
3297+
variant("clamp(1, 1i, 1.0)");
3298+
variant("clamp(1, 1i, 1f)");
3299+
variant("clamp(1, 1f, 1i)");
3300+
variant("clamp(1.0, 1, 1i)");
3301+
variant("clamp(1.0, 1.0, 1i)");
3302+
variant("clamp(1.0, 1i, 1)");
3303+
variant("clamp(1.0, 1i, 1.0)");
3304+
variant("clamp(1.0, 1i, 1i)");
3305+
variant("clamp(1.0, 1i, 1f)");
3306+
variant("clamp(1.0, 1f, 1i)");
3307+
variant("clamp(1i, 1, 1.0)");
3308+
variant("clamp(1i, 1, 1f)");
3309+
variant("clamp(1i, 1.0, 1)");
3310+
variant("clamp(1i, 1.0, 1.0)");
3311+
variant("clamp(1i, 1.0, 1i)");
3312+
variant("clamp(1i, 1.0, 1f)");
3313+
variant("clamp(1i, 1i, 1.0)");
3314+
variant("clamp(1i, 1i, 1f)");
3315+
variant("clamp(1i, 1f, 1)");
3316+
variant("clamp(1i, 1f, 1.0)");
3317+
variant("clamp(1i, 1f, 1i)");
3318+
variant("clamp(1i, 1f, 1f)");
3319+
variant("clamp(1f, 1, 1i)");
3320+
variant("clamp(1f, 1.0, 1i)");
3321+
variant("clamp(1f, 1i, 1)");
3322+
variant("clamp(1f, 1i, 1.0)");
3323+
variant("clamp(1f, 1i, 1i)");
3324+
variant("clamp(1f, 1i, 1f)");
3325+
variant("clamp(1f, 1f, 1i)");
3326+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// language: metal1.0
2+
#include <metal_stdlib>
3+
#include <simd/simd.h>
4+
5+
using metal::uint;
6+
7+
8+
void f(
9+
) {
10+
int clamp_aiaiai = 1;
11+
float clamp_aiaiaf = 1.0;
12+
int clamp_aiaii = 1;
13+
float clamp_aiaif = 1.0;
14+
float clamp_aiafai = 1.0;
15+
float clamp_aiafaf = 1.0;
16+
float clamp_aiaff = 1.0;
17+
int clamp_aiiai = 1;
18+
int clamp_aiii = 1;
19+
float clamp_aifai = 1.0;
20+
float clamp_aifaf = 1.0;
21+
float clamp_aiff = 1.0;
22+
float clamp_afaiai = 1.0;
23+
float clamp_afaiaf = 1.0;
24+
float clamp_afaif = 1.0;
25+
float clamp_afafai = 1.0;
26+
float clamp_afafaf = 1.0;
27+
float clamp_afaff = 1.0;
28+
float clamp_affai = 1.0;
29+
float clamp_affaf = 1.0;
30+
float clamp_afff = 1.0;
31+
int clamp_iaiai = 1;
32+
int clamp_iaii = 1;
33+
int clamp_iiai = 1;
34+
int clamp_iii = 1;
35+
float clamp_faiai = 1.0;
36+
float clamp_faiaf = 1.0;
37+
float clamp_faif = 1.0;
38+
float clamp_fafai = 1.0;
39+
float clamp_fafaf = 1.0;
40+
float clamp_faff = 1.0;
41+
float clamp_ffai = 1.0;
42+
float clamp_ffaf = 1.0;
43+
float clamp_fff = 1.0;
44+
int min_aiai = 1;
45+
float min_aiaf = 1.0;
46+
int min_aii = 1;
47+
float min_aif = 1.0;
48+
float min_afai = 1.0;
49+
float min_afaf = 1.0;
50+
float min_aff = 1.0;
51+
int min_iai = 1;
52+
int min_ii = 1;
53+
float min_fai = 1.0;
54+
float min_faf = 1.0;
55+
float min_ff = 1.0;
56+
float pow_aiai = 1.0;
57+
float pow_aiaf = 1.0;
58+
float pow_aif = 1.0;
59+
float pow_afai = 1.0;
60+
float pow_afaf = 1.0;
61+
float pow_aff = 1.0;
62+
float pow_fai = 1.0;
63+
float pow_faf = 1.0;
64+
float pow_ff = 1.0;
65+
return;
66+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
; SPIR-V
2+
; Version: 1.1
3+
; Generator: rspirv
4+
; Bound: 68
5+
OpCapability Shader
6+
OpCapability Linkage
7+
%1 = OpExtInstImport "GLSL.std.450"
8+
OpMemoryModel Logical GLSL450
9+
%2 = OpTypeVoid
10+
%3 = OpTypeInt 32 1
11+
%4 = OpTypeFloat 32
12+
%7 = OpTypeFunction %2
13+
%8 = OpConstant %3 1
14+
%9 = OpConstant %4 1.0
15+
%11 = OpTypePointer Function %3
16+
%13 = OpTypePointer Function %4
17+
%6 = OpFunction %2 None %7
18+
%5 = OpLabel
19+
%66 = OpVariable %13 Function %9
20+
%63 = OpVariable %13 Function %9
21+
%60 = OpVariable %13 Function %9
22+
%57 = OpVariable %13 Function %9
23+
%54 = OpVariable %11 Function %8
24+
%51 = OpVariable %13 Function %9
25+
%48 = OpVariable %11 Function %8
26+
%45 = OpVariable %13 Function %9
27+
%42 = OpVariable %13 Function %9
28+
%39 = OpVariable %13 Function %9
29+
%36 = OpVariable %11 Function %8
30+
%33 = OpVariable %11 Function %8
31+
%30 = OpVariable %13 Function %9
32+
%27 = OpVariable %13 Function %9
33+
%24 = OpVariable %13 Function %9
34+
%21 = OpVariable %13 Function %9
35+
%18 = OpVariable %13 Function %9
36+
%15 = OpVariable %13 Function %9
37+
%10 = OpVariable %11 Function %8
38+
%64 = OpVariable %13 Function %9
39+
%61 = OpVariable %13 Function %9
40+
%58 = OpVariable %13 Function %9
41+
%55 = OpVariable %13 Function %9
42+
%52 = OpVariable %13 Function %9
43+
%49 = OpVariable %13 Function %9
44+
%46 = OpVariable %11 Function %8
45+
%43 = OpVariable %13 Function %9
46+
%40 = OpVariable %13 Function %9
47+
%37 = OpVariable %13 Function %9
48+
%34 = OpVariable %11 Function %8
49+
%31 = OpVariable %13 Function %9
50+
%28 = OpVariable %13 Function %9
51+
%25 = OpVariable %13 Function %9
52+
%22 = OpVariable %13 Function %9
53+
%19 = OpVariable %11 Function %8
54+
%16 = OpVariable %13 Function %9
55+
%12 = OpVariable %13 Function %9
56+
%65 = OpVariable %13 Function %9
57+
%62 = OpVariable %13 Function %9
58+
%59 = OpVariable %13 Function %9
59+
%56 = OpVariable %13 Function %9
60+
%53 = OpVariable %11 Function %8
61+
%50 = OpVariable %13 Function %9
62+
%47 = OpVariable %13 Function %9
63+
%44 = OpVariable %13 Function %9
64+
%41 = OpVariable %13 Function %9
65+
%38 = OpVariable %13 Function %9
66+
%35 = OpVariable %11 Function %8
67+
%32 = OpVariable %13 Function %9
68+
%29 = OpVariable %13 Function %9
69+
%26 = OpVariable %13 Function %9
70+
%23 = OpVariable %13 Function %9
71+
%20 = OpVariable %11 Function %8
72+
%17 = OpVariable %13 Function %9
73+
%14 = OpVariable %11 Function %8
74+
OpBranch %67
75+
%67 = OpLabel
76+
OpReturn
77+
OpFunctionEnd
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
fn f() {
2+
var clamp_aiaiai: i32 = 1i;
3+
var clamp_aiaiaf: f32 = 1f;
4+
var clamp_aiaii: i32 = 1i;
5+
var clamp_aiaif: f32 = 1f;
6+
var clamp_aiafai: f32 = 1f;
7+
var clamp_aiafaf: f32 = 1f;
8+
var clamp_aiaff: f32 = 1f;
9+
var clamp_aiiai: i32 = 1i;
10+
var clamp_aiii: i32 = 1i;
11+
var clamp_aifai: f32 = 1f;
12+
var clamp_aifaf: f32 = 1f;
13+
var clamp_aiff: f32 = 1f;
14+
var clamp_afaiai: f32 = 1f;
15+
var clamp_afaiaf: f32 = 1f;
16+
var clamp_afaif: f32 = 1f;
17+
var clamp_afafai: f32 = 1f;
18+
var clamp_afafaf: f32 = 1f;
19+
var clamp_afaff: f32 = 1f;
20+
var clamp_affai: f32 = 1f;
21+
var clamp_affaf: f32 = 1f;
22+
var clamp_afff: f32 = 1f;
23+
var clamp_iaiai: i32 = 1i;
24+
var clamp_iaii: i32 = 1i;
25+
var clamp_iiai: i32 = 1i;
26+
var clamp_iii: i32 = 1i;
27+
var clamp_faiai: f32 = 1f;
28+
var clamp_faiaf: f32 = 1f;
29+
var clamp_faif: f32 = 1f;
30+
var clamp_fafai: f32 = 1f;
31+
var clamp_fafaf: f32 = 1f;
32+
var clamp_faff: f32 = 1f;
33+
var clamp_ffai: f32 = 1f;
34+
var clamp_ffaf: f32 = 1f;
35+
var clamp_fff: f32 = 1f;
36+
var min_aiai: i32 = 1i;
37+
var min_aiaf: f32 = 1f;
38+
var min_aii: i32 = 1i;
39+
var min_aif: f32 = 1f;
40+
var min_afai: f32 = 1f;
41+
var min_afaf: f32 = 1f;
42+
var min_aff: f32 = 1f;
43+
var min_iai: i32 = 1i;
44+
var min_ii: i32 = 1i;
45+
var min_fai: f32 = 1f;
46+
var min_faf: f32 = 1f;
47+
var min_ff: f32 = 1f;
48+
var pow_aiai: f32 = 1f;
49+
var pow_aiaf: f32 = 1f;
50+
var pow_aif: f32 = 1f;
51+
var pow_afai: f32 = 1f;
52+
var pow_afaf: f32 = 1f;
53+
var pow_aff: f32 = 1f;
54+
var pow_fai: f32 = 1f;
55+
var pow_faf: f32 = 1f;
56+
var pow_ff: f32 = 1f;
57+
58+
return;
59+
}
60+

typos.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ extend-exclude = [
66
# spirv-asm isn't real source code
77
'*.spvasm',
88
'docs/big-picture.xml',
9+
# This test has weird pattern-derived variable names.
10+
'naga/tests/in/wgsl/abstract-types-builtins.wgsl',
911
]
1012

1113
# Corrections take the form of a key/value pair. The key is the incorrect word

0 commit comments

Comments
 (0)