1#version 450 core
2#extension GL_KHR_memory_scope_semantics : enable
3#extension GL_KHR_cooperative_matrix : enable
4#extension GL_EXT_shader_explicit_arithmetic_types : enable
5
6layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
7
8
9void main()
10{
11
12#define TESTCONST(T, BASE) \
13    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<float,     gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+1.0)); \
14    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+2.0)); \
15    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<uint32_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+3));    \
16    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<uint16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+4));    \
17    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<uint8_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+5));    \
18    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<int32_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+6));     \
19    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<int16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+7));     \
20    coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(coopmat<int8_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+8));
21
22    TESTCONST(float, 0)
23    TESTCONST(float16_t, 10)
24    TESTCONST(uint32_t, 20)
25    TESTCONST(uint16_t, 30)
26    TESTCONST(uint8_t, 40)
27    TESTCONST(int32_t, 50)
28    TESTCONST(int16_t, 60)
29    TESTCONST(int8_t, 70)
30
31#define TESTVAR(T, BASE) \
32    { coopmat<float,     gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<float,     gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+1.0); coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
33    { coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+2.0); coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
34    { coopmat<uint32_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<uint32_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+3);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
35    { coopmat<uint16_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<uint16_t,  gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+4);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
36    { coopmat<uint8_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<uint8_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+5);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
37    { coopmat<int32_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<int32_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+6);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
38    { coopmat<int16_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<int16_t,   gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+7);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }  \
39    { coopmat<int8_t,    gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> v = coopmat<int8_t,    gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(BASE+8);   coopmat<T, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA>(v); }
40
41    TESTVAR(float, 100)
42    TESTVAR(float16_t, 110)
43    TESTVAR(uint32_t, 120)
44    TESTVAR(uint16_t, 130)
45    TESTVAR(uint8_t, 140)
46    TESTVAR(int32_t, 150)
47    TESTVAR(int16_t, 160)
48    TESTVAR(int8_t, 170)
49}
50