Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / spv.coopmat_Error.comp
1 #version 450 core
2 #extension GL_KHR_memory_scope_semantics : enable\r
3 #extension GL_NV_cooperative_matrix : enable\r
4 #extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable\r
5 \r
6 layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
7 \r
8 float<16> ftemplate16;\r
9 \r
10 fcoopmatNV fnoparams;\r
11 \r
12 fcoopmatNV<8, gl_ScopeSubgroup, 8, 8> fbadbits;\r
13 \r
14 fcoopmatNV<16, gl_ScopeSubgroup, 8> fbadnumparams;\r
15 \r
16 int X = 8;\r
17 \r
18 fcoopmatNV<16, gl_ScopeSubgroup, 8, X> fbadparam;\r
19 \r
20 layout(constant_id = 0) int Y = 1;\r
21 \r
22 shared fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> sharedmat;\r
23 \r
24 layout(set = 0, binding = 0) buffer InvBlock {\r
25     fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> bufmat;\r
26 } invblock;\r
27 \r
28 void main()
29 {\r
30     fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> f32_16_8;\r
31     fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> f16_16_8;\r
32 \r
33     // invalid implicit conversions\r
34     f32_16_8 = f16_16_8;\r
35     f32_16_8 = f16_16_8 + f16_16_8;\r
36 \r
37     fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16_8_8;\r
38 \r
39     // mismatching dimensions\r
40     f16_16_8 = f16_8_8;\r
41 \r
42     fcoopmatNV<16, gl_ScopeSubgroup, 8, Y> f16_8_Y;\r
43     fcoopmatNV<16, gl_ScopeSubgroup, 8, (Y+1)> f16_8_Y1;\r
44 \r
45     // mismatching dimensions with specialization constants\r
46     f16_8_Y = f16_8_Y1;\r
47 \r
48     // wrong arguments for constructor\r
49     f16_8_8 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1, 1);\r
50 \r
51     // can't construct from a builtin type\r
52     mat4 m4;\r
53     fcoopmatNV<32, gl_ScopeSubgroup, 4, 4> f32_4_4 = fcoopmatNV<32, gl_ScopeSubgroup, 4, 4>(m4);\r
54 \r
55     // only support a single array subscript\r
56     f16_16_8[0][0];\r
57 \r
58     // don't support scalar component selection\r
59     f16_16_8.x;\r
60 \r
61     f16_16_8 * f16_16_8;\r
62 \r
63     f16_16_8 + 1.0;\r
64     f16_16_8 - 1.0;\r
65     f16_16_8 / 1.0;\r
66     f16_16_8 += 1.0;\r
67     f16_16_8 -= 1.0;\r
68     f16_16_8 /= 1.0;\r
69 \r
70     f16_16_8*2.0;\r
71     2.0*f16_16_8;\r
72     f32_16_8*float16_t(2.0);\r
73     float16_t(2.0)*f32_16_8;\r
74 \r
75     transpose(f16_8_8);\r
76 }