File: spv.float32.frag

package info (click to toggle)
glslang 16.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 51,084 kB
  • sloc: cpp: 90,714; yacc: 4,243; sh: 603; python: 305; ansic: 94; javascript: 74; makefile: 17
file content (277 lines) | stat: -rw-r--r-- 6,413 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#version 450

#extension GL_EXT_shader_explicit_arithmetic_types: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
#extension GL_EXT_shader_explicit_arithmetic_types_int32: require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
#extension GL_EXT_shader_explicit_arithmetic_types_float32: require
#extension GL_EXT_shader_explicit_arithmetic_types_float64: require

void main()
{
}

// Single float literals
void literal()
{
    const float32_t f32c  = 0.000001f;
    const f32vec2   f32cv = f32vec2(-0.25F, 0.03f);

    f32vec2 f32v;
    f32v.x  = f32c;
    f32v   += f32cv;
}

// Block memory layout
struct S
{
    float32_t  x;
    f32vec2    y;
    f32vec3    z;
};

layout(column_major, std140) uniform B1
{
    float32_t  a;
    f32vec2    b;
    f32vec3    c;
    float32_t  d[2];
    f32mat2x3  e;
    f32mat2x3  f[2];
    S          g;
    S          h[2];
};

// Specialization constant
layout(constant_id = 100) const float16_t sf16 = 0.125hf;
layout(constant_id = 101) const float32_t sf   = 0.25;
layout(constant_id = 102) const float64_t sd   = 0.5lf;

const float  f16_to_f = float(sf16);
const double f16_to_d = float(sf16);

const float16_t f_to_f16 = float16_t(sf);
const float16_t d_to_f16 = float16_t(sd);

void operators()
{
    float32_t f32;
    f32vec2   f32v;
    f32mat2x2 f32m;
    bool      b;

    // Arithmetic
    f32v += f32v;
    f32v -= f32v;
    f32v *= f32v;
    f32v /= f32v;
    f32v++;
    f32v--;
    ++f32m;
    --f32m;
    f32v = -f32v;
    f32m = -f32m;

    f32 = f32v.x + f32v.y;
    f32 = f32v.x - f32v.y;
    f32 = f32v.x * f32v.y;
    f32 = f32v.x / f32v.y;

    // Relational
    b = (f32v.x != f32);
    b = (f32v.y == f32);
    b = (f32v.x >  f32);
    b = (f32v.y <  f32);
    b = (f32v.x >= f32);
    b = (f32v.y <= f32);

    // Vector/matrix operations
    f32v = f32v * f32;
    f32m = f32m * f32;
    f32v = f32m * f32v;
    f32v = f32v * f32m;
    f32m = f32m * f32m;
}

void typeCast()
{
    bvec3   bv;
    f32vec3   f32v;
    f64vec3   f64v;
    i8vec3    i8v;
    u8vec3    u8v;
    i16vec3   i16v;
    u16vec3   u16v;
    i32vec3   i32v;
    u32vec3   u32v;
    i64vec3   i64v;
    u64vec3   u64v;
    f16vec3   f16v;

    f64v = f32v;            // float32_t -> float64_t

    f32v = f32vec3(bv);     // bool -> float32
    bv   = bvec3(f32v);     // float32 -> bool

    f32v = f32vec3(f64v);   // double -> float32
    f64v = f64vec3(f32v);   // float32 -> double

    f32v = f32vec3(f16v);   // float16 -> float32
    f16v = f16vec3(f32v);   // float32 -> float16

    i8v  = i8vec3(f32v);    //  float32 -> int8
    i16v = i16vec3(f32v);    // float32 -> int16
    i32v = i32vec3(f32v);    // float32 -> int32
    i64v = i64vec3(f32v);    // float32 -> int64

    u8v  = u8vec3(f32v);    //  float32 -> uint8
    u16v = u16vec3(f32v);    // float32 -> uint16
    u32v = u32vec3(f32v);    // float32 -> uint32
    u64v = u64vec3(f32v);    // float32 -> uint64
}

void builtinAngleTrigFuncs()
{
    f32vec4 f32v1, f32v2;

    f32v2 = radians(f32v1);
    f32v2 = degrees(f32v1);
    f32v2 = sin(f32v1);
    f32v2 = cos(f32v1);
    f32v2 = tan(f32v1);
    f32v2 = asin(f32v1);
    f32v2 = acos(f32v1);
    f32v2 = atan(f32v1, f32v2);
    f32v2 = atan(f32v1);
    f32v2 = sinh(f32v1);
    f32v2 = cosh(f32v1);
    f32v2 = tanh(f32v1);
    f32v2 = asinh(f32v1);
    f32v2 = acosh(f32v1);
    f32v2 = atanh(f32v1);
}

