summaryrefslogtreecommitdiff
path: root/tests/cross-compile/func-resource-param-array.slang.glsl
blob: e9d1b5a9750181b372ced3a21b5d3a7046f52843 (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
89
90
91
92
93
// func-resource-param-array.slang.glsl
#version 450

#define a a_0
#define b b_0
#define c c_0
#define ii ii_0
#define jj jj_0
#define kk kk_0

#define f_a f_0
#define f_b f_1
#define g_b g_0
#define g_c g_1

#define a_block _S1
#define b_block _S2
#define c_block _S3

#define f_a_i  	_S4
#define f_b_t 	_S5
#define f_b_i   _S6
#define g_b_i   _S7
#define g_b_j   _S8
#define g_c_t   _S9
#define g_c_i   _S10
#define g_c_j   _S11

#define tmp_f_a_ii	_S12
#define tmp_f_a_jj	_S13

#define tmp_f_b 	_S14
#define tmp_g_b 	_S15
#define tmp_g_c 	_S16

layout(std430, binding = 0) buffer a_block {
    int _data[];
} a;

layout(std430, binding = 1) buffer b_block {
    int _data[];
} b[3];

layout(std430, binding = 2) buffer c_block {
    int _data[];
} c[4][3];

int f_a(uint f_a_i)
{
    return a._data[f_a_i];
}

int f_b(uint f_b_t, uint f_b_i)
{
    return b[f_b_t]._data[f_b_i];
}

int g_b(uint g_b_i, uint g_b_j)
{
    return b[g_b_i]._data[g_b_j];
}

int g_c(uint g_c_t, uint g_c_i, uint g_c_j)
{
    return c[g_c_t][g_c_i]._data[g_c_j];
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

void main()
{
    uint ii = gl_GlobalInvocationID.x;
    uint jj = gl_GlobalInvocationID.y;
    uint kk = gl_GlobalInvocationID.z;

    int tmp_f_a_ii = f_a(ii);

    int tmp_f_a_jj = f_a(jj);
    int tmp_0 = tmp_f_a_ii + tmp_f_a_jj;

    int tmp_f_b = f_b(ii, jj);
    int tmp_1 = tmp_0 + tmp_f_b;

    int tmp_g_b = g_b(ii, jj);
    int tmp_2 = tmp_1 + tmp_g_b;

    int tmp_g_c = g_c(ii, jj, kk);
    int tmp_3 = tmp_2 + tmp_g_c;

    a._data[ii] = tmp_3;

    return;
}