1#version 450 2#if defined(GL_AMD_gpu_shader_half_float) 3#extension GL_AMD_gpu_shader_half_float : require 4#elif defined(GL_NV_gpu_shader5) 5#extension GL_NV_gpu_shader5 : require 6#else 7#error No extension available for FP16. 8#endif 9 10struct ResType 11{ 12 f16vec4 _m0; 13 ivec4 _m1; 14}; 15 16layout(location = 3) in f16vec4 v4; 17layout(location = 2) in f16vec3 v3; 18layout(location = 0) in float16_t v1; 19layout(location = 1) in f16vec2 v2; 20 21f16mat2 test_mat2(f16vec2 a, f16vec2 b, f16vec2 c, f16vec2 d) 22{ 23 return f16mat2(f16vec2(a), f16vec2(b)) * f16mat2(f16vec2(c), f16vec2(d)); 24} 25 26f16mat3 test_mat3(f16vec3 a, f16vec3 b, f16vec3 c, f16vec3 d, f16vec3 e, f16vec3 f) 27{ 28 return f16mat3(f16vec3(a), f16vec3(b), f16vec3(c)) * f16mat3(f16vec3(d), f16vec3(e), f16vec3(f)); 29} 30 31void test_constants() 32{ 33 float16_t a = float16_t(1.0); 34 float16_t b = float16_t(1.5); 35 float16_t c = float16_t(-1.5); 36 float16_t d = float16_t(0.0 / 0.0); 37 float16_t e = float16_t(1.0 / 0.0); 38 float16_t f = float16_t(-1.0 / 0.0); 39 float16_t g = float16_t(1014.0); 40 float16_t h = float16_t(9.5367431640625e-07); 41} 42 43float16_t test_result() 44{ 45 return float16_t(1.0); 46} 47 48void test_conversions() 49{ 50 float16_t one = test_result(); 51 int a = int(one); 52 uint b = uint(one); 53 bool c = !(one == float16_t(0.0)); 54 float d = float(one); 55 double e = double(one); 56 float16_t a2 = float16_t(a); 57 float16_t b2 = float16_t(b); 58 float16_t c2 = float16_t(c); 59 float16_t d2 = float16_t(d); 60 float16_t e2 = float16_t(e); 61} 62 63void test_builtins() 64{ 65 f16vec4 res = radians(v4); 66 res = degrees(v4); 67 res = sin(v4); 68 res = cos(v4); 69 res = tan(v4); 70 res = asin(v4); 71 res = atan(v4, v3.xyzz); 72 res = atan(v4); 73 res = sinh(v4); 74 res = cosh(v4); 75 res = tanh(v4); 76 res = asinh(v4); 77 res = acosh(v4); 78 res = atanh(v4); 79 res = pow(v4, v4); 80 res = exp(v4); 81 res = log(v4); 82 res = exp2(v4); 83 res = log2(v4); 84 res = sqrt(v4); 85 res = inversesqrt(v4); 86 res = abs(v4); 87 res = sign(v4); 88 res = floor(v4); 89 res = trunc(v4); 90 res = round(v4); 91 res = roundEven(v4); 92 res = ceil(v4); 93 res = fract(v4); 94 res = mod(v4, v4); 95 f16vec4 tmp; 96 f16vec4 _231 = modf(v4, tmp); 97 res = _231; 98 res = min(v4, v4); 99 res = max(v4, v4); 100 res = clamp(v4, v4, v4); 101 res = mix(v4, v4, v4); 102 res = mix(v4, v4, lessThan(v4, v4)); 103 res = step(v4, v4); 104 res = smoothstep(v4, v4, v4); 105 bvec4 btmp = isnan(v4); 106 btmp = isinf(v4); 107 res = fma(v4, v4, v4); 108 ResType _275; 109 _275._m0 = frexp(v4, _275._m1); 110 ivec4 itmp = _275._m1; 111 res = _275._m0; 112 res = ldexp(res, itmp); 113 uint pack0 = packFloat2x16(v4.xy); 114 uint pack1 = packFloat2x16(v4.zw); 115 res = f16vec4(unpackFloat2x16(pack0), unpackFloat2x16(pack1)); 116 float16_t t0 = length(v4); 117 t0 = distance(v4, v4); 118 t0 = dot(v4, v4); 119 f16vec3 res3 = cross(v3, v3); 120 res = normalize(v4); 121 res = faceforward(v4, v4, v4); 122 res = reflect(v4, v4); 123 res = refract(v4, v4, v1); 124 btmp = lessThan(v4, v4); 125 btmp = lessThanEqual(v4, v4); 126 btmp = greaterThan(v4, v4); 127 btmp = greaterThanEqual(v4, v4); 128 btmp = equal(v4, v4); 129 btmp = not(equal(v4, v4)); 130 res = dFdx(v4); 131 res = dFdy(v4); 132 res = dFdxFine(v4); 133 res = dFdyFine(v4); 134 res = dFdxCoarse(v4); 135 res = dFdyCoarse(v4); 136 res = fwidth(v4); 137 res = fwidthFine(v4); 138 res = fwidthCoarse(v4); 139} 140 141void main() 142{ 143 f16vec2 param = v2; 144 f16vec2 param_1 = v2; 145 f16vec2 param_2 = v3.xy; 146 f16vec2 param_3 = v3.xy; 147 f16mat2 m0 = test_mat2(param, param_1, param_2, param_3); 148 f16vec3 param_4 = v3; 149 f16vec3 param_5 = v3; 150 f16vec3 param_6 = v3; 151 f16vec3 param_7 = v4.xyz; 152 f16vec3 param_8 = v4.xyz; 153 f16vec3 param_9 = v4.yzw; 154 f16mat3 m1 = test_mat3(param_4, param_5, param_6, param_7, param_8, param_9); 155 test_constants(); 156 test_conversions(); 157 test_builtins(); 158} 159 160