yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
d1608ab1
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 float64_t f64c = 0.000001LF ; 20const f64vec2 f64cv = f64vec2 (-0.25lF ,0.03Lf ); 21 22f64vec2 f64v ; 23f64v .x = f64c ; 24f64v += f64cv ; 25} 26 27// Block memory layout 28struct S 29{ 30float64_t x ; 31f64vec2 y ; 32f64vec3 z ; 33}; 34 35layout (column_major ,std140 )uniform B1 36{ 37float64_t a ; 38f64vec2 b ; 39f64vec3 c ; 40float64_t d [2 ]; 41f64mat2x3 e ; 42f64mat2x3 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{ 60float64_t f64 ; 61f64vec2 f64v ; 62f64mat2x2 f64m ; 63bool b ; 64 65// Arithmetic 66f64v += f64v ; 67f64v -= f64v ; 68f64v *=f64v ; 69f64v /=f64v ; 70f64v ++ ; 71f64v -- ; 72++ f64m ; 73-- f64m ; 74f64v = - f64v ; 75f64m = - f64m ; 76 77f64 = f64v .x + f64v .y ; 78f64 = f64v .x - f64v .y ; 79f64 = f64v .x * f64v .y ; 80f64 = f64v .x /f64v .y ; 81 82// Relational 83b = (f64v .x != f64 ); 84b = (f64v .y == f64 ); 85b = (f64v .x > f64 ); 86b = (f64v .y < f64 ); 87b = (f64v .x >=f64 ); 88b = (f64v .y <=f64 ); 89 90// Vector/matrix operations 91f64v = f64v * f64 ; 92f64m = f64m * f64 ; 93f64v = f64m * f64v ; 94f64v = f64v * f64m ; 95f64m = f64m * f64m ; 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 = f64vec3 (bv );// bool -> float64 114bv = bvec3 (f64v );// float64 -> bool 115 116f64v = f64vec3 (f16v );// float16 -> float64 117f16v = f16vec3 (f64v );// float64 -> float16 118 119i8v = i8vec3 (f64v );// float64 -> int8 120i16v = i16vec3 (f64v );// float64 -> int16 121i32v = i32vec3 (f64v );// float64 -> int32 122i64v = i64vec3 (f64v );// float64 -> int64 123 124u8v = u8vec3 (f64v );// float64 -> uint8 125u16v = u16vec3 (f64v );// float64 -> uint16 126u32v = u32vec3 (f64v );// float64 -> uint32 127u64v = u64vec3 (f64v );// float64 -> uint64 128} 129 130// Trig, pow, exp and log are not supported for f64 131 132void builtinTranscendentalFuncs () 133{ 134f64vec2 f64v1 ,f64v2 ; 135 136f64v2 = sqrt (f64v1 ); 137f64v2 = inversesqrt (f64v1 ); 138} 139 140void builtinCommonFuncs () 141{ 142f64vec3 f64v1 ,f64v2 ,f64v3 ; 143float64_t f64 ; 144bool b ; 145bvec3 bv ; 146ivec3 iv ; 147 148f64v2 = abs (f64v1 ); 149f64v2 = sign (f64v1 ); 150f64v2 = floor (f64v1 ); 151f64v2 = trunc (f64v1 ); 152f64v2 = round (f64v1 ); 153f64v2 = roundEven (f64v1 ); 154f64v2 = ceil (f64v1 ); 155f64v2 = fract (f64v1 ); 156f64v2 = mod (f64v1 ,f64v2 ); 157f64v2 = mod (f64v1 ,f64 ); 158f64v3 = modf (f64v1 ,f64v2 ); 159f64v3 = min (f64v1 ,f64v2 ); 160f64v3 = min (f64v1 ,f64 ); 161f64v3 = max (f64v1 ,f64v2 ); 162f64v3 = max (f64v1 ,f64 ); 163f64v3 = clamp (f64v1 ,f64 ,f64v2 .x ); 164f64v3 = clamp (f64v1 ,f64v2 ,f64vec3 (f64 )); 165f64v3 = mix (f64v1 ,f64v2 ,f64 ); 166f64v3 = mix (f64v1 ,f64v2 ,f64v3 ); 167f64v3 = mix (f64v1 ,f64v2 ,bv ); 168f64v3 = step (f64v1 ,f64v2 ); 169f64v3 = step (f64 ,f64v3 ); 170f64v3 = smoothstep (f64v1 ,f64v2 ,f64v3 ); 171f64v3 = smoothstep (f64 ,f64v1 .x ,f64v2 ); 172b = isnan (f64 ); 173bv = isinf (f64v1 ); 174f64v3 = fma (f64v1 ,f64v2 ,f64v3 ); 175f64v2 = frexp (f64v1 ,iv ); 176f64v2 = ldexp (f64v1 ,iv ); 177} 178 179void builtinGeometryFuncs () 180{ 181float64_t f64 ; 182f64vec3 f64v1 ,f64v2 ,f64v3 ; 183 184f64 = length (f64v1 ); 185f64 = distance (f64v1 ,f64v2 ); 186f64 = dot (f64v1 ,f64v2 ); 187f64v3 = cross (f64v1 ,f64v2 ); 188f64v2 = normalize (f64v1 ); 189f64v3 = faceforward (f64v1 ,f64v2 ,f64v3 ); 190f64v3 = reflect (f64v1 ,f64v2 ); 191f64v3 = refract (f64v1 ,f64v2 ,f64 ); 192} 193 194void builtinMatrixFuncs () 195{ 196f64mat2x3 f64m1 ,f64m2 ,f64m3 ; 197f64mat3x2 f64m4 ; 198f64mat3 f64m5 ; 199f64mat4 f64m6 ,f64m7 ; 200 201f64vec3 f64v1 ; 202f64vec2 f64v2 ; 203 204float64_t f64 ; 205 206f64m3 = matrixCompMult (f64m1 ,f64m2 ); 207f64m1 = outerProduct (f64v1 ,f64v2 ); 208f64m4 = transpose (f64m1 ); 209f64 = determinant (f64m5 ); 210f64m6 = inverse (f64m7 ); 211} 212 213void builtinVecRelFuncs () 214{ 215f64vec3 f64v1 ,f64v2 ; 216bvec3 bv ; 217 218bv = lessThan (f64v1 ,f64v2 ); 219bv = lessThanEqual (f64v1 ,f64v2 ); 220bv = greaterThan (f64v1 ,f64v2 ); 221bv = greaterThanEqual (f64v1 ,f64v2 ); 222bv = equal (f64v1 ,f64v2 ); 223bv = notEqual (f64v1 ,f64v2 ); 224} 225 226in flat f64vec3 if64v ; 227 228void builtinFragProcFuncs () 229{ 230f64vec3 f64v ; 231 232// Derivative 233f64v .x = dFdx (if64v .x ); 234f64v .y = dFdy (if64v .y ); 235f64v .xy = dFdxFine (if64v .xy ); 236f64v .xy = dFdyFine (if64v .xy ); 237f64v = dFdxCoarse (if64v ); 238f64v = dFdxCoarse (if64v ); 239 240f64v .x = fwidth (if64v .x ); 241f64v .xy = fwidthFine (if64v .xy ); 242f64v = fwidthCoarse (if64v ); 243 244// Interpolation 245f64v .x = interpolateAtCentroid (if64v .x ); 246f64v .xy = interpolateAtSample (if64v .xy ,1 ); 247f64v = interpolateAtOffset (if64v ,f64vec2 (0.5f )); 248}