libobs: plugins: Use MAD for sRGB functions

Also fix stray comment about pow behavior.
This commit is contained in:
jpark37 2024-11-10 19:28:41 -08:00 • committed by Ryan Foster
commit 689c0094b8
6 changed files with 7 additions and 7 deletions

View file

@ -10,7 +10,7 @@ float3 srgb_linear_to_nonlinear(float3 v)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)
@ -148,7 +148,7 @@ float3 linear_to_hlg(float3 rgb, float Lw)
float Yd = dot(rgb, float3(0.2627, 0.678, 0.0593));
// pow(0., exponent) can lead to NaN, use smallest positive normal number
// avoid inf from pow(0., negative) by using smallest positive normal number
Yd = max(6.10352e-5, Yd);
rgb *= pow(Yd, -1. / 6.);

View file

@ -10,7 +10,7 @@ float3 srgb_linear_to_nonlinear(float3 v)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)

View file

@ -10,7 +10,7 @@ float3 srgb_linear_to_nonlinear(float3 v)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)

View file

@ -24,7 +24,7 @@ VertData VSDefault(VertData v_in)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)

View file

@ -28,7 +28,7 @@ VertData VSDefault(VertData v_in)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)

View file

@ -25,7 +25,7 @@ VertData VSDefault(VertData v_in)
float srgb_nonlinear_to_linear_channel(float u)
{
return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
return (u <= 0.04045) ? (u / 12.92) : pow(mad(u, 1. / 1.055, .055 / 1.055), 2.4);
}
float3 srgb_nonlinear_to_linear(float3 v)