Skip to content

Commit 224d480

Browse files
Andrew Savonichevasavonic
authored andcommitted
[dxsa][mlir] Port LIT tests from dxilconv
dxilconv tool has a LIT test suite that covers most instructions. These original tests are DXBC container binaries, but the current mlir-translate tool cannot translate from them directly - it needs only the content of SHEX section. The tests are generated by extracting shader binaries from DXBC containers. LIT checks are auto-generated by MLIR utils/generate-test-checks.py script. The checks reflect the current state of the compiler, and it is expected they will change once we enable more instructions. Tests in hlsl directory are from: https://github.com/microsoft/DirectXShaderCompiler/tree/main/projects/dxilconv/test/dxbc2dxil Tests in asm directory are from: https://github.com/microsoft/DirectXShaderCompiler/tree/main/projects/dxilconv/test/dxbc2dxil-asm
1 parent c212cc7 commit 224d480

266 files changed

Lines changed: 3880 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/call2.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.dcl_global_flags <refactoringAllowed>
6+
// CHECK: dxsa.dcl_input_ps linear v<0, <x>>
7+
// CHECK: dxsa.dcl_input_ps constant v<1, <x, y, z>>
8+
// CHECK: dxsa.dcl_output o<0, <x>>
9+
// CHECK: dxsa.dcl_temps 1
10+
// CHECK: dxsa.mov r<0, <x, y, z>>, v<1, <x, y, z, z>>
11+
// CHECK: dxsa.call label<0>
12+
// CHECK: dxsa.callc_nz r<0, <x>>, label<0>
13+
// CHECK: %[[INDEX_0:.*]] = dxsa.index.imm {imm = 1 : i32}
14+
// CHECK: %[[OPERAND_0:.*]] = dxsa.operand %[[INDEX_0]] {num_components = 4 : i32, one = 0 : i32, type = 1 : i32}
15+
// CHECK: dxsa.instruction "switch" %[[OPERAND_0]]
16+
// CHECK: dxsa.case l(0x1)
17+
// CHECK: dxsa.call label<2>
18+
// CHECK: dxsa.callc_nz r<0, <y>>, label<1>
19+
// CHECK: dxsa.break
20+
// CHECK: dxsa.default
21+
// CHECK: dxsa.callc_nz r<0, <z>>, label<2>
22+
// CHECK: dxsa.break
23+
// CHECK: dxsa.case l(0x2)
24+
// CHECK: dxsa.break
25+
// CHECK: dxsa.endswitch
26+
// CHECK: dxsa.add o<0, <x>>, r<0, <x>>, l(0x3F800000)
27+
// CHECK: dxsa.ret
28+
// CHECK: dxsa.label label<0>
29+
// CHECK: dxsa.mov r<0, <x>>, l(0x40A00000)
30+
// CHECK: dxsa.ret
31+
// CHECK: dxsa.label label<1>
32+
// CHECK: dxsa.mov r<0, <x>>, v<0, <x>>
33+
// CHECK: dxsa.ret
34+
// CHECK: dxsa.label label<2>
35+
// CHECK: dxsa.mov r<0, <x>>, l(0x40400000)
36+
// CHECK: dxsa.ret
37+