void builtinExpFuncs()
{
    f32vec2 f32v1, f32v2;

    f32v2 = pow(f32v1, f32v2);
    f32v2 = exp(f32v1);
    f32v2 = log(f32v1);
    f32v2 = exp2(f32v1);
    f32v2 = log2(f32v1);
    f32v2 = sqrt(f32v1);
    f32v2 = inversesqrt(f32v1);
}

void builtinCommonFuncs()
{
    f32vec3   f32v1, f32v2, f32v3;
    float32_t f32;
    bool  b;
    bvec3 bv;
    ivec3 iv;

    f32v2 = abs(f32v1);
    f32v2 = sign(f32v1);
    f32v2 = floor(f32v1);
    f32v2 = trunc(f32v1);
    f32v2 = round(f32v1);
    f32v2 = roundEven(f32v1);
    f32v2 = ceil(f32v1);
    f32v2 = fract(f32v1);
    f32v2 = mod(f32v1, f32v2);
    f32v2 = mod(f32v1, f32);
    f32v3 = modf(f32v1, f32v2);
    f32v3 = min(f32v1, f32v2);
    f32v3 = min(f32v1, f32);
    f32v3 = max(f32v1, f32v2);
    f32v3 = max(f32v1, f32);
    f32v3 = clamp(f32v1, f32, f32v2.x);
    f32v3 = clamp(f32v1, f32v2, f32vec3(f32));
    f32v3 = mix(f32v1, f32v2, f32);
    f32v3 = mix(f32v1, f32v2, f32v3);
    f32v3 = mix(f32v1, f32v2, bv);
    f32v3 = step(f32v1, f32v2);
    f32v3 = step(f32, f32v3);
    f32v3 = smoothstep(f32v1, f32v2, f32v3);
    f32v3 = smoothstep(f32, f32v1.x, f32v2);
    b     = isnan(f32);
    bv    = isinf(f32v1);
    f32v3 = fma(f32v1, f32v2, f32v3);
    f32v2 = frexp(f32v1, iv);
    f32v2 = ldexp(f32v1, iv);
}

void builtinGeometryFuncs()
{
    float32_t f32;
    f32vec3   f32v1, f32v2, f32v3;

    f32   = length(f32v1);
    f32   = distance(f32v1, f32v2);
    f32   = dot(f32v1, f32v2);
    f32v3 = cross(f32v1, f32v2);
    f32v2 = normalize(f32v1);
    f32v3 = faceforward(f32v1, f32v2, f32v3);
    f32v3 = reflect(f32v1, f32v2);
    f32v3 = refract(f32v1, f32v2, f32);
}

void builtinMatrixFuncs()
{
    f32mat2x3 f32m1, f32m2, f32m3;
    f32mat3x2 f32m4;
    f32mat3   f32m5;
    f32mat4   f32m6, f32m7;

    f32vec3 f32v1;
    f32vec2 f32v2;

    float32_t f32;

    f32m3 = matrixCompMult(f32m1, f32m2);
    f32m1 = outerProduct(f32v1, f32v2);
    f32m4 = transpose(f32m1);
    f32   = determinant(f32m5);
    f32m6 = inverse(f32m7);
}

void builtinVecRelFuncs()
{
    f32vec3 f32v1, f32v2;
    bvec3   bv;

    bv = lessThan(f32v1, f32v2);
    bv = lessThanEqual(f32v1, f32v2);
    bv = greaterThan(f32v1, f32v2);
    bv = greaterThanEqual(f32v1, f32v2);
    bv = equal(f32v1, f32v2);
    bv = notEqual(f32v1, f32v2);
}

in f32vec3 if32v;

void builtinFragProcFuncs()
{
    f32vec3 f32v;

    // Derivative
    f32v.x  = dFdx(if32v.x);
    f32v.y  = dFdy(if32v.y);
    f32v.xy = dFdxFine(if32v.xy);
    f32v.xy = dFdyFine(if32v.xy);
    f32v    = dFdxCoarse(if32v);
    f32v    = dFdxCoarse(if32v);

    f32v.x  = fwidth(if32v.x);
    f32v.xy = fwidthFine(if32v.xy);
    f32v    = fwidthCoarse(if32v);

    // Interpolation
    f32v.x  = interpolateAtCentroid(if32v.x);
    f32v.xy = interpolateAtSample(if32v.xy, 1);
    f32v    = interpolateAtOffset(if32v, f32vec2(0.5f));
}