util/rand_xor: use getrandom() when available
[mesa.git] / src / util / format_srgb.h
index 8e92c38f4611b0c51aae27749e39a41f3c2279c1..596af56f4cd84af182010a774a96e54c1d8acd8e 100644 (file)
@@ -38,6 +38,8 @@
 #define U_FORMAT_SRGB_H_
 
 #include <stdint.h>
+#include <math.h>
+#include "c99_compat.h"
 
 extern const float
 util_format_srgb_8unorm_to_linear_float_table[256];
@@ -52,6 +54,34 @@ extern const unsigned
 util_format_linear_to_srgb_helper_table[104];
 
 
+static inline float
+util_format_srgb_to_linear_float(float cs)
+{
+   if (cs <= 0.0f)
+      return 0.0f;
+   else if (cs <= 0.04045f)
+      return cs / 12.92f;
+   else if (cs < 1.0f)
+      return powf((cs + 0.055) / 1.055f, 2.4f);
+   else
+      return 1.0f;
+}
+
+
+static inline float
+util_format_linear_to_srgb_float(float cl)
+{
+   if (cl <= 0.0f)
+      return 0.0f;
+   else if (cl < 0.0031308f)
+      return 12.92f * cl;
+   else if (cl < 1.0f)
+      return 1.055f * powf(cl, 0.41666f) - 0.055f;
+   else
+      return 1.0f;
+}
+
+
 /**
  * Convert a unclamped linear float to srgb value in the [0,255].
  */