mlir/test/Target/DXSA/asm/cs3.test

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/cs3.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.dcl_global_flags <refactoringAllowed>
6+
// CHECK: dxsa.dcl_constant_buffer <id = 0, size = 1>, <immediateIndexed>
7+
// CHECK: dxsa.dcl_input vThreadIDInGroup<<x, y, z>>
8+
// CHECK: dxsa.dcl_temps 3
9+
// CHECK: dxsa.dcl_tgsm_raw g<0>, 1024
10+
// CHECK: dxsa.dcl_thread_group <x = 4, y = 2, z = 3>
11+
// CHECK: dxsa.ishl r<0, <x>>, vThreadIDInGroup<<z>>, l(0x2)
12+
// CHECK: %[[INDEX_0:.*]] = dxsa.index.imm {imm = 0 : i32}
13+
// CHECK: %[[OPERAND_0:.*]] = dxsa.operand %[[INDEX_0]] {mask = 48 : i32, num_components = 4 : i32, type = 31 : i32}
14+
// CHECK: %[[INDEX_1:.*]] = dxsa.index.imm {imm = 0 : i32}
15+
// CHECK: %[[OPERAND_1:.*]] = dxsa.operand %[[INDEX_1]] {num_components = 4 : i32, one = 0 : i32, type = 0 : i32}
16+
// CHECK: %[[INDEX_2:.*]] = dxsa.index.imm {imm = 0 : i32}
17+
// CHECK: %[[INDEX_3:.*]] = dxsa.index.imm {imm = 0 : i32}
18+
// CHECK: %[[OPERAND_2:.*]] = dxsa.operand %[[INDEX_2]], %[[INDEX_3]] {num_components = 4 : i32, swizzle = dense<[3, 2, 1, 0]> : vector<4xi32>, type = 8 : i32}
19+
// CHECK: dxsa.instruction "store_raw" %[[OPERAND_0]], %[[OPERAND_1]], %[[OPERAND_2]]
20+
// CHECK: dxsa.sync <tgsm>
21+
// CHECK: dxsa.sync <uav_group>
22+
// CHECK: dxsa.sync <uav_global>
23+
// CHECK: dxsa.sync <tgsm|threads>
24+
// CHECK: dxsa.sync <uav_group|threads>
25+
// CHECK: dxsa.sync <uav_global|threads>
26+
// CHECK: dxsa.sync <uav_group|tgsm>
27+
// CHECK: dxsa.sync <uav_global|tgsm>
28+
// CHECK: dxsa.sync <uav_group|tgsm|threads>
29+
// CHECK: dxsa.sync <uav_global|tgsm|threads>
30+
// CHECK: %[[INDEX_4:.*]] = dxsa.index.imm {imm = 0 : i32}
31+
// CHECK: %[[OPERAND_3:.*]] = dxsa.operand %[[INDEX_4]] {mask = 80 : i32, num_components = 4 : i32, type = 0 : i32}
32+
// CHECK: %[[INDEX_5:.*]] = dxsa.index.imm {imm = 0 : i32}
33+
// CHECK: %[[OPERAND_4:.*]] = dxsa.operand %[[INDEX_5]] {num_components = 4 : i32, one = 0 : i32, type = 0 : i32}
34+
// CHECK: %[[INDEX_6:.*]] = dxsa.index.imm {imm = 0 : i32}
35+
// CHECK: %[[OPERAND_5:.*]] = dxsa.operand %[[INDEX_6]] {num_components = 4 : i32, swizzle = dense<[2, 0, 3, 1]> : vector<4xi32>, type = 31 : i32}
36+
// CHECK: dxsa.instruction "ld_raw" %[[OPERAND_3]], %[[OPERAND_4]], %[[OPERAND_5]]
37+
// CHECK: dxsa.imm_atomic_iadd r<2, <x>>, g<0>, r<1, <x, y, x, x>>, vThreadIDInGroup<<x>>
38+
// CHECK: dxsa.atomic_or g<0>, r<1, <x, y, x, x>>, vThreadIDInGroup<<x>>
39+
// CHECK: dxsa.atomic_cmp_store g<0>, r<1, <x, y, x, x>>, vThreadIDInGroup<<y>>, vThreadIDInGroup<<x>>
40+
// CHECK: dxsa.imm_atomic_cmp_exch r<1, <x>>, g<0>, r<1, <x, y, x, x>>, vThreadIDInGroup<<y>>, vThreadIDInGroup<<x>>
41+
// CHECK: dxsa.ret
42+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/cyclecounter.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.dcl_temps 1
6+
// CHECK: dxsa.dcl_output o<0>
7+
// CHECK: dxsa.dcl_input cycleCounter<<x>>
8+
// CHECK: dxsa.mov r<0>, l(0x0)
9+
// CHECK: dxsa.mov r<0, <z>>, cycleCounter<<x>>
10+
// CHECK: dxsa.mov o<0>, r<0>
11+

