yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
ba164044
main
1#version 450 core 2 3#extension GL_EXT_bfloat16 : require 4#extension GL_KHR_cooperative_matrix : enable 5#extension GL_KHR_memory_scope_semantics : enable 6#extension GL_EXT_shader_explicit_arithmetic_types : enable 7#extension GL_EXT_scalar_block_layout : enable 8 9layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; 10 11const bfloat16_t bc10 = bfloat16_t(10); 12const bf16vec2 b2c20 = bf16vec2(20); 13layout(constant_id = 1) const bfloat16_t bsc10 = bfloat16_t(10); 14 15struct S { bfloat16_t b; }; 16const S sc = S(bc10); 17 18const bfloat16_t bca[2] = {bc10, bc10}; 19 20shared bfloat16_t bfs[10]; 21 22layout(scalar) buffer B { 23 bf16vec3 b3; 24 bf16vec2 b2; 25 bfloat16_t b1; 26} buf; 27 28bfloat16_t funcbf16(bfloat16_t x) 29{ 30 return x; 31} 32 33bfloat16_t funcf32(float32_t x) 34{ 35 return bfloat16_t(x); 36} 37 38bfloat16_t funcf64(float64_t x) 39{ 40 return bfloat16_t(x); 41} 42 43void main() 44{ 45 float f = 2.0; 46 bfloat16_t b = bfloat16_t(1.0); 47 bfloat16_t(f); 48 bf16vec2 b2 = bf16vec2(f); 49 50 uint8_t u8 = uint8_t(5); 51 uint16_t u16 = uint16_t(5); 52 uint32_t u32 = 5; 53 uint64_t u64 = 5; 54 int8_t i8 = int8_t(6); 55 int16_t i16 = int16_t(6); 56 int32_t i32 = 6; 57 int64_t i64 = 6; 58 bfloat16_t bf16 = bfloat16_t(7); 59 float16_t f16 = float16_t(7); 60 float32_t f32 = 7; 61 float64_t f64 = 7; 62 b = bfloat16_t(u8); 63 b = bfloat16_t(u16); 64 b = bfloat16_t(u32); 65 b = bfloat16_t(u64); 66 b = bfloat16_t(i8); 67 b = bfloat16_t(i16); 68 b = bfloat16_t(i32); 69 b = bfloat16_t(i64); 70 b = bfloat16_t(bf16); 71 b = bfloat16_t(f16); 72 b = bfloat16_t(f32); 73 b = bfloat16_t(f64); 74 u8 = uint8_t(b); 75 u16 = uint16_t(b); 76 u32 = uint32_t(b); 77 u64 = uint64_t(b); 78 i8 = int8_t(b); 79 i16 = int16_t(b); 80 i32 = int32_t(b); 81 i64 = int64_t(b); 82 bf16 = bfloat16_t(b); 83 f16 = float16_t(b); 84 f32 = float32_t(b); 85 f64 = float64_t(b); 86 87 f32 = b; 88 f64 = b; 89 90 b = buf.b1; 91 b2 = buf.b2; 92 bf16vec3 b3 = buf.b3; 93 94 dot(b2, b2); 95 96 coopmat<bfloat16_t, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> cmA = coopmat<bfloat16_t, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(3.0); 97 98 coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> cmAf = coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(cmA); 99 100 funcbf16(b); 101 funcf32(b); 102 funcf64(b); 103 104 int16_t i16_1 = bfloat16BitsToIntEXT(b); 105 i16vec2 i16_2 = bfloat16BitsToIntEXT(b2); 106 i16vec3 i16_3 = bfloat16BitsToIntEXT(bf16vec3(b2, b)); 107 i16vec4 i16_4 = bfloat16BitsToIntEXT(bf16vec4(b2, b2)); 108 109 uint16_t u16_1 = bfloat16BitsToUintEXT(b); 110 u16vec2 u16_2 = bfloat16BitsToUintEXT(b2); 111 u16vec3 u16_3 = bfloat16BitsToUintEXT(bf16vec3(b2, b)); 112 u16vec4 u16_4 = bfloat16BitsToUintEXT(bf16vec4(b2, b2)); 113 114 bfloat16_t b16_1 = intBitsToBFloat16EXT(i16_1); 115 bf16vec2 b16_2 = intBitsToBFloat16EXT(i16_2); 116 bf16vec3 b16_3 = intBitsToBFloat16EXT(i16_3); 117 bf16vec4 b16_4 = intBitsToBFloat16EXT(i16_4); 118 119 b16_1 = uintBitsToBFloat16EXT(u16_1); 120 b16_2 = uintBitsToBFloat16EXT(u16_2); 121 b16_3 = uintBitsToBFloat16EXT(u16_3); 122 b16_4 = uintBitsToBFloat16EXT(u16_4); 123 124} 125 126bfloat16_t func2(bf16vec4 v[2], int i) 127{ 128 bfloat16_t b; 129 b = (bf16vec2(v[0]))[i]; 130 b = (bf16vec2(v[1])).y; 131 132 v[i].z = v[i][i]; 133 134 S s; 135 s.b = b; 136 137 b = (i != 0) ? b : bfloat16_t(2); 138 139 if (i == 2) { 140 b = v[0].x; 141 } else { 142 b = v[1].y; 143 } 144 145 return b; 146}