summaryrefslogtreecommitdiffstats
path: root/tests/bugs/gh-4395.slang
blob: 3a5c930797280f211c597505aa0e80fb458cd290 (plain)
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

// 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);
}