yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
0bb930fc
main
1#version 450 2 3#extension GL_EXT_shader_explicit_arithmetic_types : enable 4#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require 5#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require 6#extension GL_EXT_shader_explicit_arithmetic_types_int32 : require 7#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require 8#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require 9#extension GL_EXT_shader_explicit_arithmetic_types_float32 : require 10#extension GL_EXT_shader_explicit_arithmetic_types_float64 : require 11 12void main () 13{ 14} 15 16// Single float literals 17void literal () 18{ 19const float32_t f32c = 0.000001f ; 20const f32vec2 f32cv = f32vec2 (-0.25F ,0.03f ); 21 22f32vec2 f32v ; 23f32v .x = f32c ; 24f32v += f32cv ; 25} 26 27// Block memory layout 28struct S 29{ 30float32_t x ; 31f32vec2 y ; 32f32vec3 z ; 33}; 34 35layout (column_major ,std140 )uniform B1 36{ 37float32_t a ; 38f32vec2 b ; 39f32vec3 c ; 40float32_t d [2 ]; 41f32mat2x3 e ; 42f32mat2x3 f [2 ]; 43S g ; 44S h [2 ]; 45}; 46 47// Specialization constant 48layout (constant_id = 100 )const float16_t sf16 = 0.125 hf ; 49layout (constant_id = 101 )const float32_t sf = 0.25 ; 50layout (constant_id = 102 )const float64_t sd = 0.5lf ; 51 52const float f16_to_f = float (sf16 ); 53const double f16_to_d = float (sf16 ); 54 55const float16_t f_to_f16 = float16_t (sf ); 56const float16_t d_to_f16 = float16_t (sd ); 57 58void operators () 59{ 60float32_t f32 ; 61f32vec2 f32v ; 62f32mat2x2 f32m ; 63bool b ; 64 65// Arithmetic 66f32v += f32v ; 67f32v -= f32v ; 68f32v *=f32v ; 69f32v /=f32v ; 70f32v ++ ; 71f32v -- ; 72++ f32m ; 73-- f32m ; 74f32v = - f32v ; 75f32m = - f32m ; 76 77f32 = f32v .x + f32v .y ; 78f32 = f32v .x - f32v .y ; 79f32 = f32v .x * f32v .y ; 80f32 = f32v .x /f32v .y ; 81 82// Relational 83b = (f32v .x != f32 ); 84b = (f32v .y == f32 ); 85b = (f32v .x > f32 ); 86b = (f32v .y < f32 ); 87b = (f32v .x >=f32 ); 88b = (f32v .y <=f32 ); 89 90// Vector/matrix operations 91f32v = f32v * f32 ; 92f32m = f32m * f32 ; 93f32v = f32m * f32v ; 94f32v = f32v * f32m ; 95f32m = f32m * f32m ; 96} 97 98void typeCast () 99{ 100bvec3 bv ; 101f32vec3 f32v ; 102f64vec3 f64v ; 103i8vec3 i8v ; 104u8vec3 u8v ; 105i16vec3 i16v ; 106u16vec3 u16v ; 107i32vec3 i32v ; 108u32vec3 u32v ; 109i64vec3 i64v ; 110u64vec3 u64v ; 111f16vec3 f16v ; 112 113f64v = f32v ;// float32_t -> float64_t 114 115f32v = f32vec3 (bv );// bool -> float32 116bv = bvec3 (f32v );// float32 -> bool 117 118f32v = f32vec3 (f64v );// double -> float32 119f64v = f64vec3 (f32v );// float32 -> double 120 121f32v = f32vec3 (f16v );// float16 -> float32 122f16v = f16vec3 (f32v );// float32 -> float16 123 124i8v = i8vec3 (f32v );// float32 -> int8 125i16v = i16vec3 (f32v );// float32 -> int16 126i32v = i32vec3 (f32v );// float32 -> int32 127i64v = i64vec3 (f32v );// float32 -> int64 128 129u8v = u8vec3 (f32v );// float32 -> uint8 130u16v = u16vec3 (f32v );// float32 -> uint16 131u32v = u32vec3 (f32v );// float32 -> uint32 132u64v = u64vec3 (f32v );// float32 -> uint64 133} 134 135void builtinAngleTrigFuncs () 136{ 137f32vec4 f32v1 ,f32v2 ; 138 139f32v2 = radians (f32v1 ); 140f32v2 = degrees (f32v1 ); 141f32v2 = sin (f32v1 ); 142f32v2 = cos (f32v1 ); 143f32v2 = tan (f32v1 ); 144f32v2 = asin (f32v1 ); 145f32v2 = acos (f32v1 ); 146f32v2 = atan (f32v1 ,f32v2 ); 147f32v2 = atan (f32v1 ); 148f32v2 = sinh (f32v1 ); 149f32v2 = cosh (f32v1 ); 150f32v2 = tanh (f32v1 ); 151f32v2 = asinh (f32v1 ); 152f32v2 = acosh (f32v1 ); 153f32v2 = atanh (f32v1 ); 154} 155 156void builtinExpFuncs () 157{ 158f32vec2 f32v1 ,f32v2 ; 159 160f32v2 = pow (f32v1 ,f32v2 ); 161f32v2 = exp (f32v1 ); 162f32v2 = log (f32v1 ); 163f32v2 = exp2 (f32v1 ); 164f32v2 = log2 (f32v1 ); 165f32v2 = sqrt (f32v1 ); 166f32v2 = inversesqrt (f32v1 ); 167} 168 169void builtinCommonFuncs () 170{ 171f32vec3 f32v1 ,f32v2 ,f32v3 ; 172float32_t f32 ; 173bool b ; 174bvec3 bv ; 175ivec3 iv ; 176 177f32v2 = abs (f32v1 ); 178f32v2 = sign (f32v1 ); 179f32v2 = floor (f32v1 ); 180f32v2 = trunc (f32v1 ); 181f32v2 = round (f32v1 ); 182f32v2 = roundEven (f32v1 ); 183f32v2 = ceil (f32v1 ); 184f32v2 = fract (f32v1 ); 185f32v2 = mod (f32v1 ,f32v2 ); 186f32v2 = mod (f32v1 ,f32 ); 187f32v3 = modf (f32v1 ,f32v2 ); 188f32v3 = min (f32v1 ,f32v2 ); 189f32v3 = min (f32v1 ,f32 ); 190f32v3 = max (f32v1 ,f32v2 ); 191f32v3 = max (f32v1 ,f32 ); 192f32v3 = clamp (f32v1 ,f32 ,f32v2 .x ); 193f32v3 = clamp (f32v1 ,f32v2 ,f32vec3 (f32 )); 194f32v3 = mix (f32v1 ,f32v2 ,f32 ); 195f32v3 = mix (f32v1 ,f32v2 ,f32v3 ); 196f32v3 = mix (f32v1 ,f32v2 ,bv ); 197f32v3 = step (f32v1 ,f32v2 ); 198f32v3 = step (f32 ,f32v3 ); 199f32v3 = smoothstep (f32v1 ,f32v2 ,f32v3 ); 200f32v3 = smoothstep (f32 ,f32v1 .x ,f32v2 ); 201b = isnan (f32 ); 202bv = isinf (f32v1 ); 203f32v3 = fma (f32v1 ,f32v2 ,f32v3 ); 204f32v2 = frexp (f32v1 ,iv ); 205f32v2 = ldexp (f32v1 ,iv ); 206} 207 208void builtinGeometryFuncs () 209{ 210float32_t f32 ; 211f32vec3 f32v1 ,f32v2 ,f32v3 ; 212 213f32 = length (f32v1 ); 214f32 = distance (f32v1 ,f32v2 ); 215f32 = dot (f32v1 ,f32v2 ); 216f32v3 = cross (f32v1 ,f32v2 ); 217f32v2 = normalize (f32v1 ); 218f32v3 = faceforward (f32v1 ,f32v2 ,f32v3 ); 219f32v3 = reflect (f32v1 ,f32v2 ); 220f32v3 = refract (f32v1 ,f32v2 ,f32 ); 221} 222 223void builtinMatrixFuncs () 224{ 225f32mat2x3 f32m1 ,f32m2 ,f32m3 ; 226f32mat3x2 f32m4 ; 227f32mat3 f32m5 ; 228f32mat4 f32m6 ,f32m7 ; 229 230f32vec3 f32v1 ; 231f32vec2 f32v2 ; 232 233float32_t f32 ; 234 235f32m3 = matrixCompMult (f32m1 ,f32m2 ); 236f32m1 = outerProduct (f32v1 ,f32v2 ); 237f32m4 = transpose (f32m1 ); 238f32 = determinant (f32m5 ); 239f32m6 = inverse (f32m7 ); 240} 241 242void builtinVecRelFuncs () 243{ 244f32vec3 f32v1 ,f32v2 ; 245bvec3 bv ; 246 247bv = lessThan (f32v1 ,f32v2 ); 248bv = lessThanEqual (f32v1 ,f32v2 ); 249bv = greaterThan (f32v1 ,f32v2 ); 250bv = greaterThanEqual (f32v1 ,f32v2 ); 251bv = equal (f32v1 ,f32v2 ); 252bv = notEqual (f32v1 ,f32v2 ); 253} 254 255in f32vec3 if32v ; 256 257void builtinFragProcFuncs () 258{ 259f32vec3 f32v ; 260 261// Derivative 262f32v .x = dFdx (if32v .x ); 263f32v .y = dFdy (if32v .y ); 264f32v .xy = dFdxFine (if32v .xy ); 265f32v .xy = dFdyFine (if32v .xy ); 266f32v = dFdxCoarse (if32v ); 267f32v = dFdxCoarse (if32v ); 268 269f32v .x = fwidth (if32v .x ); 270f32v .xy = fwidthFine (if32v .xy ); 271f32v = fwidthCoarse (if32v ); 272 273// Interpolation 274f32v .x = interpolateAtCentroid (if32v .x ); 275f32v .xy = interpolateAtSample (if32v .xy ,1 ); 276f32v = interpolateAtOffset (if32v ,f32vec2 (0.5f )); 277}