|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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 |
|
|