Skip to content

Commit cbb3b80

Browse files
farzonlIcohedron
andauthored
[Matrix] Add swizzle test cases (#483)
fixes #482 --------- Co-authored-by: Deric C. <cheung.deric@gmail.com>
1 parent 0a0a0cb commit cbb3b80

File tree

2 files changed

+234
-0
lines changed

2 files changed

+234
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#--- source.hlsl
2+
3+
RWBuffer<int> In : register(u0);
4+
RWBuffer<int> RowOut : register(u1);
5+
RWBuffer<int> ColOut : register(u2);
6+
7+
[numthreads(4,1,1)]
8+
void main(uint GI : SV_GroupIndex) {
9+
int4x4 A;
10+
int4x4 B;
11+
switch(GI) {
12+
case 0:
13+
A._11_12_13_14 = In[GI].xxxx;
14+
B._11_21_31_41 = In[GI].xxxx;
15+
break;
16+
case 1:
17+
A._21_22_23_24 = In[GI].xxxx;
18+
B._12_22_32_42 = In[GI].xxxx;
19+
break;
20+
case 2:
21+
A._31_32_33_34 = In[GI].xxxx;
22+
B._13_23_33_43 = In[GI].xxxx;
23+
break;
24+
case 3:
25+
A._41_42_43_44 = In[GI].xxxx;
26+
B._14_24_34_44 = In[GI].xxxx;
27+
break;
28+
29+
}
30+
int4 vec1;
31+
int4 vec2;
32+
switch(GI) {
33+
case 0:
34+
vec1 = A._11_12_13_14;
35+
vec2 = B._11_21_31_41;
36+
break;
37+
case 1:
38+
vec1 = A._21_22_23_24;
39+
vec2 = B._12_22_32_42;
40+
break;
41+
case 2:
42+
vec1 = A._31_32_33_34;
43+
vec2 = B._13_23_33_43;
44+
break;
45+
case 3:
46+
vec1 = A._41_42_43_44;
47+
vec2 = B._14_24_34_44;
48+
break;
49+
}
50+
for(int i = 0; i < 4; i++) {
51+
RowOut[GI*4+i] = vec1[i];
52+
ColOut[i*4+GI] = vec2[i];
53+
}
54+
}
55+
56+
//--- pipeline.yaml
57+
58+
---
59+
Shaders:
60+
- Stage: Compute
61+
Entry: main
62+
DispatchSize: [1, 1, 1]
63+
Buffers:
64+
- Name: In
65+
Format: Int32
66+
Data: [ 1, 2, 3, 4]
67+
- Name: RowOut
68+
Format: Int32
69+
FillSize: 64
70+
- Name: ColOut
71+
Format: Int32
72+
FillSize: 64
73+
- Name: ExpectedRowOut
74+
Format: Int32
75+
Data: [ 1,1,1,1, 2,2,2,2, 3,3,3,3, 4,4,4,4 ]
76+
- Name: ExpectedColOut
77+
Format: Int32
78+
Data: [ 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4 ]
79+
Results:
80+
- Result: RowOut
81+
Rule: BufferExact
82+
Actual: RowOut
83+
Expected: ExpectedRowOut
84+
- Result: ColOut
85+
Rule: BufferExact
86+
Actual: ColOut
87+
Expected: ExpectedColOut
88+
DescriptorSets:
89+
- Resources:
90+
- Name: In
91+
Kind: RWBuffer
92+
DirectXBinding:
93+
Register: 0
94+
Space: 0
95+
VulkanBinding:
96+
Binding: 0
97+
- Name: RowOut
98+
Kind: RWBuffer
99+
DirectXBinding:
100+
Register: 1
101+
Space: 0
102+
VulkanBinding:
103+
Binding: 1
104+
- Name: ColOut
105+
Kind: RWBuffer
106+
DirectXBinding:
107+
Register: 2
108+
Space: 0
109+
VulkanBinding:
110+
Binding: 2
111+
...
112+
#--- end
113+
114+
# UNSUPPORTED: Clang
115+
# RUN: split-file %s %t
116+
# RUN: %dxc_target -T cs_6_0 -Fo %t.o %t/source.hlsl
117+
# RUN: %offloader %t/pipeline.yaml %t.o
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#--- source.hlsl
2+
3+
RWBuffer<int> In : register(u0);
4+
RWBuffer<int> RowOut : register(u1);
5+
RWBuffer<int> ColOut : register(u2);
6+
7+
[numthreads(4,1,1)]
8+
void main(uint GI : SV_GroupIndex) {
9+
int4x4 A;
10+
int4x4 B;
11+
switch(GI) {
12+
case 0:
13+
A._m00_m01_m02_m03 = In[GI].xxxx;
14+
B._m00_m10_m20_m30 = In[GI].xxxx;
15+
break;
16+
case 1:
17+
A._m10_m11_m12_m13 = In[GI].xxxx;
18+
B._m01_m11_m21_m31 = In[GI].xxxx;
19+
break;
20+
case 2:
21+
A._m20_m21_m22_m23 = In[GI].xxxx;
22+
B._m02_m12_m22_m32 = In[GI].xxxx;
23+
break;
24+
case 3:
25+
A._m30_m31_m32_m33 = In[GI].xxxx;
26+
B._m03_m13_m23_m33 = In[GI].xxxx;
27+
break;
28+
29+
}
30+
int4 vec1;
31+
int4 vec2;
32+
switch(GI) {
33+
case 0:
34+
vec1 = A._m00_m01_m02_m03;
35+
vec2 = B._m00_m10_m20_m30;
36+
break;
37+
case 1:
38+
vec1 = A._m10_m11_m12_m13;
39+
vec2 = B._m01_m11_m21_m31;
40+
break;
41+
case 2:
42+
vec1 = A._m20_m21_m22_m23;
43+
vec2 = B._m02_m12_m22_m32;
44+
break;
45+
case 3:
46+
vec1 = A._m30_m31_m32_m33;
47+
vec2 = B._m03_m13_m23_m33;
48+
break;
49+
}
50+
for(int i = 0; i < 4; i++) {
51+
RowOut[GI*4+i] = vec1[i];
52+
ColOut[i*4+GI] = vec2[i];
53+
}
54+
}
55+
56+
//--- pipeline.yaml
57+
58+
---
59+
Shaders:
60+
- Stage: Compute
61+
Entry: main
62+
DispatchSize: [1, 1, 1]
63+
Buffers:
64+
- Name: In
65+
Format: Int32
66+
Data: [ 1, 2, 3, 4]
67+
- Name: RowOut
68+
Format: Int32
69+
FillSize: 64
70+
- Name: ColOut
71+
Format: Int32
72+
FillSize: 64
73+
- Name: ExpectedRowOut
74+
Format: Int32
75+
Data: [ 1,1,1,1, 2,2,2,2, 3,3,3,3, 4,4,4,4 ]
76+
- Name: ExpectedColOut
77+
Format: Int32
78+
Data: [ 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4 ]
79+
Results:
80+
- Result: RowOut
81+
Rule: BufferExact
82+
Actual: RowOut
83+
Expected: ExpectedRowOut
84+
- Result: ColOut
85+
Rule: BufferExact
86+
Actual: ColOut
87+
Expected: ExpectedColOut
88+
DescriptorSets:
89+
- Resources:
90+
- Name: In
91+
Kind: RWBuffer
92+
DirectXBinding:
93+
Register: 0
94+
Space: 0
95+
VulkanBinding:
96+
Binding: 0
97+
- Name: RowOut
98+
Kind: RWBuffer
99+
DirectXBinding:
100+
Register: 1
101+
Space: 0
102+
VulkanBinding:
103+
Binding: 1
104+
- Name: ColOut
105+
Kind: RWBuffer
106+
DirectXBinding:
107+
Register: 2
108+
Space: 0
109+
VulkanBinding:
110+
Binding: 2
111+
...
112+
#--- end
113+
114+
# UNSUPPORTED: Clang
115+
# RUN: split-file %s %t
116+
# RUN: %dxc_target -T cs_6_0 -Fo %t.o %t/source.hlsl
117+
# RUN: %offloader %t/pipeline.yaml %t.o

0 commit comments

Comments
 (0)