summaryrefslogtreecommitdiff
path: root/src/kernels/common.opencl
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernels/common.opencl')
-rw-r--r--src/kernels/common.opencl17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/kernels/common.opencl b/src/kernels/common.opencl
index 08c47d87..223501fd 100644
--- a/src/kernels/common.opencl
+++ b/src/kernels/common.opencl
@@ -109,6 +109,16 @@ R"(
typedef real singlereal;
#endif
+// Converts a 'real argument' value to a 'real' value as passed to the kernel. Normally there is no
+// conversion, but half-precision is not supported as kernel argument so it is converted from float.
+#if PRECISION == 16
+ typedef float real_arg;
+ #define GetRealArg(x) (half)x
+#else
+ typedef real real_arg;
+ #define GetRealArg(x) x
+#endif
+
// =================================================================================================
// Don't use the non-IEEE754 compliant OpenCL built-in mad() instruction per default. For specific
@@ -138,6 +148,13 @@ R"(
#define SetToOne(a) a = ONE
#endif
+// Determines whether a variable is zero
+#if PRECISION == 3232 || PRECISION == 6464
+ #define IsZero(a) ((a.x == ZERO) && (a.y == ZERO))
+#else
+ #define IsZero(a) (a == ZERO)
+#endif
+
// The absolute value (component-wise)
#if PRECISION == 3232 || PRECISION == 6464
#define AbsoluteValue(value) value.x = fabs(value.x); value.y = fabs(value.y)