yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
097047a9
main
1#version 450 core 2 3#extension GL_ARB_gpu_shader_int64 : enable 4#extension GL_AMD_gpu_shader_half_float : enable 5#extension GL_AMD_gpu_shader_int16 : enable 6 7layout (binding = 0 )uniform Uniforms 8{ 9uint i ; 10}; 11 12// int16/uint16 in block 13layout (std140 ,binding = 1 )uniform Block 14{ 15i16vec3 i16v ; 16uint16_t u16 ; 17}block ; 18 19// int16/uint16 for input 20layout (location = 0 )in flat u16vec3 iu16v ; 21layout (location = 1 )in flat int16_t ii16 ; 22 23void literal () 24{ 25const int16_t i16c [3 ]= 26 { 270x111 S ,// Hex 28-2 s ,// Dec 290400 s ,// Oct 30 }; 31 32const uint16_t u16c []= 33 { 340xFFFFu s ,// Hex 3565535U S ,// Dec 360177777u s ,// Oct 37 }; 38 39uint16_t u16 = i16c [i ]+ u16c [i ]; 40} 41 42void operators () 43{ 44u16vec3 u16v ; 45int16_t i16 ; 46uint16_t u16 ; 47int i ; 48uint u ; 49bool b ; 50 51// Unary 52u16v ++ ; 53i16 -- ; 54++ i16 ; 55-- u16v ; 56 57u16v = ~u16v ; 58 59i16 = + i16 ; 60u16v = - u16v ; 61 62// Arithmetic 63u16 += i16 ; 64u16v -= u16v ; 65i16 *=i16 ; 66u16v /=u16v ; 67u16v %=i16 ; 68 69u16v = u16v + u16v ; 70u16 = i16 - u16 ; 71u16v = u16v * i16 ; 72i16 = i16 * i16 ; 73i16 = i16 %i16 ; 74 75// Shift 76u16v <<=i16 ; 77i16 >>=u16v .y ; 78 79i16 = i16 <<u16v .z ; 80u16v = u16v <<i16 ; 81 82// Relational 83b = (u16v .x != i16 ); 84b = (i16 == u16v .x ); 85b = (u16v .x > u16v .y ); 86b = (i16 < u ); 87b = (u16v .y >=u16v .x ); 88b = (i16 <=i ); 89 90// Bitwise 91u16v |=i16 ; 92u16 = i16 |u16 ; 93i16 &=i16 ; 94u16v = u16v & u16v ; 95u16v ^=i16 ; 96u16v = u16v ^i16 ; 97} 98 99void typeCast () 100{ 101bvec2 bv ; 102ivec2 iv ; 103uvec2 uv ; 104vec2 fv ; 105dvec2 dv ; 106 107f16vec2 f16v ; 108i64vec2 i64v ; 109u64vec2 u64v ; 110i16vec2 i16v ; 111u16vec2 u16v ; 112 113i16v = i16vec2 (bv );// bool -> int16 114u16v = u16vec2 (bv );// bool -> uint16 115bv = bvec2 (i16v );// int16 -> bool 116bv = bvec2 (u16v );// uint16 -> bool 117 118i16v = i16vec2 (iv );// int -> int16 119u16v = u16vec2 (iv );// int -> uint16 120iv = i16v ;// int16 -> int 121iv = ivec2 (u16v );// uint16 -> int 122 123i16v = i16vec2 (uv );// uint -> int16 124u16v = u16vec2 (uv );// uint -> uint16 125uv = i16v ;// int16 -> uint 126uv = u16v ;// uint16 -> uint 127 128i16v = i16vec2 (fv );// float -> int16 129u16v = u16vec2 (fv );// float -> uint16 130fv = i16v ;// int16 -> float 131fv = u16v ;// uint16 -> float 132 133i16v = i16vec2 (dv );// double -> int16 134u16v = u16vec2 (dv );// double -> uint16 135dv = i16v ;// int16 -> double 136dv = u16v ;// uint16 -> double 137 138i16v = i16vec2 (f16v );// float16 -> int16 139u16v = u16vec2 (f16v );// float16 -> uint16 140f16v = i16v ;// int16 -> float16 141f16v = u16v ;// uint16 -> float16 142 143i16v = i16vec2 (i64v );// int64 -> int16 144u16v = u16vec2 (i64v );// int64 -> uint16 145i64v = i16v ;// int16 -> int64 146i64v = i64vec2 (u16v );// uint16 -> int64 147 148i16v = i16vec2 (u64v );// uint64 -> int16 149u16v = u16vec2 (u64v );// uint64 -> uint16 150u64v = i16v ;// int16 -> uint64 151u64v = u16v ;// uint16 -> uint64 152 153i16v = i16vec2 (u16v );// uint16 -> int16 154u16v = i16v ;// int16 -> uint16 155} 156 157void builtinFuncs () 158{ 159i16vec2 i16v ; 160u16vec3 u16v ; 161f16vec3 f16v ; 162bvec3 bv ; 163 164int16_t i16 ; 165uint16_t u16 ; 166 167// abs() 168i16v = abs (i16v ); 169 170// sign() 171i16v = sign (i16v ); 172 173// min() 174i16v = min (i16v ,i16 ); 175i16v = min (i16v ,i16vec2 (-1 s )); 176u16v = min (u16v ,u16 ); 177u16v = min (u16v ,u16vec3 (0u s )); 178 179// max() 180i16v = max (i16v ,i16 ); 181i16v = max (i16v ,i16vec2 (-1 s )); 182u16v = max (u16v ,u16 ); 183u16v = max (u16v ,u16vec3 (0u s )); 184 185// clamp() 186i16v = clamp (i16v ,- i16 ,i16 ); 187i16v = clamp (i16v ,- i16v ,i16v ); 188u16v = clamp (u16v ,- u16 ,u16 ); 189u16v = clamp (u16v ,- u16v ,u16v ); 190 191// mix() 192i16 = mix (i16v .x ,i16v .y , true); 193i16v = mix (i16vec2 (i16 ),i16vec2 (- i16 ),bvec2 (false)); 194u16 = mix (u16v .x ,u16v .y , true); 195u16v = mix (u16vec3 (u16 ),u16vec3 (- u16 ),bvec3 (false)); 196 197// frexp() 198i16vec3 exp ; 199f16v = frexp (f16v ,exp ); 200 201// ldexp() 202f16v = ldexp (f16v ,exp ); 203 204// float16BitsToInt16() 205i16v = float16BitsToInt16 (f16v .xy ); 206 207// float16BitsToUint16() 208u16v .x = float16BitsToUint16 (f16v .z ); 209 210// int16BitsToFloat16() 211f16v .xy = int16BitsToFloat16 (i16v ); 212 213// uint16BitsToFloat16() 214f16v = uint16BitsToFloat16 (u16v ); 215 216// packInt2x16() 217int packi = packInt2x16 (i16v ); 218 219// unpackInt2x16() 220i16v = unpackInt2x16 (packi ); 221 222// packUint2x16() 223uint packu = packUint2x16 (u16v .xy ); 224 225// unpackUint2x16() 226u16v .xy = unpackUint2x16 (packu ); 227 228// packInt4x16() 229int64_t packi64 = packInt4x16 (i16vec4 (i16 )); 230 231// unpackInt4x16() 232i16v = unpackInt4x16 (packi64 ).xy ; 233 234// packUint4x16() 235uint64_t packu64 = packUint4x16 (u16vec4 (u16 )); 236 237// unpackUint4x16() 238u16v = unpackUint4x16 (packu64 ).xyz ; 239 240// lessThan() 241bv = lessThan (u16v ,u16vec3 (u16 )); 242bv .xy = lessThan (i16v ,i16vec2 (i16 )); 243 244// lessThanEqual() 245bv = lessThanEqual (u16v ,u16vec3 (u16 )); 246bv .xy = lessThanEqual (i16v ,i16vec2 (i16 )); 247 248// greaterThan() 249bv = greaterThan (u16v ,u16vec3 (u16 )); 250bv .xy = greaterThan (i16v ,i16vec2 (i16 )); 251 252// greaterThanEqual() 253bv = greaterThanEqual (u16v ,u16vec3 (u16 )); 254bv .xy = greaterThanEqual (i16v ,i16vec2 (i16 )); 255 256// equal() 257bv = equal (u16v ,u16vec3 (u16 )); 258bv .xy = equal (i16v ,i16vec2 (i16 )); 259 260// notEqual() 261bv = notEqual (u16v ,u16vec3 (u16 )); 262bv .xy = notEqual (i16v ,i16vec2 (i16 )); 263} 264 265// Type conversion for specialization constant 266layout (constant_id = 100 )const int64_t si64 = -10L ; 267layout (constant_id = 101 )const uint64_t su64 = 20UL ; 268layout (constant_id = 102 )const int si = -5 ; 269layout (constant_id = 103 )const uint su = 4 ; 270layout (constant_id = 104 )const bool sb = true; 271layout (constant_id = 105 )const int16_t si16 = -5 S ; 272layout (constant_id = 106 )const uint16_t su16 = 4U S ; 273 274// bool <-> int16/uint16 275const bool i16_to_b = bool (si16 ); 276const bool u16_to_b = bool (su16 ); 277const int16_t b_to_i16 = int16_t (sb ); 278const uint16_t b_to_u16 = uint16_t (sb ); 279 280// int <-> int16/uint16 281const int i16_to_i = int (si16 ); 282const int u16_to_i = int (su16 ); 283const int16_t i_to_i16 = int16_t (si ); 284const uint16_t i_to_u16 = uint16_t (si ); 285 286// uint <-> int16/uint16 287const uint i16_to_u = uint (si16 ); 288const uint u16_to_u = uint (su16 ); 289const int16_t u_to_i16 = int16_t (su ); 290const uint16_t u_to_u16 = uint16_t (su ); 291 292// int64 <-> int16/uint16 293const int64_t i16_to_i64 = int64_t (si16 ); 294const int64_t u16_to_i64 = int64_t (su16 ); 295const int16_t i64_to_i16 = int16_t (si64 ); 296const uint16_t i64_to_u16 = uint16_t (si64 ); 297 298// uint64 <-> int16/uint16 299const uint64_t i16_to_u64 = uint64_t (si16 ); 300const uint64_t u16_to_u64 = uint64_t (su16 ); 301const int16_t u64_to_i16 = int16_t (su64 ); 302const uint16_t u64_to_u16 = uint16_t (su64 ); 303 304// int16 <-> uint16 305const uint16_t i16_to_u16 = uint16_t (si16 ); 306const int16_t u16_to_i16 = int16_t (su16 ); 307 308void main () 309{ 310literal (); 311operators (); 312typeCast (); 313builtinFuncs (); 314}