| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifndef NSS_COMMON |
| #define NSS_COMMON |
|
|
| #include "typedefs.h" |
|
|
| #define MAX_FP16 65504.HF |
| #define EPS 1e-7HF |
|
|
|
|
| |
| |
|
|
|
|
| half Sigmoid(half x) |
| { |
| return rcp(half(1.0) + exp(-x)); |
| } |
|
|
|
|
| half2 Sigmoid(half2 x) |
| { |
| return rcp(half2(1.0) + exp(-x)); |
| } |
|
|
|
|
| half3 Sigmoid(half3 x) |
| { |
| return rcp(half3(1.0) + exp(-x)); |
| } |
|
|
|
|
| half4 Sigmoid(half4 x) |
| { |
| return rcp(half4(1.0) + exp(-x)); |
| } |
|
|
|
|
| |
| |
| |
|
|
| half Dequantize(half i, half2 quant_params) |
| { |
| return (i - quant_params.y) * quant_params.x; |
| } |
|
|
|
|
| half2 Dequantize(half2 i, half2 quant_params) |
| { |
| return (i - quant_params.y) * quant_params.x; |
| } |
|
|
|
|
| half3 Dequantize(half3 i, half2 quant_params) |
| { |
| return (i - quant_params.y) * quant_params.x; |
| } |
|
|
|
|
| half4 Dequantize(half4 i, half2 quant_params) |
| { |
| return (i - quant_params.y) * quant_params.x; |
| } |
|
|
|
|
| int8_t Quantize(half f, half2 quant_params) |
| { |
| return int8_t(clamp(round(f * quant_params.x + quant_params.y), -128.HF, 127.HF)); |
| } |
|
|
|
|
| int8_t2 Quantize(half2 f, half2 quant_params) |
| { |
| return int8_t2(clamp(round(f * quant_params.x + quant_params.y), -128.HF, 127.HF)); |
| } |
|
|
|
|
| int8_t3 Quantize(half3 f, half2 quant_params) |
| { |
| return int8_t3(clamp(round(f * quant_params.x + quant_params.y), -128.HF, 127.HF)); |
| } |
|
|
|
|
| int8_t4 Quantize(half4 f, half2 quant_params) |
| { |
| return int8_t4(clamp(round(f * quant_params.x + quant_params.y), -128.HF, 127.HF)); |
| } |
|
|
|
|
| |
| |
| |
| |
| |
|
|
|
|
| uint8_t EncodeNearestDepthCoord(int32_t2 o) |
| { |
| |
| o = clamp(o, ivec2(-1), ivec2( 1)); |
| return uint8_t((o.y + 1) << 2 | (o.x + 1)); |
| } |
|
|
|
|
| int32_t2 DecodeNearestDepthCoord(int32_t code) |
| { |
| int32_t x = int32_t( code & 0x3) - 1; |
| int32_t y = int32_t((code >> 2) & 0x3) - 1; |
| return int32_t2(x, y); |
| } |
|
|
|
|
| |
| |
|
|
| half Luminance(half3 rgb) |
| { |
| |
| return dot(rgb, half3(0.2126, 0.7152, 0.0722)); |
| } |
|
|
|
|
| half3 Tonemap(half3 x) |
| { |
| |
| |
| x = max(x, half3(0.HF)); |
| return x * rcp(half3(1.HF) + max(max(x.r, x.g), x.b)); |
| } |
|
|
|
|
| half3 InverseTonemap(half3 x) |
| { |
| |
| |
| x = clamp(x, half3(0.HF), Tonemap(half3(MAX_FP16))); |
| return x * rcp(half3(1.HF) - max(max(x.r, x.g), x.b)); |
| } |
|
|
|
|
| half3 SafeColour(half3 x) |
| { |
| return clamp(x, half3(0.HF), half3(MAX_FP16)); |
| } |
|
|
|
|
| #endif |
|
|