mlir/test/Target/DXSA/asm/hs3.test

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/hs3.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.hs_decls
6+
// CHECK: dxsa.dcl_input_control_point_count 4
7+
// CHECK: dxsa.dcl_output_control_point_count 32
8+
// CHECK: dxsa.dcl_tessellator_domain domain_quad
9+
// CHECK: dxsa.dcl_tessellator_partitioning partitioning_fractional_odd
10+
// CHECK: dxsa.dcl_tessellator_output_primitive output_triangle_cw
11+
// CHECK: dxsa.dcl_hs_max_tessfactor 6.400000e+01
12+
// CHECK: dxsa.hs_control_point_phase
13+
// CHECK: dxsa.dcl_input v<[4, 0]>
14+
// CHECK: dxsa.dcl_input v<[4, 1], <x, y>>
15+
// CHECK: dxsa.dcl_input v<[4, 2], <x, y, z>>
16+
// CHECK: dxsa.dcl_input vOutputControlPointID<none>
17+
// CHECK: dxsa.dcl_input vPrim<none>
18+
// CHECK: dxsa.dcl_output o<0>
19+
// CHECK: dxsa.dcl_output o<1, <x, y>>
20+
// CHECK: dxsa.dcl_output o<2, <x, y, z>>
21+
// CHECK: dxsa.dcl_temps 1
22+
// CHECK: dxsa.udiv null, r<0, <x>>, vOutputControlPointID, l(0x4)
23+
// CHECK: dxsa.mov o<0>, v<[r<0, <x>>, 0]>
24+
// CHECK: dxsa.mov o<1, <x, y>>, v<[r<0, <x>>, 1], <x, y, x, x>>
25+
// CHECK: dxsa.mov o<2, <x, y, z>>, v<[r<0, <x>>, 2], <x, y, z, x>>
26+
// CHECK: dxsa.hs_fork_phase
27+
// CHECK: dxsa.dcl_input vicp<[4, 0]>
28+
// CHECK: dxsa.dcl_input vicp<[4, 1], <x, y>>
29+
// CHECK: dxsa.dcl_input vicp<[4, 2], <x, y, z>>
30+
// CHECK: dxsa.dcl_input vocp<[32, 0]>
31+
// CHECK: dxsa.dcl_input vocp<[32, 1], <x, y>>
32+
// CHECK: dxsa.dcl_input vocp<[32, 2], <x, y, z>>
33+
// CHECK: dxsa.dcl_hs_fork_phase_instance_count 4
34+
// CHECK: dxsa.dcl_input vForkInstanceID<none>
35+
// CHECK: dxsa.dcl_input vPrim<none>
36+
// CHECK: dxsa.dcl_index_range o<0>, 4
37+
// CHECK: dxsa.dcl_temps 1
38+
// CHECK: dxsa.dcl_indexable_temp x<0>[4], 1
39+
// CHECK: dxsa.dcl_output_siv o<0, <x>>, <finalQuadUeq0EdgeTessFactor>
40+
// CHECK: dxsa.dcl_output_siv o<1, <x>>, <finalQuadVeq0EdgeTessFactor>
41+
// CHECK: dxsa.dcl_output_siv o<2, <x>>, <finalQuadUeq1EdgeTessFactor>
42+
// CHECK: dxsa.dcl_output_siv o<3, <x>>, <finalQuadVeq1EdgeTessFactor>
43+
// CHECK: dxsa.mov x<[0, 0], <x>>, l(0x40000000)
44+
// CHECK: dxsa.mov x<[0, 1], <x>>, l(0x40800000)
45+
// CHECK: dxsa.mov x<[0, 2], <x>>, l(0x41700000)
46+
// CHECK: dxsa.mov x<[0, 3], <x>>, l(0x40C00000)
47+
// CHECK: dxsa.mov r<0, <x>>, vForkInstanceID<none>
48+
// CHECK: dxsa.mov o<r<0, <x>>, <x>>, x<[0, r<0, <x>>], <x>>
49+
// CHECK: dxsa.hs_fork_phase
50+
// CHECK: dxsa.dcl_input vicp<[4, 0]>
51+
// CHECK: dxsa.dcl_input vicp<[4, 1], <x, y>>
52+
// CHECK: dxsa.dcl_input vicp<[4, 2], <x, y, z>>
53+
// CHECK: dxsa.dcl_input vocp<[32, 0]>
54+
// CHECK: dxsa.dcl_input vocp<[32, 1], <x, y>>
55+
// CHECK: dxsa.dcl_input vocp<[32, 2], <x, y, z>>
56+
// CHECK: dxsa.dcl_hs_fork_phase_instance_count 4
57+
// CHECK: dxsa.dcl_input vForkInstanceID<none>
58+
// CHECK: dxsa.dcl_input vPrim<none>
59+
// CHECK: dxsa.dcl_index_range o<0>, 4
60+
// CHECK: dxsa.dcl_temps 1
61+
// CHECK: dxsa.dcl_indexable_temp x<0>[4], 1
62+
// CHECK: dxsa.dcl_output o<0, <y>>
63+
// CHECK: dxsa.dcl_output o<1, <y>>
64+
// CHECK: dxsa.dcl_output o<2, <y>>
65+
// CHECK: dxsa.dcl_output o<3, <y>>
66+
// CHECK: dxsa.mov x<[0, 0], <x>>, l(0x41400000)
67+
// CHECK: dxsa.mov x<[0, 1], <x>>, l(0x42000000)
68+
// CHECK: dxsa.mov x<[0, 2], <x>>, l(0x41700000)
69+
// CHECK: dxsa.mov x<[0, 3], <x>>, l(0x40A00000)
70+
// CHECK: dxsa.mov r<0, <x>>, vForkInstanceID<none>
71+
// CHECK: dxsa.mov o<r<0, <x>>, <y>>, x<[0, r<0, <x>>], <x>>
72+
// CHECK: dxsa.hs_join_phase
73+
// CHECK: dxsa.dcl_input vicp<[4, 0]>
74+
// CHECK: dxsa.dcl_input vicp<[4, 1], <x, y>>
75+
// CHECK: dxsa.dcl_input vicp<[4, 2], <x, y, z>>
76+
// CHECK: dxsa.dcl_input vocp<[32, 0]>
77+
// CHECK: dxsa.dcl_input vocp<[32, 1], <x, y>>
78+
// CHECK: dxsa.dcl_input vocp<[32, 2], <x, y, z>>
79+
// CHECK: dxsa.dcl_input vpc<0, <x, y>>
80+
// CHECK: dxsa.dcl_input vpc<1, <x, y>>
81+
// CHECK: dxsa.dcl_input vpc<2, <x, y>>
82+
// CHECK: dxsa.dcl_input vpc<3, <x, y>>
83+
// CHECK: dxsa.dcl_index_range vpc<0>, 4
84+
// CHECK: dxsa.dcl_output_siv o<4, <x>>, <finalQuadUInsideTessFactor>
85+
// CHECK: dxsa.dcl_output_siv o<5, <x>>, <finalQuadVInsideTessFactor>
86+
// CHECK: dxsa.dcl_output o<4, <y>>
87+
// CHECK: dxsa.dcl_output o<5, <y>>
88+
// CHECK: dxsa.dcl_input vPrim<none>
89+
// CHECK: dxsa.mov o<4, <x>>, l(0x41400000)
90+
// CHECK: dxsa.mov o<5, <x>>, l(0x40C00000)
91+
// CHECK: dxsa.mov o<4, <y>>, l(0x0)
92+
// CHECK: dxsa.mov o<5, <y>>, l(0x0)
93+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/indexabletemp4.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.dcl_global_flags <refactoringAllowed>
6+
// CHECK: dxsa.dcl_constant_buffer <id = 0, size = 12>, <dynamicIndexed>
7+
// CHECK: dxsa.dcl_input_ps constant v<1, <x>>
8+
// CHECK: dxsa.dcl_input_ps constant v<1, <y>>
9+
// CHECK: dxsa.dcl_output o<0, <x>>
10+
// CHECK: dxsa.dcl_temps 1
11+
// CHECK: dxsa.dcl_indexable_temp x<0>[4], 2
12+
// CHECK: dxsa.mov r<0, <x>>, v<1, <x>>
13+
// CHECK: dxsa.mov x<[0, 0], <x>>, cb<[0, r<0, <x>>], vector, <x>>
14+
// CHECK: dxsa.mov x<[0, 1], <x>>, cb<[0, 4 + r<0, <x>>], vector, <x>>
15+
// CHECK: dxsa.mov r<0, <x>>, v<1, <y>>
16+
// CHECK: dxsa.mov x<[0, 1], <y>>, r<0, <x>>
17+
// CHECK: dxsa.mov o<0, <x>>, x<[0, 77 + x<[0, 1], <y>>], <x>>
18+
// CHECK: dxsa.ret
19+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: mlir-translate --import-dxsa-bin %S/inputs/indexabletemp6.shex | FileCheck %s
2+
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py
3+
4+
5+
// CHECK-LABEL: dxsa.dcl_global_flags <refactoringAllowed|enableMinimumPrecision>
6+
// CHECK: dxsa.dcl_constant_buffer <id = 0, size = 12>, <dynamicIndexed>
7+
// CHECK: dxsa.dcl_input_ps constant v<1, <x>>
8+
// CHECK: dxsa.dcl_input_ps constant v<1, <y>>
9+
// CHECK: dxsa.dcl_output o<0, min16f, <x>>
10+
// CHECK: dxsa.dcl_temps 1
11+
// CHECK: dxsa.dcl_indexable_temp x<0>[4]
12+
// CHECK: dxsa.mov r<0, <x>>, v<1, <x>>
13+
// CHECK: dxsa.mov x<[0, 0], <x>>, cb<[0, 4 + r<0, <x>>], vector, <x>>
14+
// CHECK: dxsa.mov r<0, <y>>, x<[0, 0], <x>>
15+
// CHECK: dxsa.mov x<[0, 0], min16f, <x>>, cb<[0, r<0, <x>>], vector, min16f, <x>>
16+
// CHECK: dxsa.mov x<[0, 1], min16f, <x>>, cb<[0, 4 + r<0, <x>>], vector, min16f, <x>>
17+
// CHECK: dxsa.mov r<0, <x>>, v<1, <y>>
18+
// CHECK: dxsa.add x<[0, r<0, <x>>], min16f, <x>>, x<[0, r<0, <x>>], min16f, <x>>, r<0, min16f, <y>>
19+
// CHECK: dxsa.mov o<0, min16f, <x>>, x<[0, r<0, <x>>], min16f, <x>>
20+
// CHECK: dxsa.ret
21+
356 Bytes
Binary file not shown.
324 Bytes
Binary file not shown.
92 Bytes
Binary file not shown.
1.27 KB
Binary file not shown.

0 commit comments

Comments
 (0)