yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
6.7 KiB225 linesraw
1//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-slang -compute -output-using-type
2//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-slang -compute -output-using-type -dx12 -profile cs_6_6
3//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -compute -shaderobj -output-using-type
4//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -compute -shaderobj -output-using-type -emit-spirv-directly
5//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cpu -compute -output-using-type
6//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cuda -compute -output-using-type
7//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-slang -shaderobj -mtl -output-using-type
8
9// Slang removes parentheses characters for the bitwise operators when they are not needed.
10// DXC prints warning messages even when the expression is correct.
11// We are snoozing the warning and testing it here to prevent a regression.
12
13//TEST_INPUT: ubuffer(data=[0 1 2 3 4 5 6 7 8 9], stride=4):name inputBuffer
14RWStructuredBuffer<int> inputBuffer;
15
16//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
17RWStructuredBuffer<int> outputBuffer;
18
19// -----------+----------+------------------------------+---------------
20// Precedence | Operator | Description                  | Associativity
21// -----------+----------+------------------------------+---------------
22// 4          | + -      | Addition and subtraction     | Left-to-right
23// -----------+----------+------------------------------+
24// 5          | << >>    | Bitwise left and right shift |
25// -----------+----------+------------------------------+
26// 8          | &        | Bitwise AND                  |
27// -----------+----------+------------------------------+
28// 9          | ^        | Bitwise XOR (exclusive or)   |
29// -----------+----------+------------------------------+
30// 10         | |        | Bitwise OR (inclusive or)    |
31// -----------+----------+------------------------------+---------------
32
33bool Test_And_Or()
34{
35    uint32_t a = inputBuffer[1];
36    uint32_t b = inputBuffer[3];
37    uint32_t c = inputBuffer[2];
38    uint32_t d = inputBuffer[6];
39
40    return true
41        && 3 == ((a & b) | (c & d))
42        && 0 == (a & (b | c) & d)
43        && 2 == (((a & b) | c) & d)
44        && 1 == (a & (b | (c & d)))
45        && 3 == (a & b | c & d)
46
47        && 2 == ((a | b) & (c | d))
48        && 7 == (a | (b & c) | d)
49        && 6 == (((a | b) & c) | d)
50        && 3 == (a | (b & (c | d)))
51        && 7 == (a | b & c | d)
52        ;
53}
54
55bool Test_And_Xor()
56{
57    uint32_t a = inputBuffer[1];
58    uint32_t b = inputBuffer[3];
59    uint32_t c = inputBuffer[2];
60    uint32_t d = inputBuffer[6];
61
62    return true
63        && 3 == ((a & b) ^ (c & d))
64        && 0 == (a & (b ^ c) & d)
65        && 2 == (((a & b) ^ c) & d)
66        && 1 == (a & (b ^ (c & d)))
67        && 3 == (a & b ^ c & d)
68
69        && 0 == ((a ^ b) & (c ^ d))
70        && 5 == (a ^ (b & c) ^ d)
71        && 4 == (((a ^ b) & c) ^ d)
72        && 1 == (a ^ (b & (c ^ d)))
73        && 5 == (a ^ b & c ^ d)
74        ;
75}
76
77bool Test_Xor_Or()
78{
79    uint32_t a = inputBuffer[1];
80    uint32_t b = inputBuffer[4];
81    uint32_t c = inputBuffer[2];
82    uint32_t d = inputBuffer[7];
83
84    return true
85        && 5 == ((a ^ b) | (c ^ d))
86        && 0 == (a ^ (b | c) ^ d)
87        && 0 == (((a ^ b) | c) ^ d)
88        && 4 == (a ^ (b | (c ^ d)))
89        && 5 == (a ^ b | c ^ d)
90
91        && 2 == ((a | b) ^ (c | d))
92        && 7 == (a | (b ^ c) | d)
93        && 7 == (((a | b) ^ c) | d)
94        && 3 == (a | (b ^ (c | d)))
95        && 7 == (a | b ^ c | d)
96        ;
97}
98
99bool Test_LShift_RShift()
100{
101    uint32_t a = inputBuffer[4];
102    uint32_t b = inputBuffer[1];
103    uint32_t c = inputBuffer[2];
104    uint32_t d = inputBuffer[3];
105
106    return true
107        && 0 == ((a << b) >> (c << d))
108        && 32 == (a << (b >> c) << d)
109        && 16 == (((a << b) >> c) << d)
110        && 4 == (a << (b >> (c << d)))
111        && 16 == (a << b >> c << d)
112
113        && 2 == ((a >> b) << (c >> d))
114        && 0 == (a >> (b << c) >> d)
115        && 1 == (((a >> b) << c) >> d)
116        && 2 == (a >> (b << (c >> d)))
117        && 1 == (a >> b << c >> d)
118        ;
119}
120
121bool Test_LShift_And()
122{
123    uint32_t a = inputBuffer[1];
124    uint32_t b = inputBuffer[5];
125    uint32_t c = inputBuffer[2];
126    uint32_t d = inputBuffer[4];
127
128    return true
129        && 32 == ((a << b) & (c << d))
130        && 16 == (a << (b & c) << d)
131        && 0 == (((a << b) & c) << d)
132        && 1 == (a << (b & (c << d)))
133        && 32 == (a << b & c << d)
134
135        && 1 == ((a & b) << (c & d))
136        && 0 == (a & (b << c) & d)
137        && 4 == (((a & b) << c) & d)
138        && 1 == (a & (b << (c & d)))
139        && 0 == (a & b << c & d)
140        ;
141}
142
143bool Test_LShift_Or()
144{
145    uint32_t a = inputBuffer[1];
146    uint32_t b = inputBuffer[2];
147    uint32_t c = inputBuffer[4];
148    uint32_t d = inputBuffer[3];
149
150    return true
151        && 36 == ((a << b) | (c << d))
152        && 512 == (a << (b | c) << d)
153        && 32 == (((a << b) | c) << d)
154        && 1073741824 == (a << ((b | (c << d)) - 4))
155        && 36 == (a << b | c << d)
156
157        && 384 == ((a | b) << (c | d))
158        && 35 == (a | (b << c) | d)
159        && 51 == (((a | b) << c) | d)
160        && 257 == (a | (b << (c | d)))
161        && 35 == (a | b << c | d)
162        ;
163}
164
165bool Test_LShift_Xor()
166{
167    uint32_t a = inputBuffer[1];
168    uint32_t b = inputBuffer[2];
169    uint32_t c = inputBuffer[4];
170    uint32_t d = inputBuffer[3];
171
172    return true
173        && 36 == ((a << b) ^ (c << d))
174        && 512 == (a << (b ^ c) << d)
175        && 0 == (((a << b) ^ c) << d)
176        && 1073741824 == ((a << ((b ^ (c << d)) - 4)))
177        && 36 == (a << b ^ c << d)
178
179        && 384 == ((a ^ b) << (c ^ d))
180        && 34 == (a ^ (b << c) ^ d)
181        && 51 == (((a ^ b) << c) ^ d)
182        && 257 == (a ^ (b << (c ^ d)))
183        && 34 == (a ^ b << c ^ d)
184        ;
185}
186
187bool Test_Add_LShift()
188{
189    uint32_t a = inputBuffer[1];
190    uint32_t b = inputBuffer[3];
191    uint32_t c = inputBuffer[2];
192    uint32_t d = inputBuffer[4];
193
194    return true
195        && 256 == ((a + b) << (c + d))
196        && 17 == (a + (b << c) + d)
197        && 20 == (((a + b) << c) + d)
198        && 193 == (a + (b << (c + d)))
199        && 256 == (a + b << c + d)
200
201        && 40 == ((a << b) + (c << d))
202        && 512 == (a << (b + c) << d)
203        && 160 == (((a << b) + c) << d)
204        && 1073741824 == (a << ((b + (c << d)) - 5))
205        && 512 == (a << b + c << d)
206        ;
207}
208
209[numthreads(1, 1, 1)]
210void computeMain(uint groupIndex : SV_GroupIndex, int3 dispatchThreadID: SV_DispatchThreadID)
211{
212    //BUF: 1
213    bool result = true
214        && Test_And_Or()
215        && Test_And_Xor()
216        && Test_Xor_Or()
217        && Test_LShift_RShift()
218        && Test_LShift_And()
219        && Test_LShift_Or()
220        && Test_LShift_Xor()
221        && Test_Add_LShift()
222        ;
223
224    outputBuffer[0] = int(result);
225}