• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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