yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
8e12361e
main
1#version 450 core 2#extension GL_KHR_memory_scope_semantics : enable 3#extension GL_NV_cooperative_matrix : enable 4#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable 5#extension GL_EXT_buffer_reference : enable 6 7layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; 8 9const int X = 8; 10layout(constant_id = 0) const int Y = 2; 11const int Z = X*Y; 12 13fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC; 14fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC2[3]; 15 16int arr[mC.length()]; 17int arr2[mC2[1].length()]; 18 19layout(constant_id = 1) const float F = 3.0; 20 21const fcoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = fcoopmatNV<32, gl_ScopeSubgroup, Z, 8>(0.0); 22const fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> mD2 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1); 23 24struct S { int a; int b; int c; }; 25 26const S s = S(12, 23, 34); 27 28layout(set = 0, binding = 0, buffer_reference) coherent buffer Block { 29 float y[1024*1024]; 30 float x[]; 31} block; 32 33layout(set = 0, binding = 0) coherent buffer Block16 { 34 float16_t arr[256][256]; 35 float16_t y[1024*1024]; 36 float16_t x[]; 37 38 Block b; 39} block16; 40 41fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16(fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> m) { return -m; } 42fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> f32(fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> m) { return -m; } 43 44layout(constant_id = 2) const int SC = 1; 45fcoopmatNV<16, gl_ScopeSubgroup, SC, SC> scm[SC][SC]; 46 47// sized for fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> 48shared uvec4 shmatrix[16*16*2/16]; 49 50void main() 51{ 52 fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> m = fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)>(0.0); 53 54 m = m + m; 55 m = m - m; 56 m = -m; 57 m = 2.0*m; 58 m = m*2.0; 59 60 fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> m2 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(m); 61 62 float x = m[1]; 63 m[0] = x; 64 65 coopMatLoadNV(m, block.x, 16, 128, false); 66 coopMatStoreNV(m, block.x, 16, 128, false); 67 coopMatLoadNV(m2, block16.x, 16, 128, false); 68 coopMatStoreNV(m2, block16.x, 16, 128, false); 69 coopMatLoadNV(m, block16.b.x, 16, 128, false); 70 coopMatStoreNV(m, block16.b.x, 16, 128, false); 71 72 fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> A; 73 fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> B; 74 fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> C; 75 fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> D; 76 D = coopMatMulAddNV(A, B, C); 77 78 int l = D.length(); 79 80 fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> E; 81 82 fcoopmatNV<16, gl_ScopeSubgroup, Z, Z> F = fcoopmatNV<16, gl_ScopeSubgroup, Z, Z>(0.0); 83 84 fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5]; 85 a[3][0] = 1.0; 86 87 float md1 = mD[1]; 88 89 md1 += (m += m)[1234]; 90 91 mC2[1] = mC2[2]; 92 93 coopMatLoadNV(m, block.y, 16, 128, false); 94 coopMatStoreNV(m, block.y, 16, 128, false); 95 coopMatLoadNV(m2, block16.y, 16, 128, false); 96 coopMatStoreNV(m2, block16.y, 16, 128, false); 97 98 fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> p1; 99 fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> p2; 100 101 p1 = f16(p1); 102 p2 = f32(p2); 103 104 p1 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(0.0); 105 p2 = fcoopmatNV<32, gl_ScopeSubgroup, 8, 8>(0.0); 106 107 p1 /= p1; 108 109 p1 *= float16_t(2.0); 110 p2 *= 4.0; 111 112 fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> ms; 113 coopMatLoadNV(ms, shmatrix, 1, 2, false); 114 coopMatStoreNV(ms, shmatrix, 1, 2, false); 115 116 coopMatLoadNV(ms, block16.arr[8], 1, 2, false); 117 coopMatStoreNV(ms, block16.arr[16], 1, 2, false); 118 119}