forked from shader-slang/slang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgh-4395.slang
88 lines (73 loc) · 2.28 KB
/
gh-4395.slang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-dx12 -compute -output-using-type -use-dxil
// Vulkan/GLSL doesn't support 1-dimensional matrix.
//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -compute -output-using-type -emit-spirv-via-glsl
//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK):-vk -compute -output-using-type -emit-spirv-directly
//TEST_INPUT: ubuffer(data=[0.0 1.0 2.0 3.0], stride=4):name=inputBuffer
RWStructuredBuffer<float> inputBuffer;
//TEST_INPUT: ubuffer(data=[0], stride=4):out,name=outputBuffer
RWStructuredBuffer<int> outputBuffer;
[numthreads(1,1,1)]
void computeMain()
{
float v0 = inputBuffer[0];
float v1 = inputBuffer[1];
float v2 = inputBuffer[2];
float v3 = inputBuffer[3];
float result = 0.f;
{
float1x1 a = v0;
float1x1 b = v1;
b += a;
result += b[0][0];
float1x1 c = v2;
float1x1 d = v3;
d -= c;
result += d[0][0];
float1x1 e = v0;
float1x1 f = v1;
f *= e;
result += f[0][0];
float1x1 g = v2;
float1x1 h = v3;
g /= h;
result += g[0][0];
}
{
float1x2 a = float1x2(v0, v1);
float1x2 b = float1x2(v2, v3);
b += a;
result += b[0][0] + b[0][1];
float1x2 c = float1x2(v0, v1);
float1x2 d = float1x2(v2, v3);
d -= c;
result += d[0][0] + d[0][1];
float1x2 e = float1x2(v0, v1);
float1x2 f = float1x2(v2, v3);
f *= e;
result += f[0][0] + f[0][1];
float1x2 g = float1x2(v0, v1);
float1x2 h = float1x2(v2, v3);
g /= h;
result += g[0][0] + g[0][1];
}
{
float2x1 a = float2x1(v0, v1);
float2x1 b = float2x1(v2, v3);
b += a;
result += b[0][0] + b[0][1];
float2x1 c = float2x1(v0, v1);
float2x1 d = float2x1(v2, v3);
d -= c;
result += d[0][0] + d[0][1];
float2x1 e = float2x1(v0, v1);
float2x1 f = float2x1(v2, v3);
f *= e;
result += f[0][0] + f[0][1];
float2x1 g = float2x1(v0, v1);
float2x1 h = float2x1(v2, v3);
g /= h;
result += g[0][0] + g[0][1];
}
//CHK:24
outputBuffer[0] = int(result);
}